Skip to content

Commit 006aa1d

Browse files
graememorganError Prone Team
authored and
Error Prone Team
committed
Strongly type a parameter as a MethodSymbol to make it a bit clearer what it refers to.
PiperOrigin-RevId: 441712230
1 parent 5d647de commit 006aa1d

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableChecker.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.collect.ImmutableSet.toImmutableSet;
2020
import static com.google.errorprone.BugPattern.SeverityLevel.ERROR;
2121
import static com.google.errorprone.matchers.Description.NO_MATCH;
22+
import static com.google.errorprone.util.ASTHelpers.getSymbol;
2223

2324
import com.google.common.base.Joiner;
2425
import com.google.common.collect.ImmutableSet;
@@ -49,6 +50,7 @@
4950
import com.sun.source.tree.TypeParameterTree;
5051
import com.sun.tools.javac.code.Symbol;
5152
import com.sun.tools.javac.code.Symbol.ClassSymbol;
53+
import com.sun.tools.javac.code.Symbol.MethodSymbol;
5254
import com.sun.tools.javac.code.Symbol.TypeVariableSymbol;
5355
import com.sun.tools.javac.code.Type;
5456
import com.sun.tools.javac.tree.JCTree.JCMemberReference;
@@ -90,29 +92,26 @@ private ImmutableChecker(ErrorProneFlags flags, ImmutableSet<String> immutableAn
9092
// check instantiations of `@ImmutableTypeParameter`s in method references
9193
@Override
9294
public Description matchMemberReference(MemberReferenceTree tree, VisitorState state) {
93-
checkInvocation(
94-
tree, ((JCMemberReference) tree).referentType, state, ASTHelpers.getSymbol(tree));
95+
checkInvocation(tree, getSymbol(tree), ((JCMemberReference) tree).referentType, state);
9596
return NO_MATCH;
9697
}
9798

9899
// check instantiations of `@ImmutableTypeParameter`s in method invocations
99100
@Override
100101
public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) {
101-
checkInvocation(
102-
tree, ASTHelpers.getType(tree.getMethodSelect()), state, ASTHelpers.getSymbol(tree));
102+
checkInvocation(tree, getSymbol(tree), ASTHelpers.getType(tree.getMethodSelect()), state);
103103
return NO_MATCH;
104104
}
105105

106106
@Override
107107
public Description matchNewClass(NewClassTree tree, VisitorState state) {
108108
// check instantiations of `@ImmutableTypeParameter`s in generic constructor invocations
109-
checkInvocation(
110-
tree, ((JCNewClass) tree).constructorType, state, ((JCNewClass) tree).constructor);
109+
checkInvocation(tree, getSymbol(tree), ((JCNewClass) tree).constructorType, state);
111110
// check instantiations of `@ImmutableTypeParameter`s in class constructor invocations
112111
checkInstantiation(
113112
tree,
114113
state,
115-
ASTHelpers.getSymbol(tree.getIdentifier()).getTypeParameters(),
114+
getSymbol(tree.getIdentifier()).getTypeParameters(),
116115
ASTHelpers.getType(tree).getTypeArguments());
117116

118117
ClassTree classBody = tree.getClassBody();
@@ -132,7 +131,7 @@ public Description matchMethod(MethodTree tree, VisitorState state) {
132131
checkInstantiation(
133132
tree,
134133
state,
135-
ASTHelpers.getSymbol(tree).getTypeParameters(),
134+
getSymbol(tree).getTypeParameters(),
136135
ASTHelpers.getType(tree).getTypeArguments());
137136
return NO_MATCH;
138137
}
@@ -141,7 +140,8 @@ private ImmutableAnalysis createImmutableAnalysis(VisitorState state) {
141140
return new ImmutableAnalysis(this, state, wellKnownMutability, immutableAnnotations);
142141
}
143142

144-
private void checkInvocation(Tree tree, Type methodType, VisitorState state, Symbol symbol) {
143+
private void checkInvocation(
144+
Tree tree, MethodSymbol symbol, Type methodType, VisitorState state) {
145145
ImmutableAnalysis analysis = createImmutableAnalysis(state);
146146
Violation info = analysis.checkInvocation(methodType, symbol);
147147
if (info.isPresent()) {
@@ -197,8 +197,7 @@ public Description matchClass(ClassTree tree, VisitorState state) {
197197
// Check that the types in containerOf actually exist
198198
Map<String, TypeVariableSymbol> typarams = new HashMap<>();
199199
for (TypeParameterTree typaram : tree.getTypeParameters()) {
200-
typarams.put(
201-
typaram.getName().toString(), (TypeVariableSymbol) ASTHelpers.getSymbol(typaram));
200+
typarams.put(typaram.getName().toString(), (TypeVariableSymbol) getSymbol(typaram));
202201
}
203202
SetView<String> difference = Sets.difference(annotation.containerOf(), typarams.keySet());
204203
if (!difference.isEmpty()) {
@@ -231,12 +230,12 @@ public Description matchClass(ClassTree tree, VisitorState state) {
231230
// Check that the fields (including inherited fields) are immutable, and
232231
// validate the type hierarchy superclass.
233232

234-
ClassSymbol sym = ASTHelpers.getSymbol(tree);
233+
ClassSymbol sym = getSymbol(tree);
235234

236235
Violation info =
237236
analysis.checkForImmutability(
238237
Optional.of(tree),
239-
immutableTypeParametersInScope(ASTHelpers.getSymbol(tree), state, analysis),
238+
immutableTypeParametersInScope(getSymbol(tree), state, analysis),
240239
ASTHelpers.getType(tree),
241240
(Tree matched, Violation violation) ->
242241
describeClass(matched, sym, annotation, violation));
@@ -255,7 +254,7 @@ private void checkClassTreeInstantiation(
255254
tree,
256255
state,
257256
analysis,
258-
ASTHelpers.getSymbol(implementTree).getTypeParameters(),
257+
getSymbol(implementTree).getTypeParameters(),
259258
ASTHelpers.getType(implementTree).getTypeArguments());
260259
}
261260

@@ -265,7 +264,7 @@ private void checkClassTreeInstantiation(
265264
tree,
266265
state,
267266
analysis,
268-
ASTHelpers.getSymbol(extendsClause).getTypeParameters(),
267+
getSymbol(extendsClause).getTypeParameters(),
269268
ASTHelpers.getType(extendsClause).getTypeArguments());
270269
}
271270
}
@@ -289,7 +288,7 @@ private Description.Builder describeClass(
289288
/** Check anonymous implementations of {@code @Immutable} types. */
290289
private Description handleAnonymousClass(
291290
ClassTree tree, VisitorState state, ImmutableAnalysis analysis) {
292-
ClassSymbol sym = ASTHelpers.getSymbol(tree);
291+
ClassSymbol sym = getSymbol(tree);
293292
Type superType = immutableSupertype(sym, state);
294293
if (superType == null) {
295294
return NO_MATCH;
@@ -334,7 +333,7 @@ private Description.Builder describeAnonymous(Tree tree, Type superType, Violati
334333

335334
/** Check for classes without {@code @Immutable} that have immutable supertypes. */
336335
private Description checkSubtype(ClassTree tree, VisitorState state) {
337-
ClassSymbol sym = ASTHelpers.getSymbol(tree);
336+
ClassSymbol sym = getSymbol(tree);
338337
Type superType = immutableSupertype(sym, state);
339338
if (superType == null) {
340339
return NO_MATCH;

0 commit comments

Comments
 (0)