@@ -4094,7 +4094,7 @@ protected void visitInstanceofNot(final BinaryExpression be) {
4094
4094
} else {
4095
4095
// saving type of variables to restoring them after returning from block
4096
4096
Map <VariableExpression , List <ClassNode >> oldTracker = pushAssignmentTracking ();
4097
- getTypeCheckingContext () .pushTemporaryTypeInfo ();
4097
+ typeCheckingContext .pushTemporaryTypeInfo ();
4098
4098
typeCheckingContext .blockStatements2Types .put (currentBlock , oldTracker );
4099
4099
}
4100
4100
pushInstanceOfTypeInfo (be .getLeftExpression (), be .getRightExpression ());
@@ -4114,11 +4114,11 @@ public void visitBlockStatement(final BlockStatement block) {
4114
4114
4115
4115
@ Deprecated
4116
4116
public void visitClosingBlock (final BlockStatement block ) {
4117
- BlockStatement peekBlock = typeCheckingContext .enclosingBlocks .removeFirst ();
4118
- boolean found = typeCheckingContext .blockStatements2Types .containsKey (peekBlock );
4117
+ BlockStatement theBlock = typeCheckingContext .enclosingBlocks .pop ();
4118
+ boolean found = typeCheckingContext .blockStatements2Types .containsKey (theBlock );
4119
4119
if (found ) {
4120
- Map <VariableExpression , List <ClassNode >> oldTracker = typeCheckingContext .blockStatements2Types .remove (peekBlock );
4121
- getTypeCheckingContext () .popTemporaryTypeInfo ();
4120
+ Map <VariableExpression , List <ClassNode >> oldTracker = typeCheckingContext .blockStatements2Types .remove (theBlock );
4121
+ typeCheckingContext .popTemporaryTypeInfo ();
4122
4122
popAssignmentTracking (oldTracker );
4123
4123
}
4124
4124
}
@@ -4262,13 +4262,15 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
4262
4262
4263
4263
protected Map <VariableExpression , ClassNode > popAssignmentTracking (final Map <VariableExpression , List <ClassNode >> oldTracker ) {
4264
4264
Map <VariableExpression , ClassNode > assignments = new HashMap <>();
4265
- typeCheckingContext .ifElseForWhileAssignmentTracker .forEach ((var , types ) -> {
4266
- types .stream ().filter (t -> t != null && t != UNKNOWN_PARAMETER_TYPE ) // GROOVY-6099, GROOVY-10294
4267
- .reduce (WideningCategories ::lowestUpperBound ).ifPresent (type -> {
4268
- assignments .put (var , type );
4269
- storeType (var , type );
4265
+ if (typeCheckingContext .ifElseForWhileAssignmentTracker != null ){ // GROOVY-11488
4266
+ typeCheckingContext .ifElseForWhileAssignmentTracker .forEach ((var , types ) -> {
4267
+ types .stream ().filter (t -> t != null && t != UNKNOWN_PARAMETER_TYPE ) // GROOVY-6099, GROOVY-10294
4268
+ .reduce (WideningCategories ::lowestUpperBound ).ifPresent (type -> {
4269
+ assignments .put (var , type );
4270
+ storeType (var , type );
4271
+ });
4270
4272
});
4271
- });
4273
+ }
4272
4274
typeCheckingContext .ifElseForWhileAssignmentTracker = oldTracker ;
4273
4275
// GROOVY-9786, GROOVY-11450: nested conditional assignments
4274
4276
if (oldTracker != null ) {
0 commit comments