diff --git a/src/checkers/inference/util/SlotDefaultTypeResolver.java b/src/checkers/inference/util/SlotDefaultTypeResolver.java index 2f081931..e2034e46 100644 --- a/src/checkers/inference/util/SlotDefaultTypeResolver.java +++ b/src/checkers/inference/util/SlotDefaultTypeResolver.java @@ -3,6 +3,8 @@ import com.sun.source.tree.AnnotatedTypeTree; import com.sun.source.tree.ArrayTypeTree; import com.sun.source.tree.ClassTree; +import com.sun.source.tree.ExpressionTree; +import com.sun.source.tree.NewClassTree; import com.sun.source.tree.ParameterizedTypeTree; import com.sun.source.tree.PrimitiveTypeTree; import com.sun.source.tree.Tree; @@ -185,5 +187,21 @@ public Void visitAnnotatedType(AnnotatedTypeTree tree, Void unused) { return super.visitAnnotatedType(tree, unused); } + + @Override + public Void visitNewClass(NewClassTree tree, Void unused) { + AnnotatedTypeMirror defaultType = getDefaultTypeFor(tree); + if (InferenceUtil.isAnonymousClass(tree)) { + // don't associate the identifier with the defaultType if it's an anonymousclass + // should associate the identifier with the direct super type of the defaultType. + // choose the last one of the directSupertypes, which is either the direct super class + // or implemented interface + List superTypes = defaultType.directSupertypes(); + defaultTypes.put(tree.getIdentifier(), superTypes.get(superTypes.size()-1)); + } else { + defaultTypes.put(tree.getIdentifier(), defaultType); + } + return super.visitNewClass(tree, unused); + } } }