Skip to content

Commit 4afa7a6

Browse files
committed
Expand @UnmodParam => @UnmodifiableParam
1 parent f7a19dd commit 4afa7a6

12 files changed

Lines changed: 48 additions & 45 deletions

File tree

buildSrc/src/main/groovy/cf-spotless.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ spotless {
111111
.addTypeAnnotation("MaybeReplaceable")
112112
.addTypeAnnotation("MaybeShrinkable")
113113
.addTypeAnnotation("Unmodifiable")
114-
.addTypeAnnotation("UnmodParam")
114+
.addTypeAnnotation("UnmodifiableParam")
115115
.addTypeAnnotation("Unreplaceable")
116116
.addTypeAnnotation("Unshrinkable")
117117
}

checker-qual/src/main/java/org/checkerframework/checker/modifiability/qual/UnmodParam.java renamed to checker-qual/src/main/java/org/checkerframework/checker/modifiability/qual/UnmodifiableParam.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
@Documented
2121
@Retention(RetentionPolicy.RUNTIME)
2222
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
23-
public @interface UnmodParam {}
23+
public @interface UnmodifiableParam {}

checker/src/main/java/org/checkerframework/checker/modifiability/ModifiabilityVisitor.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import javax.lang.model.element.TypeElement;
1313
import javax.lang.model.type.TypeMirror;
1414
import org.checkerframework.checker.modifiability.qual.ThrowsUOE;
15-
import org.checkerframework.checker.modifiability.qual.UnmodParam;
15+
import org.checkerframework.checker.modifiability.qual.UnmodifiableParam;
1616
import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory;
1717
import org.checkerframework.common.basetype.BaseTypeChecker;
1818
import org.checkerframework.common.basetype.BaseTypeVisitor;
@@ -75,8 +75,8 @@ public void processClassTree(ClassTree classTree) {
7575

7676
@Override
7777
public Void visitAnnotation(AnnotationTree tree, Void p) {
78-
if (shouldCheckUnmodParamLocation() && isUnmodParamAnnotation(tree)) {
79-
if (!isWithinAllowedUnmodParamLocation()) {
78+
if (shouldCheckUnmodifiableParamLocation() && isUnmodifiableParamAnnotation(tree)) {
79+
if (!isWithinAllowedUnmodifiableParamLocation()) {
8080
checker.reportError(tree, "unmodparam.location");
8181
}
8282
}
@@ -114,14 +114,14 @@ protected boolean shouldCheckThrowsUOE() {
114114
}
115115

116116
/**
117-
* Returns true if this checker should report {@code @UnmodParam} location errors.
117+
* Returns true if this checker should report {@code @UnmodifiableParam} location errors.
118118
*
119119
* <p>The default is {@code true}. Shrink and Replace override this to avoid tripling diagnostics
120120
* when running under the aggregate {@link ModifiabilityChecker}.
121121
*
122-
* @return true if this visitor should report {@code @UnmodParam} location errors
122+
* @return true if this visitor should report {@code @UnmodifiableParam} location errors
123123
*/
124-
protected boolean shouldCheckUnmodParamLocation() {
124+
protected boolean shouldCheckUnmodifiableParamLocation() {
125125
return true;
126126
}
127127

@@ -139,30 +139,31 @@ protected boolean shouldCheckCustomModifiabilityAnnotation() {
139139
}
140140

141141
/**
142-
* Returns true if {@code tree} is an {@link UnmodParam} annotation.
142+
* Returns true if {@code tree} is an {@link UnmodifiableParam} annotation.
143143
*
144144
* @param tree an annotation tree
145-
* @return true if {@code tree} is an {@code @UnmodParam} annotation
145+
* @return true if {@code tree} is an {@code @UnmodifiableParam} annotation
146146
*/
147-
private boolean isUnmodParamAnnotation(AnnotationTree tree) {
147+
private boolean isUnmodifiableParamAnnotation(AnnotationTree tree) {
148148
String annotationName = tree.getAnnotationType().toString();
149149
// Quick check to avoid expensive annotation resolution for most annotations.
150-
if (!annotationName.equals("UnmodParam") && !annotationName.endsWith(".UnmodParam")) {
150+
if (!annotationName.equals("UnmodifiableParam")
151+
&& !annotationName.endsWith(".UnmodifiableParam")) {
151152
return false;
152153
}
153154

154155
AnnotationMirror annotation = TreeUtils.annotationFromAnnotationTree(tree);
155-
return annotation != null && atypeFactory.areSameByClass(annotation, UnmodParam.class);
156+
return annotation != null && atypeFactory.areSameByClass(annotation, UnmodifiableParam.class);
156157
}
157158

158159
/**
159160
* Returns true if the current annotation path is inside a method/constructor parameter type or
160161
* explicit receiver parameter type.
161162
*
162-
* @return true if {@code @UnmodParam} is allowed at the current location
163+
* @return true if {@code @UnmodifiableParam} is allowed at the current location
163164
*/
164165
@SuppressWarnings("interning:not.interned") // AST node comparison
165-
private boolean isWithinAllowedUnmodParamLocation() {
166+
private boolean isWithinAllowedUnmodifiableParamLocation() {
166167
// Find the declaration that contains the annotation, if any.
167168
TreePath path = getCurrentPath();
168169
TreePath variablePath = null;

checker/src/main/java/org/checkerframework/checker/modifiability/grow/GrowAnnotatedTypeFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import org.checkerframework.checker.modifiability.qual.PolyGrowable;
2323
import org.checkerframework.checker.modifiability.qual.PolyModifiable;
2424
import org.checkerframework.checker.modifiability.qual.Ungrowable;
25-
import org.checkerframework.checker.modifiability.qual.UnmodParam;
2625
import org.checkerframework.checker.modifiability.qual.Unmodifiable;
26+
import org.checkerframework.checker.modifiability.qual.UnmodifiableParam;
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory;
2929
import org.checkerframework.common.basetype.BaseTypeChecker;
@@ -125,7 +125,7 @@ public AnnotationMirror canonicalAnnotation(
125125
} else if (areSameByClass(annotation, Unmodifiable.class)) {
126126
return tm != null && typeCannotGrow(tm) ? MAYBE_GROW : UNGROWABLE;
127127
} else if (areSameByClass(annotation, MaybeModifiable.class)
128-
|| areSameByClass(annotation, UnmodParam.class)) {
128+
|| areSameByClass(annotation, UnmodifiableParam.class)) {
129129
return MAYBE_GROW;
130130
} else if (areSameByClass(annotation, PolyModifiable.class)) {
131131
return tm != null && isMapEntry(tm) ? MAYBE_GROW : POLY_GROW;

checker/src/main/java/org/checkerframework/checker/modifiability/replace/ReplaceAnnotatedTypeFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import org.checkerframework.checker.modifiability.qual.PolyModifiable;
2222
import org.checkerframework.checker.modifiability.qual.PolyReplaceable;
2323
import org.checkerframework.checker.modifiability.qual.Replaceable;
24-
import org.checkerframework.checker.modifiability.qual.UnmodParam;
2524
import org.checkerframework.checker.modifiability.qual.Unmodifiable;
25+
import org.checkerframework.checker.modifiability.qual.UnmodifiableParam;
2626
import org.checkerframework.checker.modifiability.qual.Unreplaceable;
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory;
@@ -140,7 +140,7 @@ public AnnotationMirror canonicalAnnotation(
140140
} else if (areSameByClass(annotation, Unmodifiable.class)) {
141141
return tm != null && typeCannotReplace(tm) ? MAYBE_REPLACE : UNREPLACEABLE;
142142
} else if (areSameByClass(annotation, MaybeModifiable.class)
143-
|| areSameByClass(annotation, UnmodParam.class)) {
143+
|| areSameByClass(annotation, UnmodifiableParam.class)) {
144144
return MAYBE_REPLACE;
145145
} else if (areSameByClass(annotation, PolyModifiable.class)) {
146146
return POLY_REPLACE;

checker/src/main/java/org/checkerframework/checker/modifiability/replace/ReplaceVisitor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ protected boolean shouldCheckThrowsUOE() {
2222
}
2323

2424
@Override
25-
protected boolean shouldCheckUnmodParamLocation() {
26-
// When running under ModifiabilityChecker, GrowChecker handles @UnmodParam location reporting.
25+
protected boolean shouldCheckUnmodifiableParamLocation() {
26+
// When running under ModifiabilityChecker, GrowChecker handles @UnmodifiableParam location
27+
// reporting.
2728
return checker.getParentChecker() == null;
2829
}
2930

checker/src/main/java/org/checkerframework/checker/modifiability/shrink/ShrinkAnnotatedTypeFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import org.checkerframework.checker.modifiability.qual.PolyModifiable;
2222
import org.checkerframework.checker.modifiability.qual.PolyShrinkable;
2323
import org.checkerframework.checker.modifiability.qual.Shrinkable;
24-
import org.checkerframework.checker.modifiability.qual.UnmodParam;
2524
import org.checkerframework.checker.modifiability.qual.Unmodifiable;
25+
import org.checkerframework.checker.modifiability.qual.UnmodifiableParam;
2626
import org.checkerframework.checker.modifiability.qual.Unshrinkable;
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.checkerframework.common.basetype.BaseAnnotatedTypeFactory;
@@ -122,7 +122,7 @@ public AnnotationMirror canonicalAnnotation(
122122
} else if (areSameByClass(annotation, Unmodifiable.class)) {
123123
return tm != null && typeCannotShrink(tm) ? MAYBE_SHRINK : UNSHRINKABLE;
124124
} else if (areSameByClass(annotation, MaybeModifiable.class)
125-
|| areSameByClass(annotation, UnmodParam.class)) {
125+
|| areSameByClass(annotation, UnmodifiableParam.class)) {
126126
return MAYBE_SHRINK;
127127
} else if (areSameByClass(annotation, PolyModifiable.class)) {
128128
return tm != null && isMapEntry(tm) ? MAYBE_SHRINK : POLY_SHRINK;

checker/src/main/java/org/checkerframework/checker/modifiability/shrink/ShrinkVisitor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ protected boolean shouldCheckThrowsUOE() {
2222
}
2323

2424
@Override
25-
protected boolean shouldCheckUnmodParamLocation() {
26-
// When running under ModifiabilityChecker, GrowChecker handles @UnmodParam location reporting.
25+
protected boolean shouldCheckUnmodifiableParamLocation() {
26+
// When running under ModifiabilityChecker, GrowChecker handles @UnmodifiableParam location
27+
// reporting.
2728
return checker.getParentChecker() == null;
2829
}
2930

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
usage.throws.uoe=Call to %s will always throw UnsupportedOperationException.
2-
unmodparam.location=@UnmodParam may only be written on method/constructor parameters or explicit receiver parameters.
2+
unmodparam.location=@UnmodifiableParam may only be written on method/constructor parameters or explicit receiver parameters.
33
modifiability.annotation.unverified=Modifiability annotations/defaults on source-defined collection/map/iterator type %s are trusted but not verified by the checker; manually verify them and suppress this warning if correct.

checker/tests/modifiability/BasicModifiabilityTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import org.checkerframework.checker.modifiability.qual.IteratorPolyMod;
55
import org.checkerframework.checker.modifiability.qual.MaybeModifiable;
66
import org.checkerframework.checker.modifiability.qual.Modifiable;
7-
import org.checkerframework.checker.modifiability.qual.UnmodParam;
87
import org.checkerframework.checker.modifiability.qual.Unmodifiable;
8+
import org.checkerframework.checker.modifiability.qual.UnmodifiableParam;
99

1010
// this checkes the correctness of annotation in List.java and ONLY the initialization of ArrayList
1111
public class BasicModifiabilityTest {
@@ -102,7 +102,7 @@ void testMutatingBulkOperations(@Modifiable List<String> mod, @Unmodifiable List
102102
unmod.retainAll(other);
103103
}
104104

105-
void testUnmodParamMutation(@UnmodParam List<String> unmodParam, String value) {
105+
void testUnmodifiableParamMutation(@UnmodifiableParam List<String> unmodParam, String value) {
106106
// :: error: [method.invocation]
107107
unmodParam.add(value);
108108
// :: error: [method.invocation]

0 commit comments

Comments
 (0)