Examples of FlowInfo


Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

      // explicit this receiver, not allowed in static context
      currentScope.resetEnclosingMethodStaticFlag();
    }
  }

  FlowInfo conditionFlowInfo;
  if (this.arguments != null) {
    int length = this.arguments.length;
    for (int i = 0; i < length; i++) {
      Expression argument = this.arguments[i];
      if ((argument.implicitConversion & TypeIds.UNBOXING) != 0) {
        argument.checkNPE(currentScope, flowContext, flowInfo);
      }
      if (this.receiver.resolvedType != null
          && this.receiver.resolvedType.id == TypeIds.T_OrgEclipseCoreRuntimeAssert
          && argument.resolvedType != null
          && argument.resolvedType.id == TypeIds.T_boolean) {
        Constant cst = argument.optimizedBooleanConstant();
        boolean isOptimizedTrueAssertion = cst != Constant.NotAConstant && cst.booleanValue() == true;
        boolean isOptimizedFalseAssertion = cst != Constant.NotAConstant && cst.booleanValue() == false;
        flowContext.tagBits |= FlowContext.HIDE_NULL_COMPARISON_WARNING;
        conditionFlowInfo = argument.analyseCode(currentScope, flowContext, flowInfo.copy());
        if (!wasInsideAssert) {
          flowContext.tagBits &= ~FlowContext.HIDE_NULL_COMPARISON_WARNING;
        }
        UnconditionalFlowInfo assertWhenTrueInfo = conditionFlowInfo.initsWhenTrue().unconditionalInits();
        FlowInfo assertInfo = conditionFlowInfo.initsWhenFalse();
        if (isOptimizedTrueAssertion) {
          assertInfo.setReachMode(FlowInfo.UNREACHABLE_OR_DEAD);
        }
        if (!isOptimizedFalseAssertion) {
          // if assertion is not false for sure, only then it makes sense to carry the flow info ahead.
          // if the code does reach ahead, it means the assert didn't cause an exit, and so
          // the expression inside it shouldn't change the prior flowinfo
          // viz. org.eclipse.core.runtime.Assert.isLegal(false && o != null)
         
          // keep the merge from the initial code for the definite assignment
          // analysis, tweak the null part to influence nulls downstream
          flowInfo = flowInfo.mergedWith(assertInfo.nullInfoLessUnconditionalCopy()).
            addInitializationsFrom(assertWhenTrueInfo.discardInitializationInfo());
        }
      } else {
        flowInfo = argument.analyseCode(currentScope, flowContext, flowInfo).unconditionalInits();
      }
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

  this.type = type;
  type.bits |= ASTNode.IgnoreRawTypeCheck; // no need to worry about raw type usage
}

public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
  FlowInfo result = this.expression
    .analyseCode(currentScope, flowContext, flowInfo)
    .unconditionalInits();
  if ((this.expression.implicitConversion & TypeIds.UNBOXING) != 0) {
    this.expression.checkNPE(currentScope, flowContext, flowInfo);
  }
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

  // compound assignment extra work
  if (isCompound) { // check the variable part is initialized if blank final
    if (this.binding.isBlankFinal()
      && this.receiver.isThis()
      && currentScope.needBlankFinalFieldInitializationCheck(this.binding)) {
      FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(this.binding.declaringClass.original(), flowInfo);
      if (!fieldInits.isDefinitelyAssigned(this.binding)) {
        currentScope.problemReporter().uninitializedBlankFinalField(this.binding, this);
        // we could improve error msg here telling "cannot use compound assignment on final blank field"
      }
    }
    manageSyntheticAccessIfNecessary(currentScope, flowInfo, true /*read-access*/);
 
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

    switch (this.bits & ASTNode.RestrictiveFlagMASK) {
      case Binding.FIELD : // reading a field
        FieldBinding fieldBinding = (FieldBinding) this.binding;
        if (fieldBinding.isBlankFinal()
            && currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
          FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
          if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
            currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
          }
        }
        if (!fieldBinding.isStatic()) {
          // https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

        manageSyntheticAccessIfNecessary(currentScope, flowInfo, true /*read-access*/);
      }
      // check if reading a final blank field
      FieldBinding fieldBinding = (FieldBinding) this.binding;
      if (fieldBinding.isBlankFinal() && currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
        FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
        if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
          currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
        }
      }
      if (!fieldBinding.isStatic()) {
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=318682
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

  public static FlowInfo markPassedToOutside(BlockScope scope, Expression expression, FlowInfo flowInfo, boolean owned) { 
   
    FakedTrackingVariable trackVar = getCloseTrackingVariable(expression);
    if (trackVar != null) {
      // insert info that the tracked resource *may* be closed (by the target method, i.e.)
      FlowInfo infoResourceIsClosed = owned ? flowInfo : flowInfo.copy();
      int flag = owned ? OWNED_BY_OUTSIDE : SHARED_WITH_OUTSIDE;
      do {
        trackVar.globalClosingState |= flag;
        if (scope.methodScope() != trackVar.methodScope)
          trackVar.globalClosingState |= CLOSED_IN_NESTED_METHOD;
        infoResourceIsClosed.markAsDefinitelyNonNull(trackVar.binding);
      } while ((trackVar = trackVar.innerTracker) != null);
      if (owned) {
        return infoResourceIsClosed; // don't let downstream signal any problems on this flow
      } else {
        return FlowInfo.conditional(flowInfo, infoResourceIsClosed); // only report potential problems on this flow
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

      }
      // check if final blank field
      if (lastFieldBinding.isBlankFinal()
            && this.otherBindings != null // the last field binding is only assigned
           && currentScope.needBlankFinalFieldInitializationCheck(lastFieldBinding)) {
        FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(lastFieldBinding.declaringClass.original(), flowInfo);
        if (!fieldInits.isDefinitelyAssigned(lastFieldBinding)) {
          currentScope.problemReporter().uninitializedBlankFinalField(lastFieldBinding, this);
        }
      }
      if (!lastFieldBinding.isStatic()) {
        currentScope.resetDeclaringClassMethodStaticFlag(lastFieldBinding.declaringClass);
      }
      break;
    case Binding.LOCAL :
      // first binding is a local variable
      LocalVariableBinding localBinding;
      if (!flowInfo
        .isDefinitelyAssigned(localBinding = (LocalVariableBinding) this.binding)) {
        currentScope.problemReporter().uninitializedLocalVariable(localBinding, this);
      }
      if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0)  {
        localBinding.useFlag = LocalVariableBinding.USED;
      } else if (localBinding.useFlag == LocalVariableBinding.UNUSED) {
        localBinding.useFlag = LocalVariableBinding.FAKE_USED;
      }
      if (needValue) {
        checkNPE(currentScope, flowContext, flowInfo, true);
      }
  }

  if (needValue) {
    manageEnclosingInstanceAccessIfNecessary(currentScope, flowInfo);
    // only for first binding
  }
  // all intermediate field accesses are read accesses
  if (this.otherBindings != null) {
    for (int i = 0; i < otherBindingsCount-1; i++) {
      lastFieldBinding = this.otherBindings[i];
      needValue = !this.otherBindings[i+1].isStatic();
      if (needValue || complyTo14) {
        manageSyntheticAccessIfNecessary(currentScope, lastFieldBinding, i + 1, flowInfo);
      }
    }
    lastFieldBinding = this.otherBindings[otherBindingsCount-1];
  }

  if (isCompound) {
    if (otherBindingsCount == 0
        && lastFieldBinding.isBlankFinal()
        && currentScope.needBlankFinalFieldInitializationCheck(lastFieldBinding)) {
      FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(lastFieldBinding.declaringClass, flowInfo);
      if (!fieldInits.isDefinitelyAssigned(lastFieldBinding)) {
        currentScope.problemReporter().uninitializedBlankFinalField(lastFieldBinding, this);
      }
    }
    manageSyntheticAccessIfNecessary(currentScope, lastFieldBinding, otherBindingsCount, flowInfo);
  }
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

      FieldBinding fieldBinding = (FieldBinding) this.binding;
      if (this.indexOfFirstFieldBinding == 1) { // was an implicit reference to the first field binding
        // check if reading a final blank field
        if (fieldBinding.isBlankFinal()
            && currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
          FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
          if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
            currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
          }
        }
      }
      if (!fieldBinding.isStatic()) {
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

    switch (this.bits & ASTNode.RestrictiveFlagMASK) {
      case Binding.FIELD : // reading a field
        FieldBinding fieldBinding = (FieldBinding) this.binding;
        if (fieldBinding.isBlankFinal()
            && currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
          FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
          if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
            currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
          }
        }
        manageSyntheticAccessIfNecessary(currentScope, flowInfo, true /*read-access*/);
        break;
 
View Full Code Here

Examples of org.eclipse.jdt.internal.compiler.flow.FlowInfo

        manageSyntheticAccessIfNecessary(currentScope, flowInfo, true /*read-access*/);
      }
      // check if reading a final blank field
      FieldBinding fieldBinding = (FieldBinding) this.binding;
      if (fieldBinding.isBlankFinal() && currentScope.needBlankFinalFieldInitializationCheck(fieldBinding)) {
        FlowInfo fieldInits = flowContext.getInitsForFinalBlankInitializationCheck(fieldBinding.declaringClass.original(), flowInfo);
        if (!fieldInits.isDefinitelyAssigned(fieldBinding)) {
          currentScope.problemReporter().uninitializedBlankFinalField(fieldBinding, this);
        }
      }
      break;
    case Binding.LOCAL : // reading a local variable
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.