diff --git a/checker/src/main/java/org/checkerframework/checker/calledmethods/builder/AutoValueSupport.java b/checker/src/main/java/org/checkerframework/checker/calledmethods/builder/AutoValueSupport.java index 4e03dcf2a62..98902b8e9f9 100644 --- a/checker/src/main/java/org/checkerframework/checker/calledmethods/builder/AutoValueSupport.java +++ b/checker/src/main/java/org/checkerframework/checker/calledmethods/builder/AutoValueSupport.java @@ -24,10 +24,10 @@ import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType; import org.checkerframework.framework.util.AnnotatedTypes; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; import org.checkerframework.javacutil.TypesUtils; +import org.checkerframework.javacutil.UserError; import org.plumelib.util.ArraysPlume; /** @@ -80,7 +80,7 @@ builderElement, getAutoValuePackageName() + ".AutoValue.Builder")) { Element classContainingBuilderElement = builderElement.getEnclosingElement(); if (!ElementUtils.hasAnnotation( classContainingBuilderElement, getAutoValuePackageName() + ".AutoValue")) { - throw new BugInCF( + throw new UserError( "class " + classContainingBuilderElement.getSimpleName() + " is missing @AutoValue annotation"); diff --git a/checker/src/main/java/org/checkerframework/checker/fenum/FenumAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/fenum/FenumAnnotatedTypeFactory.java index 1c0c68d4e73..110fa429f8f 100644 --- a/checker/src/main/java/org/checkerframework/checker/fenum/FenumAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/fenum/FenumAnnotatedTypeFactory.java @@ -20,7 +20,7 @@ import org.checkerframework.framework.util.QualifierKindHierarchy; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.UserError; import org.plumelib.reflection.Signatures; @@ -149,7 +149,7 @@ protected AnnotationMirror leastUpperBoundWithElements( } else if (qualifierKind2 == FENUM_KIND) { return a2; } - throw new BugInCF("Unexpected QualifierKinds %s %s", qualifierKind1, qualifierKind2); + throw new TypeSystemError("Unexpected QualifierKinds %s %s", qualifierKind1, qualifierKind2); } @Override @@ -166,7 +166,7 @@ protected AnnotationMirror greatestLowerBoundWithElements( } else if (qualifierKind2 == FENUM_KIND) { return a1; } - throw new BugInCF("Unexpected QualifierKinds %s %s", qualifierKind1, qualifierKind2); + throw new TypeSystemError("Unexpected QualifierKinds %s %s", qualifierKind1, qualifierKind2); } } } diff --git a/checker/src/main/java/org/checkerframework/checker/formatter/FormatterAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/formatter/FormatterAnnotatedTypeFactory.java index d33c2ff36c6..c9aee4b895f 100644 --- a/checker/src/main/java/org/checkerframework/checker/formatter/FormatterAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/formatter/FormatterAnnotatedTypeFactory.java @@ -25,7 +25,7 @@ import org.checkerframework.framework.util.QualifierKind; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; import scenelib.annotations.Annotation; import scenelib.annotations.el.AField; import scenelib.annotations.el.AMethod; @@ -218,7 +218,7 @@ protected boolean isSubtypeWithElements( } else if (subKind == INVALIDFORMAT_KIND && superKind == INVALIDFORMAT_KIND) { return true; } - throw new BugInCF("Unexpected kinds: %s %s", subKind, superKind); + throw new TypeSystemError("Unexpected kinds: %s %s", subKind, superKind); } @Override diff --git a/checker/src/main/java/org/checkerframework/checker/formatter/FormatterVisitor.java b/checker/src/main/java/org/checkerframework/checker/formatter/FormatterVisitor.java index c2d8425ab61..827230e5547 100644 --- a/checker/src/main/java/org/checkerframework/checker/formatter/FormatterVisitor.java +++ b/checker/src/main/java/org/checkerframework/checker/formatter/FormatterVisitor.java @@ -24,11 +24,11 @@ import org.checkerframework.common.wholeprograminference.WholeProgramInference; import org.checkerframework.framework.type.AnnotatedTypeMirror; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreePathUtil; import org.checkerframework.javacutil.TreeUtils; import org.checkerframework.javacutil.TypesUtils; +import org.checkerframework.javacutil.UserError; /** * Whenever a format method invocation is found in the syntax tree, checks are performed as @@ -208,7 +208,7 @@ private boolean forwardsArguments( ExecutableElement calledMethodElement = TreeUtils.elementFromUse(invocationTree); int callIndex = formatStringIndex(calledMethodElement); if (callIndex == -1) { - throw new BugInCF( + throw new UserError( "Method " + calledMethodElement + " is annotated @FormatMethod but has no String formal parameter"); diff --git a/checker/src/main/java/org/checkerframework/checker/guieffect/GuiEffectTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/guieffect/GuiEffectTypeFactory.java index 3522d0f3fdc..4553ff30074 100644 --- a/checker/src/main/java/org/checkerframework/checker/guieffect/GuiEffectTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/guieffect/GuiEffectTypeFactory.java @@ -36,9 +36,9 @@ import org.checkerframework.framework.type.treeannotator.TreeAnnotator; import org.checkerframework.framework.util.AnnotatedTypes; import org.checkerframework.javacutil.AnnotationBuilder; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** Annotated type factory for the GUI Effect Checker. */ @@ -307,7 +307,7 @@ public Effect getComputedEffectAtCallsite( } srcType = callerReceiver; } else { - throw new BugInCF("Unexpected getMethodSelect() kind at callsite " + node); + throw new TypeSystemError("Unexpected getMethodSelect() kind at callsite " + node); } // Instantiate type-polymorphic effects diff --git a/checker/src/main/java/org/checkerframework/checker/i18nformatter/I18nFormatterAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/i18nformatter/I18nFormatterAnnotatedTypeFactory.java index 50f928571bb..efd0a2c1710 100644 --- a/checker/src/main/java/org/checkerframework/checker/i18nformatter/I18nFormatterAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/i18nformatter/I18nFormatterAnnotatedTypeFactory.java @@ -32,7 +32,7 @@ import org.checkerframework.framework.util.QualifierKind; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; import org.plumelib.reflection.Signatures; /** @@ -257,7 +257,7 @@ protected boolean isSubtypeWithElements( treeUtil.getI18nInvalidFormatValue(subAnno), treeUtil.getI18nInvalidFormatValue(superAnno)); } - throw new BugInCF("Unexpected QualifierKinds: %s %s", subKind, superKind); + throw new TypeSystemError("Unexpected QualifierKinds: %s %s", subKind, superKind); } @Override diff --git a/checker/src/main/java/org/checkerframework/checker/index/IndexRefinementInfo.java b/checker/src/main/java/org/checkerframework/checker/index/IndexRefinementInfo.java index bb7a076b92c..a1804534679 100644 --- a/checker/src/main/java/org/checkerframework/checker/index/IndexRefinementInfo.java +++ b/checker/src/main/java/org/checkerframework/checker/index/IndexRefinementInfo.java @@ -10,7 +10,7 @@ import org.checkerframework.framework.flow.CFStore; import org.checkerframework.framework.flow.CFValue; import org.checkerframework.framework.type.QualifierHierarchy; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; /** * This struct contains all of the information that the refinement functions need. It's called by @@ -65,7 +65,7 @@ public IndexRefinementInfo( private static AnnotationMirror getAnno(Set set, QualifierHierarchy hierarchy) { Set tops = hierarchy.getTopAnnotations(); if (tops.size() != 1) { - throw new BugInCF( + throw new TypeSystemError( "%s: Found %d tops, but expected one.%nFound: %s", IndexRefinementInfo.class, tops.size(), tops); } diff --git a/checker/src/main/java/org/checkerframework/checker/index/searchindex/SearchIndexAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/index/searchindex/SearchIndexAnnotatedTypeFactory.java index cc4983cd4bb..dd2fbcf0c09 100644 --- a/checker/src/main/java/org/checkerframework/checker/index/searchindex/SearchIndexAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/index/searchindex/SearchIndexAnnotatedTypeFactory.java @@ -23,8 +23,8 @@ import org.checkerframework.framework.type.QualifierHierarchy; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; /** * The Search Index Checker is used to help type the results of calls to the JDK's binary search @@ -92,7 +92,7 @@ private List getValueElement(AnnotationMirror am) { } else if (areSameByClass(am, SearchIndexFor.class)) { return AnnotationUtils.getElementValueArray(am, searchIndexForValueElement, String.class); } else { - throw new BugInCF("indexForValue(%s)", am); + throw new TypeSystemError("indexForValue(%s)", am); } } diff --git a/checker/src/main/java/org/checkerframework/checker/index/upperbound/UBQualifier.java b/checker/src/main/java/org/checkerframework/checker/index/upperbound/UBQualifier.java index f9e40e3b972..5636a672e3c 100644 --- a/checker/src/main/java/org/checkerframework/checker/index/upperbound/UBQualifier.java +++ b/checker/src/main/java/org/checkerframework/checker/index/upperbound/UBQualifier.java @@ -20,8 +20,8 @@ import org.checkerframework.framework.type.AnnotatedTypeMirror; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.Pair; +import org.checkerframework.javacutil.TypeSystemError; import org.plumelib.util.CollectionsPlume; /** @@ -78,7 +78,7 @@ public static UBQualifier createUBQualifier( // TODO: Ignores offset. Should we check that offset is not set? return PolyQualifier.POLY; default: - throw new BugInCF("createUBQualifier(%s, %s, ...)", am, offset); + throw new TypeSystemError("createUBQualifier(%s, %s, ...)", am, offset); } } @@ -689,7 +689,7 @@ private AnnotationMirror convertToAnnotation( builder.setValue("value", sequences); builder.setValue("offset", offsets); } else { - throw new BugInCF("What annoClass? " + annoClass); + throw new TypeSystemError("What annoClass? " + annoClass); } return builder.build(); } diff --git a/checker/src/main/java/org/checkerframework/checker/index/upperbound/UpperBoundAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/index/upperbound/UpperBoundAnnotatedTypeFactory.java index 5bf33afcdd9..2b35a17c638 100644 --- a/checker/src/main/java/org/checkerframework/checker/index/upperbound/UpperBoundAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/index/upperbound/UpperBoundAnnotatedTypeFactory.java @@ -75,9 +75,9 @@ import org.checkerframework.framework.util.dependenttypes.DependentTypesHelper; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.Pair; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; /** * Implements the introduction rules for the Upper Bound Checker. @@ -334,18 +334,32 @@ public boolean isRandomNextInt(Tree methodTree) { return imf.isRandomNextInt(methodTree, processingEnv); } + /** + * Creates a new @LTLengthOf annotation. + * + * @param names the arguments to @LTLengthOf + * @return a new @LTLengthOf annotation with the given arguments + */ AnnotationMirror createLTLengthOfAnnotation(String... names) { if (names == null || names.length == 0) { - throw new BugInCF("createLTLengthOfAnnotation: bad argument %s", Arrays.toString(names)); + throw new TypeSystemError( + "createLTLengthOfAnnotation: bad argument %s", Arrays.toString(names)); } AnnotationBuilder builder = new AnnotationBuilder(getProcessingEnv(), LTLengthOf.class); builder.setValue("value", names); return builder.build(); } + /** + * Creates a new @LTEqLengthOf annotation. + * + * @param names the arguments to @LTEqLengthOf + * @return a new @LTEqLengthOf annotation with the given arguments + */ AnnotationMirror createLTEqLengthOfAnnotation(String... names) { if (names == null || names.length == 0) { - throw new BugInCF("createLTEqLengthOfAnnotation: bad argument %s", Arrays.toString(names)); + throw new TypeSystemError( + "createLTEqLengthOfAnnotation: bad argument %s", Arrays.toString(names)); } AnnotationBuilder builder = new AnnotationBuilder(getProcessingEnv(), LTEqLengthOf.class); builder.setValue("value", names); diff --git a/checker/src/main/java/org/checkerframework/checker/lock/LockAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/lock/LockAnnotatedTypeFactory.java index 5e1c1dbd3c3..1234b7eb393 100644 --- a/checker/src/main/java/org/checkerframework/checker/lock/LockAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/lock/LockAnnotatedTypeFactory.java @@ -61,10 +61,10 @@ import org.checkerframework.framework.util.dependenttypes.DependentTypesHelper; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.Pair; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.plumelib.util.CollectionsPlume; /** @@ -359,7 +359,7 @@ protected AnnotationMirror leastUpperBoundWithElements( } else if (qualifierKind2 == NEWOBJECT_KIND) { return a1; } - throw new BugInCF( + throw new TypeSystemError( "leastUpperBoundWithElements(%s, %s, %s, %s, %s)", a1, qualifierKind1, a2, qualifierKind2, lubKind); } @@ -396,7 +396,7 @@ protected AnnotationMirror greatestLowerBoundWithElements( } else if (qualifierKind2 == GUARDEDBYUNKNOWN_KIND) { return a1; } - throw new BugInCF( + throw new TypeSystemError( "greatestLowerBoundWithElements(%s, %s, %s, %s, %s)", a1, qualifierKind1, a2, qualifierKind2, glbKind); } diff --git a/checker/src/main/java/org/checkerframework/checker/lock/LockVisitor.java b/checker/src/main/java/org/checkerframework/checker/lock/LockVisitor.java index f8ad0b7f66e..1006fbb7642 100644 --- a/checker/src/main/java/org/checkerframework/checker/lock/LockVisitor.java +++ b/checker/src/main/java/org/checkerframework/checker/lock/LockVisitor.java @@ -57,10 +57,10 @@ import org.checkerframework.framework.util.StringToJavaExpression; import org.checkerframework.framework.util.dependenttypes.DependentTypesError; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreePathUtil; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; import org.plumelib.util.CollectionsPlume; @@ -1096,9 +1096,16 @@ private void checkLock(Tree tree, AnnotationMirror gbAnno) { checkLockOfThisOrTree(tree, false, gbAnno); } + /** + * Helper method tat checks the lock of either the implicit {@code this} or the given tree. + * + * @param tree a tree whose lock to check + * @param implicitThis true if checking the lock of the implicit {@code this} + * @param gbAnno a @GuardedBy annotation + */ private void checkLockOfThisOrTree(Tree tree, boolean implicitThis, AnnotationMirror gbAnno) { if (gbAnno == null) { - throw new BugInCF("LockVisitor.checkLock: gbAnno cannot be null"); + throw new TypeSystemError("LockVisitor.checkLock: gbAnno cannot be null"); } if (atypeFactory.areSameByClass(gbAnno, GuardedByUnknown.class) || atypeFactory.areSameByClass(gbAnno, GuardedByBottom.class)) { diff --git a/checker/src/main/java/org/checkerframework/checker/mustcall/MustCallAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/mustcall/MustCallAnnotatedTypeFactory.java index fdf3f01f857..babbd8b0047 100644 --- a/checker/src/main/java/org/checkerframework/checker/mustcall/MustCallAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/mustcall/MustCallAnnotatedTypeFactory.java @@ -46,9 +46,9 @@ import org.checkerframework.framework.type.typeannotator.TypeAnnotator; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; /** * The annotated type factory for the Must Call Checker. Primarily responsible for the subtyping @@ -197,7 +197,7 @@ public void methodFromUsePreSubstitution(ExpressionTree tree, AnnotatedExecutabl } else if (tree instanceof MemberReferenceTree) { declaration = (ExecutableElement) TreeUtils.elementFromTree(tree); } else { - throw new BugInCF("unexpected type of method tree: " + tree.getKind()); + throw new TypeSystemError("unexpected type of method tree: " + tree.getKind()); } changeNonOwningParameterTypesToTop(declaration, type); super.methodFromUsePreSubstitution(tree, type); diff --git a/checker/src/main/java/org/checkerframework/checker/nullness/NullnessAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/nullness/NullnessAnnotatedTypeFactory.java index 4b310079af9..f05df52211f 100644 --- a/checker/src/main/java/org/checkerframework/checker/nullness/NullnessAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/nullness/NullnessAnnotatedTypeFactory.java @@ -69,10 +69,10 @@ import org.checkerframework.framework.util.QualifierKind; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.Pair; import org.checkerframework.javacutil.TreePathUtil; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** The annotated type factory for the nullness type-system. */ @@ -638,7 +638,8 @@ protected boolean isSubtypeWithElements( if (!subKind.isInSameHierarchyAs(NULLABLE) || !superKind.isInSameHierarchyAs(NULLABLE)) { return this.isSubtypeInitialization(subAnno, subKind, superAnno, superKind); } - throw new BugInCF("Unexpected annotations isSubtypeWithElements(%s, %s)", subAnno, superAnno); + throw new TypeSystemError( + "Unexpected annotations isSubtypeWithElements(%s, %s)", subAnno, superAnno); } @Override @@ -652,7 +653,8 @@ protected AnnotationMirror leastUpperBoundWithElements( || !qualifierKind2.isInSameHierarchyAs(NULLABLE)) { return this.leastUpperBoundInitialization(a1, qualifierKind1, a2, qualifierKind2); } - throw new BugInCF("Unexpected annotations leastUpperBoundWithElements(%s, %s)", a1, a2); + throw new TypeSystemError( + "Unexpected annotations leastUpperBoundWithElements(%s, %s)", a1, a2); } @Override @@ -666,7 +668,8 @@ protected AnnotationMirror greatestLowerBoundWithElements( || !qualifierKind2.isInSameHierarchyAs(NULLABLE)) { return this.greatestLowerBoundInitialization(a1, qualifierKind1, a2, qualifierKind2); } - throw new BugInCF("Unexpected annotations greatestLowerBoundWithElements(%s, %s)", a1, a2); + throw new TypeSystemError( + "Unexpected annotations greatestLowerBoundWithElements(%s, %s)", a1, a2); } } diff --git a/checker/src/main/java/org/checkerframework/checker/nullness/NullnessTransfer.java b/checker/src/main/java/org/checkerframework/checker/nullness/NullnessTransfer.java index 8a505b85a17..258093d7206 100644 --- a/checker/src/main/java/org/checkerframework/checker/nullness/NullnessTransfer.java +++ b/checker/src/main/java/org/checkerframework/checker/nullness/NullnessTransfer.java @@ -41,8 +41,8 @@ import org.checkerframework.framework.util.AnnotatedTypes; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** @@ -401,7 +401,7 @@ private boolean hasNullableValueType(AnnotatedTypeMirror mapOrSubtype) { AnnotatedTypes.asSuper(nullnessTypeFactory, mapOrSubtype, MAP_TYPE); int numTypeArguments = mapType.getTypeArguments().size(); if (numTypeArguments != 2) { - throw new BugInCF("Wrong number %d of type arguments: %s", numTypeArguments, mapType); + throw new TypeSystemError("Wrong number %d of type arguments: %s", numTypeArguments, mapType); } AnnotatedTypeMirror valueType = mapType.getTypeArguments().get(1); return valueType.hasAnnotation(NULLABLE); diff --git a/checker/src/main/java/org/checkerframework/checker/regex/RegexAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/regex/RegexAnnotatedTypeFactory.java index c11ff8a00bc..4156498c41d 100644 --- a/checker/src/main/java/org/checkerframework/checker/regex/RegexAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/regex/RegexAnnotatedTypeFactory.java @@ -42,8 +42,8 @@ import org.checkerframework.framework.util.QualifierKind; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; /** * Adds {@link Regex} to the type of tree, in the following cases: @@ -188,7 +188,7 @@ protected boolean isSubtypeWithElements( } else if (subKind == PARTIALREGEX_KIND && superKind == PARTIALREGEX_KIND) { return AnnotationUtils.areSame(subAnno, superAnno); } - throw new BugInCF("Unexpected qualifiers: %s %s", subAnno, superAnno); + throw new TypeSystemError("Unexpected qualifiers: %s %s", subAnno, superAnno); } @Override @@ -217,7 +217,7 @@ protected AnnotationMirror leastUpperBoundWithElements( } else if (qualifierKind2 == PARTIALREGEX_KIND || qualifierKind2 == REGEX_KIND) { return a2; } - throw new BugInCF("Unexpected qualifiers: %s %s", a1, a2); + throw new TypeSystemError("Unexpected qualifiers: %s %s", a1, a2); } @Override @@ -246,7 +246,7 @@ protected AnnotationMirror greatestLowerBoundWithElements( } else if (qualifierKind2 == PARTIALREGEX_KIND || qualifierKind2 == REGEX_KIND) { return a2; } - throw new BugInCF("Unexpected qualifiers: %s %s", a1, a2); + throw new TypeSystemError("Unexpected qualifiers: %s %s", a1, a2); } /** diff --git a/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java b/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java index 3d380bf31be..3fba4cd6cfc 100644 --- a/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java +++ b/checker/src/main/java/org/checkerframework/checker/resourceleak/MustCallConsistencyAnalyzer.java @@ -69,11 +69,11 @@ import org.checkerframework.framework.util.JavaExpressionParseUtil.JavaExpressionParseException; import org.checkerframework.framework.util.StringToJavaExpression; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.Pair; import org.checkerframework.javacutil.TreePathUtil; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; import org.plumelib.util.StringsPlume; @@ -330,7 +330,7 @@ private boolean isValidInvocation( if (expression.equals(alias.reference)) { // This satisfies case 2 above. Remove all its aliases, then return below. if (toRemove != null) { - throw new BugInCF( + throw new TypeSystemError( "tried to remove multiple sets containing a reset expression at once"); } toRemove = obligation; @@ -819,7 +819,7 @@ private void checkReassignmentToField(AssignmentNode node, Set oblig Node lhsNode = node.getTarget(); if (!(lhsNode instanceof FieldAccessNode)) { - throw new BugInCF( + throw new TypeSystemError( "checkReassignmentToField: non-field node " + node + " of type " + node.getClass()); } @@ -981,7 +981,7 @@ private String receiverAsString(FieldAccessNode fieldAccessNode) { return ((LocalVariableNode) receiver).getName(); } - throw new BugInCF( + throw new TypeSystemError( "unexpected receiver of field assignment: " + receiver + " of type " + receiver.getClass()); } @@ -1049,7 +1049,7 @@ private List getArgumentsOfInvocation(Node node) { } else if (node instanceof ObjectCreationNode) { return ((ObjectCreationNode) node).getArguments(); } else { - throw new BugInCF("unexpected node type " + node.getClass()); + throw new TypeSystemError("unexpected node type " + node.getClass()); } } @@ -1069,7 +1069,7 @@ private List getParametersOfInvocation(Node node) { } else if (node instanceof ObjectCreationNode) { executableElement = TreeUtils.elementFromUse(((ObjectCreationNode) node).getTree()); } else { - throw new BugInCF("unexpected node type " + node.getClass()); + throw new TypeSystemError("unexpected node type " + node.getClass()); } return executableElement.getParameters(); @@ -1659,7 +1659,7 @@ private static void propagate( static String formatMissingMustCallMethods(List mustCallVal) { int size = mustCallVal.size(); if (size == 0) { - throw new BugInCF("empty mustCallVal " + mustCallVal); + throw new TypeSystemError("empty mustCallVal " + mustCallVal); } else if (size == 1) { return "method " + mustCallVal.get(0); } else { diff --git a/checker/src/main/java/org/checkerframework/checker/signedness/SignednessAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/signedness/SignednessAnnotatedTypeFactory.java index ab456030c16..2b5a568751b 100644 --- a/checker/src/main/java/org/checkerframework/checker/signedness/SignednessAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/signedness/SignednessAnnotatedTypeFactory.java @@ -39,11 +39,11 @@ import org.checkerframework.framework.type.treeannotator.TreeAnnotator; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.Pair; import org.checkerframework.javacutil.TreePathUtil; import org.checkerframework.javacutil.TreeUtils; import org.checkerframework.javacutil.TypeKindUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** @@ -420,7 +420,7 @@ private boolean maskIgnoresMSB( // Check that the shiftAmount most significant bits of the mask were 1. return mask == (1 << shiftAmount) - 1; } else { - throw new BugInCF("Invalid Masking Operation"); + throw new TypeSystemError("Invalid Masking Operation"); } } @@ -466,7 +466,7 @@ private boolean castIgnoresMSB( shiftAmount = 0x3F & getLong(shiftAmountLit.getValue()); break; default: - throw new BugInCF("Invalid shift type"); + throw new TypeSystemError("Invalid shift type"); } // Determine number of bits in the cast type @@ -488,7 +488,7 @@ private boolean castIgnoresMSB( castBits = 64; break; default: - throw new BugInCF("Invalid cast target"); + throw new TypeSystemError("Invalid cast target"); } long bitsDiscarded = shiftBits - castBits; diff --git a/checker/src/main/java/org/checkerframework/checker/units/UnitsAnnotatedTypeFactory.java b/checker/src/main/java/org/checkerframework/checker/units/UnitsAnnotatedTypeFactory.java index 64cf8eb5253..1412c9a7b63 100644 --- a/checker/src/main/java/org/checkerframework/checker/units/UnitsAnnotatedTypeFactory.java +++ b/checker/src/main/java/org/checkerframework/checker/units/UnitsAnnotatedTypeFactory.java @@ -383,7 +383,7 @@ private void addUnitsRelations(Class qual) { classname, unitsRelationsClass.getDeclaredConstructor().newInstance().init(processingEnv)); } catch (Throwable e) { - throw new BugInCF("Throwable when instantiating UnitsRelations", e); + throw new TypeSystemError("Throwable when instantiating UnitsRelations", e); } } } @@ -604,7 +604,7 @@ protected AnnotationMirror leastUpperBoundWithElements( return lub; } } - throw new BugInCF("Unexpected QualifierKinds: %s %s", qualifierKind1, qualifierKind2); + throw new TypeSystemError("Unexpected QualifierKinds: %s %s", qualifierKind1, qualifierKind2); } @Override @@ -685,7 +685,7 @@ private QualifierKind getDirectSuperQualifierKind( } superQuals.removeAll(lowest); } - throw new BugInCF("No direct super qualifier found for %s", qualifierKind); + throw new TypeSystemError("No direct super qualifier found for %s", qualifierKind); } } diff --git a/checker/src/test/java/org/checkerframework/checker/testchecker/ainfer/AinferTestAnnotatedTypeFactory.java b/checker/src/test/java/org/checkerframework/checker/testchecker/ainfer/AinferTestAnnotatedTypeFactory.java index 6fb6b0aad86..bfc0429a258 100644 --- a/checker/src/test/java/org/checkerframework/checker/testchecker/ainfer/AinferTestAnnotatedTypeFactory.java +++ b/checker/src/test/java/org/checkerframework/checker/testchecker/ainfer/AinferTestAnnotatedTypeFactory.java @@ -30,8 +30,8 @@ import org.checkerframework.framework.util.QualifierKind; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; /** * AnnotatedTypeFactory to test whole-program inference using .jaif files. @@ -135,7 +135,7 @@ protected AnnotationMirror greatestLowerBoundWithElements( } else if (qualifierKind2 == SIBLING_WITH_FIELDS_KIND) { return a2; } - throw new BugInCF("Unexpected qualifiers: %s %s", a1, a2); + throw new TypeSystemError("Unexpected qualifiers: %s %s", a1, a2); } @Override @@ -156,7 +156,7 @@ protected AnnotationMirror leastUpperBoundWithElements( } else if (qualifierKind2 == SIBLING_WITH_FIELDS_KIND) { return a2; } - throw new BugInCF("Unexpected qualifiers: %s %s", a1, a2); + throw new TypeSystemError("Unexpected qualifiers: %s %s", a1, a2); } @Override @@ -180,7 +180,7 @@ protected boolean isSubtypeWithElements( superAnno, siblingWithFieldsValue2Element, String.class, ""); return subVal1.equals(supVal1) && subVal2.equals(supVal2); } - throw new BugInCF("Unexpected qualifiers: %s %s", subAnno, superAnno); + throw new TypeSystemError("Unexpected qualifiers: %s %s", subAnno, superAnno); } } } diff --git a/framework/src/main/java/org/checkerframework/common/returnsreceiver/FluentAPIGenerator.java b/framework/src/main/java/org/checkerframework/common/returnsreceiver/FluentAPIGenerator.java index d6ad6333d43..119291e57ee 100644 --- a/framework/src/main/java/org/checkerframework/common/returnsreceiver/FluentAPIGenerator.java +++ b/framework/src/main/java/org/checkerframework/common/returnsreceiver/FluentAPIGenerator.java @@ -9,7 +9,7 @@ import org.checkerframework.framework.type.AnnotatedTypeMirror; import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** @@ -78,7 +78,7 @@ public boolean returnsThis(AnnotatedExecutableType t) { if (inAutoValueBuilder) { AnnotatedTypeMirror returnType = t.getReturnType(); if (returnType == null) { - throw new BugInCF("Return type cannot be null: " + t); + throw new TypeSystemError("Return type cannot be null: " + t); } return enclosingElement.equals(TypesUtils.getTypeElement(returnType.getUnderlyingType())); } @@ -115,7 +115,7 @@ public boolean returnsThis(AnnotatedExecutableType t) { if (inLombokBuilder) { AnnotatedTypeMirror returnType = t.getReturnType(); if (returnType == null) { - throw new BugInCF("Return type cannot be null: " + t); + throw new TypeSystemError("Return type cannot be null: " + t); } return enclosingElement.equals(TypesUtils.getTypeElement(returnType.getUnderlyingType())); } diff --git a/framework/src/main/java/org/checkerframework/common/value/ValueAnnotatedTypeFactory.java b/framework/src/main/java/org/checkerframework/common/value/ValueAnnotatedTypeFactory.java index 6257e3445b0..dae458a8ccc 100644 --- a/framework/src/main/java/org/checkerframework/common/value/ValueAnnotatedTypeFactory.java +++ b/framework/src/main/java/org/checkerframework/common/value/ValueAnnotatedTypeFactory.java @@ -66,10 +66,10 @@ import org.checkerframework.framework.util.JavaExpressionParseUtil.JavaExpressionParseException; import org.checkerframework.javacutil.AnnotationBuilder; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; import org.checkerframework.javacutil.TypeKindUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; import org.plumelib.util.CollectionsPlume; @@ -494,7 +494,7 @@ private static TypeKind toPrimitiveIntegralTypeKind(TypeMirror type) { if (typeKind != null && TypeKindUtils.isIntegral(typeKind)) { return typeKind; } - throw new BugInCF(type.toString() + " expected to be an integral type."); + throw new TypeSystemError(type.toString() + " expected to be an integral type."); } /** diff --git a/framework/src/main/java/org/checkerframework/common/value/ValueCheckerUtils.java b/framework/src/main/java/org/checkerframework/common/value/ValueCheckerUtils.java index 476353c61e7..595c6264661 100644 --- a/framework/src/main/java/org/checkerframework/common/value/ValueCheckerUtils.java +++ b/framework/src/main/java/org/checkerframework/common/value/ValueCheckerUtils.java @@ -17,7 +17,7 @@ import org.checkerframework.framework.type.AnnotatedTypeMirror; import org.checkerframework.framework.type.GenericAnnotatedTypeFactory; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; import org.plumelib.util.CollectionsPlume; @@ -26,7 +26,7 @@ public class ValueCheckerUtils { /** Do not instantiate. */ private ValueCheckerUtils() { - throw new BugInCF("do not instantiate"); + throw new TypeSystemError("do not instantiate"); } /** diff --git a/framework/src/main/java/org/checkerframework/common/value/ValueQualifierHierarchy.java b/framework/src/main/java/org/checkerframework/common/value/ValueQualifierHierarchy.java index d4007c2c489..4c919fef710 100644 --- a/framework/src/main/java/org/checkerframework/common/value/ValueQualifierHierarchy.java +++ b/framework/src/main/java/org/checkerframework/common/value/ValueQualifierHierarchy.java @@ -10,8 +10,8 @@ import org.checkerframework.common.value.util.Range; import org.checkerframework.framework.type.ElementQualifierHierarchy; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.SystemUtil; +import org.checkerframework.javacutil.TypeSystemError; /** The qualifier hierarchy for the Value type system. */ final class ValueQualifierHierarchy extends ElementQualifierHierarchy { @@ -255,7 +255,7 @@ public AnnotationMirror leastUpperBound(AnnotationMirror a1, AnnotationMirror a2 SystemUtil.addWithoutDuplicates(regexes, atypeFactory.getMatchesRegexValues(a2)); return atypeFactory.createMatchesRegexAnnotation(regexes); default: - throw new BugInCF("default case: %s %s %s%n", qual1, a1, a2); + throw new TypeSystemError("default case: %s %s %s%n", qual1, a1, a2); } } diff --git a/framework/src/main/java/org/checkerframework/common/value/ValueTransfer.java b/framework/src/main/java/org/checkerframework/common/value/ValueTransfer.java index 6e0a2759d7b..92778cfa6cf 100644 --- a/framework/src/main/java/org/checkerframework/common/value/ValueTransfer.java +++ b/framework/src/main/java/org/checkerframework/common/value/ValueTransfer.java @@ -64,9 +64,9 @@ import org.checkerframework.framework.flow.CFValue; import org.checkerframework.framework.type.QualifierHierarchy; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; import org.plumelib.util.CollectionsPlume; @@ -839,7 +839,7 @@ private Range calculateRangeBinaryOp( resultRange = leftRange.bitwiseXor(rightRange); break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } // Any integral type with less than 32 bits would be promoted to 32-bit int type during // operations. @@ -905,7 +905,7 @@ private List calculateValuesBinaryOp( resultValues.add(nmLeft.bitwiseXor(right)); break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } } } @@ -1092,7 +1092,7 @@ private Range calculateRangeUnaryOp( resultRange = range.bitwiseComplement(); break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } // Any integral type with less than 32 bits would be promoted to 32-bit int type during // operations. @@ -1123,7 +1123,7 @@ private List calculateValuesUnaryOp( resultValues.add(nmLeft.bitwiseComplement()); break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } } return resultValues; @@ -1233,7 +1233,7 @@ private List calculateBinaryComparison( result = nmLeft.notEqualTo(right); break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } resultValues.add(result); if (result) { @@ -1313,7 +1313,7 @@ private List refineIntRanges( elseLeftRange = elseRightRange; // Equality only needs to be computed once. break; default: - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } createAnnotationFromRangeAndAddToStore(thenStore, thenRightRange, rightNode); @@ -1563,7 +1563,7 @@ private List calculateConditionalOperator( } return resultValues; } - throw new BugInCF("ValueTransfer: unsupported operation: " + op); + throw new TypeSystemError("ValueTransfer: unsupported operation: " + op); } @Override diff --git a/framework/src/main/java/org/checkerframework/common/value/ValueTreeAnnotator.java b/framework/src/main/java/org/checkerframework/common/value/ValueTreeAnnotator.java index 384b56a0813..2869b9248b4 100644 --- a/framework/src/main/java/org/checkerframework/common/value/ValueTreeAnnotator.java +++ b/framework/src/main/java/org/checkerframework/common/value/ValueTreeAnnotator.java @@ -33,9 +33,9 @@ import org.checkerframework.framework.type.AnnotatedTypeMirror; import org.checkerframework.framework.type.treeannotator.TreeAnnotator; import org.checkerframework.javacutil.AnnotationUtils; -import org.checkerframework.javacutil.BugInCF; import org.checkerframework.javacutil.ElementUtils; import org.checkerframework.javacutil.TreeUtils; +import org.checkerframework.javacutil.TypeSystemError; import org.checkerframework.javacutil.TypesUtils; /** The TreeAnnotator for this AnnotatedTypeFactory. It adds/replaces annotations. */ @@ -628,7 +628,7 @@ private void visitEnumConstant(ExpressionTree tree, AnnotatedTypeMirror type) { id = ((IdentifierTree) tree).getName(); break; default: - throw new BugInCF("unexpected kind of enum constant use tree: " + tree.getKind()); + throw new TypeSystemError("unexpected kind of enum constant use tree: " + tree.getKind()); } AnnotationMirror stringVal = atypeFactory.createStringAnnotation(Collections.singletonList(id.toString()));