List of usage examples for org.eclipse.jdt.internal.compiler.flow FlowInfo conditional
public static FlowInfo conditional(FlowInfo initsWhenTrue, FlowInfo initsWhenFalse)
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.ast.TSuperMessageSend.java
License:Open Source License
/** Check whether this message send contributes to base call analysis */ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { flowInfo = super.analyseCode(currentScope, flowContext, flowInfo); if (this.binding.isCallin()) { MethodBinding tsuperMethod = this.binding; if (tsuperMethod.copyInheritanceSrc != null) tsuperMethod = tsuperMethod.copyInheritanceSrc; if (!MethodModel.hasCallinFlag(tsuperMethod, CALLIN_FLAG_DEFINITELY_MISSING_BASECALL)) { // no contribution if no base call. MethodDeclaration callinMethod = (MethodDeclaration) currentScope.methodScope().referenceContext; LocalVariableBinding trackingVariable = callinMethod.baseCallTrackingVariable.binding; if (MethodModel.hasCallinFlag(tsuperMethod, CALLIN_FLAG_POTENTIALLY_MISSING_BASECALL)) { if (flowInfo.isDefinitelyAssigned(trackingVariable) || flowInfo.isPotentiallyAssigned(trackingVariable)) { currentScope.problemReporter().potentiallyDuplicateBasecall(this); } else { FlowInfo potential = flowInfo.copy(); potential.markAsDefinitelyAssigned(trackingVariable); flowInfo = FlowInfo.conditional(flowInfo.initsWhenTrue(), potential.initsWhenTrue()); }//from www .j a v a 2s. c o m } else { // tsuper definitely has a base call: if (flowInfo.isDefinitelyAssigned(trackingVariable)) currentScope.problemReporter().definitelyDuplicateBasecall(this); else if (flowInfo.isPotentiallyAssigned(trackingVariable)) currentScope.problemReporter().potentiallyDuplicateBasecall(this); if (!flowInfo.isDefinitelyAssigned(trackingVariable)) flowInfo.markAsDefinitelyAssigned(trackingVariable); } } } return flowInfo; }