public void checkInitializerExceptions( BlockScope currentScope, FlowContext initializerContext, FlowInfo flowInfo) { for (int i = 0; i < this.exceptionCount; i++) { initializerContext.checkExceptionHandlers( this.thrownExceptions[i], this.exceptionThrowers[i], this.exceptionThrowerFlowInfos[i], currentScope); } }
public String toString() { StringBuffer buffer = new StringBuffer(); FlowContext current = this; int parentsCount = 0; while ((current = current.parent) != null) { parentsCount++; } FlowContext[] parents = new FlowContext[parentsCount + 1]; current = this; int index = parentsCount; while (index >= 0) { parents[index--] = current; current = current.parent; } for (int i = 0; i < parentsCount; i++) { for (int j = 0; j < i; j++) buffer.append('\t'); buffer.append(parents[i].individualToString()).append('\n'); } buffer.append('*'); for (int j = 0; j < parentsCount + 1; j++) buffer.append('\t'); buffer.append(individualToString()).append('\n'); return buffer.toString(); }
public FlowContext getTargetContextForDefaultBreak() { FlowContext current = this, lastNonReturningSubRoutine = null; while (current != null) { if (current.isNonReturningContext()) { lastNonReturningSubRoutine = current; } if (current.isBreakable() && current.labelName() == null) { if (lastNonReturningSubRoutine == null) return current; return lastNonReturningSubRoutine; } current = current.getLocalParent(); } // not found return null; }
public FlowContext getTargetContextForDefaultBreak() { FlowContext current = this, lastNonReturningSubRoutine = null; while (current != null) { if (current.isNonReturningContext()) { lastNonReturningSubRoutine = current; } if (current.isBreakable() && current.labelName() == null) { if (lastNonReturningSubRoutine == null) return current; return lastNonReturningSubRoutine; } current = current.parent; } // not found return null; }
? flowContext.getTargetContextForDefaultBreak() : flowContext.getTargetContextForBreakLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); this.targetLabel = targetContext.breakLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, (this.subroutines = new SubRoutineStatement[subCount*2]), 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); traversedContext.recordBreakTo(targetContext); targetContext.recordBreakFrom(flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
? flowContext.getTargetContextForDefaultContinue() : flowContext.getTargetContextForContinueLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); currentScope.methodScope().recordInitializationStates(flowInfo); this.targetLabel = targetContext.continueLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, this.subroutines = new SubRoutineStatement[subCount*2], 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); targetContext.recordContinueFrom(flowContext, flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) { switch (this.bits & RestrictiveFlagMASK) { case Binding.FIELD : // reading a field // check if reading a final blank field FieldBinding fieldBinding; if ((fieldBinding = (FieldBinding) this.binding).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 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; } } return flowInfo; } /**
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { this.exception.analyseCode(currentScope, flowContext, flowInfo); this.exception.checkNPE(currentScope, flowContext, flowInfo); // need to check that exception thrown is actually caught somewhere flowContext.checkExceptionHandlers(this.exceptionType, this, flowInfo, currentScope); currentScope.checkUnclosedCloseables(flowInfo, flowContext, this, currentScope); flowContext.recordAbruptExit(); return FlowInfo.DEAD_END; }
&& 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); this); } else { flowContext.recordSettingFinal(this.binding, this, flowInfo);
? flowContext.getTargetContextForDefaultBreak() : flowContext.getTargetContextForBreakLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); this.targetLabel = targetContext.breakLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, (this.subroutines = new SubRoutineStatement[subCount*2]), 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); traversedContext.recordBreakTo(targetContext); targetContext.recordBreakFrom(flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
? flowContext.getTargetContextForDefaultContinue() : flowContext.getTargetContextForContinueLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); currentScope.methodScope().recordInitializationStates(flowInfo); this.targetLabel = targetContext.continueLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, this.subroutines = new SubRoutineStatement[subCount*2], 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); targetContext.recordContinueFrom(flowContext, flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
@Override public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) { switch (this.bits & RestrictiveFlagMASK) { case Binding.FIELD : // reading a field // check if reading a final blank field FieldBinding fieldBinding; if ((fieldBinding = (FieldBinding) this.binding).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 LocalVariableBinding localBinding; if (!flowInfo.isDefinitelyAssigned(localBinding = (LocalVariableBinding) this.binding)) { currentScope.problemReporter().uninitializedLocalVariable(localBinding, this, currentScope); } if ((flowInfo.tagBits & FlowInfo.UNREACHABLE) == 0) { localBinding.useFlag = LocalVariableBinding.USED; } else if (localBinding.useFlag == LocalVariableBinding.UNUSED) { localBinding.useFlag = LocalVariableBinding.FAKE_USED; } } return flowInfo; } /**
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { this.exception.analyseCode(currentScope, flowContext, flowInfo); this.exception.checkNPE(currentScope, flowContext, flowInfo); // need to check that exception thrown is actually caught somewhere flowContext.checkExceptionHandlers(this.exceptionType, this, flowInfo, currentScope); currentScope.checkUnclosedCloseables(flowInfo, flowContext, this, currentScope); flowContext.recordAbruptExit(); return FlowInfo.DEAD_END; }
public FlowContext getTargetContextForDefaultBreak() { FlowContext current = this, lastNonReturningSubRoutine = null; while (current != null) { if (current.isNonReturningContext()) { lastNonReturningSubRoutine = current; } if (current.isBreakable() && current.labelName() == null) { if (lastNonReturningSubRoutine == null) return current; return lastNonReturningSubRoutine; } current = current.parent; } // not found return null; }
? flowContext.getTargetContextForDefaultBreak() : flowContext.getTargetContextForBreakLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); this.targetLabel = targetContext.breakLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, (this.subroutines = new SubRoutineStatement[subCount*2]), 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); traversedContext.recordBreakTo(targetContext); targetContext.recordBreakFrom(flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
? flowContext.getTargetContextForDefaultContinue() : flowContext.getTargetContextForContinueLabel(this.label); targetContext.recordAbruptExit(); targetContext.expireNullCheckedFieldInfo(); currentScope.methodScope().recordInitializationStates(flowInfo); this.targetLabel = targetContext.continueLabel(); FlowContext traversedContext = flowContext; int subCount = 0; if ((sub = traversedContext.subroutine()) != null) { if (subCount == this.subroutines.length) { System.arraycopy(this.subroutines, 0, this.subroutines = new SubRoutineStatement[subCount*2], 0, subCount); // grow traversedContext.recordReturnFrom(flowInfo.unconditionalInits()); targetContext.recordContinueFrom(flowContext, flowInfo); break; } while ((traversedContext = traversedContext.getLocalParent()) != null);
public FlowContext getTargetContextForDefaultBreak() { FlowContext current = this, lastNonReturningSubRoutine = null; while (current != null) { if (current.isNonReturningContext()) { lastNonReturningSubRoutine = current; } if (current.isBreakable() && current.labelName() == null) { if (lastNonReturningSubRoutine == null) return current; return lastNonReturningSubRoutine; } current = current.getLocalParent(); } // not found return null; }
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, boolean valueRequired) { switch (this.bits & RestrictiveFlagMASK) { case Binding.FIELD : // reading a field // check if reading a final blank field FieldBinding fieldBinding; if ((fieldBinding = (FieldBinding) this.binding).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 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; } } return flowInfo; } /**
public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { this.exception.analyseCode(currentScope, flowContext, flowInfo); this.exception.checkNPE(currentScope, flowContext, flowInfo); // need to check that exception thrown is actually caught somewhere flowContext.checkExceptionHandlers(this.exceptionType, this, flowInfo, currentScope); currentScope.checkUnclosedCloseables(flowInfo, flowContext, this, currentScope); flowContext.recordAbruptExit(); return FlowInfo.DEAD_END; }
public void checkInitializerExceptions( BlockScope currentScope, FlowContext initializerContext, FlowInfo flowInfo) { for (int i = 0; i < this.exceptionCount; i++) { initializerContext.checkExceptionHandlers( this.thrownExceptions[i], this.exceptionThrowers[i], this.exceptionThrowerFlowInfos[i], currentScope); } }