diff --git a/check_api/src/main/java/com/google/errorprone/dataflow/DataFlow.java b/check_api/src/main/java/com/google/errorprone/dataflow/DataFlow.java index 5a6f07d1367..5c5cd8671cf 100644 --- a/check_api/src/main/java/com/google/errorprone/dataflow/DataFlow.java +++ b/check_api/src/main/java/com/google/errorprone/dataflow/DataFlow.java @@ -16,7 +16,6 @@ package com.google.errorprone.dataflow; -import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.auto.value.AutoValue; @@ -73,55 +72,49 @@ public interface Result< private static final LoadingCache> analysisCache = Caffeine.newBuilder() .build( - new CacheLoader>() { - @Override - public Analysis load(AnalysisParams key) { - ControlFlowGraph cfg = key.cfg(); - ForwardTransferFunction transfer = key.transferFunction(); + (AnalysisParams key) -> { + ControlFlowGraph cfg = key.cfg(); + ForwardTransferFunction transfer = key.transferFunction(); - @SuppressWarnings({"unchecked", "rawtypes"}) - Analysis analysis = new ForwardAnalysisImpl(transfer); - analysis.performAnalysis(cfg); - return analysis; - } + @SuppressWarnings({"unchecked", "rawtypes"}) + Analysis analysis = new ForwardAnalysisImpl(transfer); + analysis.performAnalysis(cfg); + return analysis; }); private static final LoadingCache cfgCache = Caffeine.newBuilder() .maximumSize(1) .build( - new CacheLoader() { - @Override - public ControlFlowGraph load(CfgParams key) { - TreePath methodPath = key.methodPath(); - UnderlyingAST ast; - ClassTree classTree = null; - MethodTree methodTree = null; - for (Tree parent : methodPath) { - if (parent instanceof MethodTree m) { - methodTree = m; - } - if (parent instanceof ClassTree c) { - classTree = c; - break; - } + (CfgParams key) -> { + TreePath methodPath = key.methodPath(); + UnderlyingAST ast; + ClassTree classTree = null; + MethodTree methodTree = null; + for (Tree parent : methodPath) { + if (parent instanceof MethodTree m) { + methodTree = m; } - if (methodPath.getLeaf() instanceof LambdaExpressionTree lambdaExpressionTree) { - ast = new UnderlyingAST.CFGLambda(lambdaExpressionTree, classTree, methodTree); - } else if (methodPath.getLeaf() instanceof MethodTree mt) { - methodTree = mt; - ast = new UnderlyingAST.CFGMethod(methodTree, classTree); - } else { - // must be an initializer per findEnclosingMethodOrLambdaOrInitializer - ast = new UnderlyingAST.CFGStatement(methodPath.getLeaf(), classTree); + if (parent instanceof ClassTree c) { + classTree = c; + break; } - ProcessingEnvironment env = key.environment(); - - analysisCache.invalidateAll(); - CompilationUnitTree root = methodPath.getCompilationUnit(); - // TODO(b/158869538): replace with faster build(bodyPath, env, ast, false, false); - return CFGBuilder.build(root, ast, false, false, env); } + if (methodPath.getLeaf() instanceof LambdaExpressionTree lambdaExpressionTree) { + ast = new UnderlyingAST.CFGLambda(lambdaExpressionTree, classTree, methodTree); + } else if (methodPath.getLeaf() instanceof MethodTree mt) { + methodTree = mt; + ast = new UnderlyingAST.CFGMethod(methodTree, classTree); + } else { + // must be an initializer per findEnclosingMethodOrLambdaOrInitializer + ast = new UnderlyingAST.CFGStatement(methodPath.getLeaf(), classTree); + } + ProcessingEnvironment env = key.environment(); + + analysisCache.invalidateAll(); + CompilationUnitTree root = methodPath.getCompilationUnit(); + // TODO(b/158869538): replace with faster build(bodyPath, env, ast, false, false); + return CFGBuilder.build(root, ast, false, false, env); }); private static @Nullable TreePath findEnclosingMethodOrLambdaOrInitializer(TreePath path) { diff --git a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java index 997b0f68713..deced247508 100644 --- a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java +++ b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java @@ -18,7 +18,6 @@ import static com.google.common.base.Preconditions.checkArgument; -import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.collect.ImmutableList; @@ -78,14 +77,11 @@ public class NullnessQualifierInference extends TreeScanner { Caffeine.newBuilder() .maximumSize(1) .build( - new CacheLoader() { - @Override - public InferredNullability load(Tree methodOrInitializer) { - NullnessQualifierInference inferenceEngine = - new NullnessQualifierInference(methodOrInitializer); - inferenceEngine.scan(methodOrInitializer, null); - return new InferredNullability(inferenceEngine.qualifierConstraints); - } + (Tree methodOrInitializer) -> { + NullnessQualifierInference inferenceEngine = + new NullnessQualifierInference(methodOrInitializer); + inferenceEngine.scan(methodOrInitializer, null); + return new InferredNullability(inferenceEngine.qualifierConstraints); }); public static InferredNullability getInferredNullability(Tree methodOrInitializerOrLambda) { diff --git a/check_api/src/main/java/com/google/errorprone/matchers/JUnitMatchers.java b/check_api/src/main/java/com/google/errorprone/matchers/JUnitMatchers.java index cf5e6078ac0..414e868cff2 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/JUnitMatchers.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/JUnitMatchers.java @@ -220,31 +220,28 @@ private static boolean hasJUnitAttr(MethodSymbol methodSym) { * expects tests to be annotated with @Test. */ public static Matcher isJUnit4TestRunnerOfType(Iterable runnerTypes) { - return new Matcher() { - @Override - public boolean matches(ExpressionTree t, VisitorState state) { - Type type = ASTHelpers.getType(t); - // Expect a class type. - if (!(type instanceof ClassType)) { - return false; - } - // Expect one type argument, the type of the JUnit class runner to use. - com.sun.tools.javac.util.List typeArgs = type.getTypeArguments(); - if (typeArgs.size() != 1) { - return false; + return (ExpressionTree t, VisitorState state) -> { + Type type = ASTHelpers.getType(t); + // Expect a class type. + if (!(type instanceof ClassType)) { + return false; + } + // Expect one type argument, the type of the JUnit class runner to use. + com.sun.tools.javac.util.List typeArgs = type.getTypeArguments(); + if (typeArgs.size() != 1) { + return false; + } + Type runnerType = getOnlyElement(typeArgs); + for (String testRunner : runnerTypes) { + Symbol parent = state.getSymbolFromString(testRunner); + if (parent == null) { + continue; } - Type runnerType = getOnlyElement(typeArgs); - for (String testRunner : runnerTypes) { - Symbol parent = state.getSymbolFromString(testRunner); - if (parent == null) { - continue; - } - if (runnerType.tsym.isSubClass(parent, state.getTypes())) { - return true; - } + if (runnerType.tsym.isSubClass(parent, state.getTypes())) { + return true; } - return false; } + return false; }; } diff --git a/check_api/src/main/java/com/google/errorprone/suppliers/Suppliers.java b/check_api/src/main/java/com/google/errorprone/suppliers/Suppliers.java index 713201ee847..c9dc3a6800a 100644 --- a/check_api/src/main/java/com/google/errorprone/suppliers/Suppliers.java +++ b/check_api/src/main/java/com/google/errorprone/suppliers/Suppliers.java @@ -18,9 +18,8 @@ import static java.util.Objects.requireNonNull; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.errorprone.VisitorState; import com.google.errorprone.util.ASTHelpers; import com.sun.source.tree.ClassTree; @@ -45,15 +44,12 @@ public final class Suppliers { * @param n the position of the generic argument */ public static Supplier genericTypeOf(Supplier expressionSupplier, int n) { - return new Supplier() { - @Override - public Type get(VisitorState state) { - JCExpression jcExpression = (JCExpression) expressionSupplier.get(state); - if (jcExpression.type.getTypeArguments().size() <= n) { - return state.getSymtab().objectType; - } - return jcExpression.type.getTypeArguments().get(n); + return state -> { + JCExpression jcExpression = (JCExpression) expressionSupplier.get(state); + if (jcExpression.type.getTypeArguments().size() <= n) { + return state.getSymtab().objectType; } + return jcExpression.type.getTypeArguments().get(n); }; } @@ -66,15 +62,12 @@ public Type get(VisitorState state) { * @param n the position of the generic argument */ public static Supplier genericTypeOfType(Supplier typeSupplier, int n) { - return new Supplier() { - @Override - public Type get(VisitorState state) { - Type type = typeSupplier.get(state); - if (type.getTypeArguments().size() <= n) { - return state.getSymtab().objectType; - } - return type.getTypeArguments().get(n); + return state -> { + Type type = typeSupplier.get(state); + if (type.getTypeArguments().size() <= n) { + return state.getSymtab().objectType; } + return type.getTypeArguments().get(n); }; } @@ -84,13 +77,9 @@ public Type get(VisitorState state) { * getC()} method invocation, then this supplier gives the expression {@code a.getB()}. */ public static Supplier receiverType() { - return new Supplier() { - @Override - public Type get(VisitorState state) { - MethodInvocationTree methodInvocation = (MethodInvocationTree) state.getPath().getLeaf(); - return ASTHelpers.getReceiverType(methodInvocation.getMethodSelect()); - } - }; + return state -> + ASTHelpers.getReceiverType( + ((MethodInvocationTree) state.getPath().getLeaf()).getMethodSelect()); } /** @@ -99,13 +88,9 @@ public Type get(VisitorState state) { * getC()} method invocation, then this supplier gives the expression {@code a.getB()}. */ public static Supplier receiverInstance() { - return new Supplier() { - @Override - public ExpressionTree get(VisitorState state) { - MethodInvocationTree method = (MethodInvocationTree) state.getPath().getLeaf(); - return ((JCFieldAccess) method.getMethodSelect()).getExpression(); - } - }; + return state -> + ((JCFieldAccess) ((MethodInvocationTree) state.getPath().getLeaf()).getMethodSelect()) + .getExpression(); } /** @@ -125,13 +110,7 @@ public static Supplier typeFromClass(Class inputClass) { public static final Supplier JAVA_LANG_VOID_TYPE = typeFromClass(Void.class); - public static final Supplier VOID_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().voidType; - } - }; + public static final Supplier VOID_TYPE = state -> state.getSymtab().voidType; public static final Supplier JAVA_LANG_BOOLEAN_TYPE = typeFromString("java.lang.Boolean"); @@ -139,101 +118,29 @@ public Type get(VisitorState state) { public static final Supplier JAVA_LANG_LONG_TYPE = typeFromString("java.lang.Long"); - public static final Supplier STRING_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().stringType; - } - }; - - public static final Supplier BOOLEAN_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().booleanType; - } - }; - - public static final Supplier BYTE_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().byteType; - } - }; - - public static final Supplier SHORT_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().shortType; - } - }; - - public static final Supplier INT_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().intType; - } - }; - - public static final Supplier LONG_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().longType; - } - }; - - public static final Supplier DOUBLE_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().doubleType; - } - }; - - public static final Supplier CHAR_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().charType; - } - }; - - public static final Supplier OBJECT_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().objectType; - } - }; - - public static final Supplier EXCEPTION_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().exceptionType; - } - }; - - public static final Supplier THROWABLE_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().throwableType; - } - }; - - public static final Supplier ANNOTATION_TYPE = - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().annotationType; - } - }; + public static final Supplier STRING_TYPE = state -> state.getSymtab().stringType; + + public static final Supplier BOOLEAN_TYPE = state -> state.getSymtab().booleanType; + + public static final Supplier BYTE_TYPE = state -> state.getSymtab().byteType; + + public static final Supplier SHORT_TYPE = state -> state.getSymtab().shortType; + + public static final Supplier INT_TYPE = state -> state.getSymtab().intType; + + public static final Supplier LONG_TYPE = state -> state.getSymtab().longType; + + public static final Supplier DOUBLE_TYPE = state -> state.getSymtab().doubleType; + + public static final Supplier CHAR_TYPE = state -> state.getSymtab().charType; + + public static final Supplier OBJECT_TYPE = state -> state.getSymtab().objectType; + + public static final Supplier EXCEPTION_TYPE = state -> state.getSymtab().exceptionType; + + public static final Supplier THROWABLE_TYPE = state -> state.getSymtab().throwableType; + + public static final Supplier ANNOTATION_TYPE = state -> state.getSymtab().annotationType; /** * Supplies what was given. Useful for adapting to methods that require a supplier. @@ -241,50 +148,23 @@ public Type get(VisitorState state) { * @param toSupply the item to supply */ public static Supplier identitySupplier(T toSupply) { - return new Supplier() { - @Override - public T get(VisitorState state) { - return toSupply; - } - }; + return state -> toSupply; } public static final Supplier ENCLOSING_CLASS = - new Supplier() { - @Override - public Type get(VisitorState state) { - return ASTHelpers.getType(state.findEnclosing(ClassTree.class)); - } - }; + state -> ASTHelpers.getType(state.findEnclosing(ClassTree.class)); public static Supplier arrayOf(Supplier elementType) { - return new Supplier() { - @Override - public Type get(VisitorState state) { - return new Type.ArrayType(elementType.get(state), state.getSymtab().arraysType.tsym); - } - }; + return state -> new Type.ArrayType(elementType.get(state), state.getSymtab().arraysType.tsym); } public static final Supplier OBJECT_TYPE_ARRAY = - arrayOf( - new Supplier() { - @Override - public Type get(VisitorState state) { - return state.getSymtab().objectType; - } - }); + arrayOf(state -> state.getSymtab().objectType); public static ImmutableList> fromStrings(Iterable types) { - return ImmutableList.copyOf( - Iterables.transform( - types, - new Function>() { - @Override - public Supplier apply(String input) { - return Suppliers.typeFromString(input); - } - })); + return Streams.stream(types) + .map(Suppliers::typeFromString) + .collect(ImmutableList.toImmutableList()); } private Suppliers() {} diff --git a/check_api/src/test/java/com/google/errorprone/fixes/ReplacementsTest.java b/check_api/src/test/java/com/google/errorprone/fixes/ReplacementsTest.java index 458026ad2a7..8d665af8a49 100644 --- a/check_api/src/test/java/com/google/errorprone/fixes/ReplacementsTest.java +++ b/check_api/src/test/java/com/google/errorprone/fixes/ReplacementsTest.java @@ -61,11 +61,8 @@ public void overlap() { } private static final Function> AS_RANGES = - new Function>() { - @Override - public Range apply(Replacement replacement) { - return replacement.range(); - } + (Replacement replacement) -> { + return replacement.range(); }; @Test diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/BadShiftAmount.java b/core/src/main/java/com/google/errorprone/bugpatterns/BadShiftAmount.java index 2867776f3c1..9fd15c970c0 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/BadShiftAmount.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/BadShiftAmount.java @@ -52,30 +52,27 @@ public class BadShiftAmount extends BugChecker implements BinaryTreeMatcher { * promoted to int. See JLS 5.6.1. */ private static final Matcher BAD_SHIFT_AMOUNT_INT = - new Matcher() { - @Override - public boolean matches(BinaryTree tree, VisitorState state) { - Type leftType = ASTHelpers.getType(tree.getLeftOperand()); - Types types = state.getTypes(); - Symtab symtab = state.getSymtab(); - if (!(types.isSameType(leftType, symtab.intType)) - && !(types.isSameType(leftType, symtab.byteType)) - && !(types.isSameType(leftType, symtab.shortType)) - && !(types.isSameType(leftType, symtab.charType))) { - return false; - } + (BinaryTree tree, VisitorState state) -> { + Type leftType = ASTHelpers.getType(tree.getLeftOperand()); + Types types = state.getTypes(); + Symtab symtab = state.getSymtab(); + if (!(types.isSameType(leftType, symtab.intType)) + && !(types.isSameType(leftType, symtab.byteType)) + && !(types.isSameType(leftType, symtab.shortType)) + && !(types.isSameType(leftType, symtab.charType))) { + return false; + } - ExpressionTree rightOperand = tree.getRightOperand(); - if (rightOperand instanceof LiteralTree literalTree) { - Object rightValue = literalTree.getValue(); - if (rightValue instanceof Number number) { - int intValue = number.intValue(); - return intValue < 0 || intValue > 31; - } + ExpressionTree rightOperand = tree.getRightOperand(); + if (rightOperand instanceof LiteralTree literalTree) { + Object rightValue = literalTree.getValue(); + if (rightValue instanceof Number number) { + int intValue = number.intValue(); + return intValue < 0 || intValue > 31; } - - return false; } + + return false; }; public static final Matcher BINARY_TREE_MATCHER = diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/FuturesGetCheckedIllegalExceptionType.java b/core/src/main/java/com/google/errorprone/bugpatterns/FuturesGetCheckedIllegalExceptionType.java index d2ed25613f1..c6eeb5e4930 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/FuturesGetCheckedIllegalExceptionType.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/FuturesGetCheckedIllegalExceptionType.java @@ -89,23 +89,20 @@ public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState anyOf(staticMethod().onClass(Futures.class.getName()).named("getChecked")); private static final Matcher CLASS_OBJECT_FOR_CLASS_EXTENDING_RUNTIME_EXCEPTION = - new Matcher() { - @Override - public boolean matches(ExpressionTree tree, VisitorState state) { - Types types = state.getTypes(); - Type classType = state.getSymtab().classType; - Type runtimeExceptionType = state.getSymtab().runtimeExceptionType; - Type argType = getType(tree); - - // Make sure that the argument is a Class (and not null/bottom). - if (!isSubtype(argType, classType, state) || argType.getTag() == BOT) { - return false; - } - - List typeArguments = argType.getTypeArguments(); - Type exceptionType = Iterables.getFirst(typeArguments, null); - return types.isSubtype(exceptionType, runtimeExceptionType); + (ExpressionTree tree, VisitorState state) -> { + Types types = state.getTypes(); + Type classType = state.getSymtab().classType; + Type runtimeExceptionType = state.getSymtab().runtimeExceptionType; + Type argType = getType(tree); + + // Make sure that the argument is a Class (and not null/bottom). + if (!isSubtype(argType, classType, state) || argType.getTag() == BOT) { + return false; } + + List typeArguments = argType.getTypeArguments(); + Type exceptionType = Iterables.getFirst(typeArguments, null); + return types.isSubtype(exceptionType, runtimeExceptionType); }; private static final Matcher PASSED_RUNTIME_EXCEPTION_TYPE = @@ -113,30 +110,27 @@ public boolean matches(ExpressionTree tree, VisitorState state) { private static final Matcher CLASS_OBJECT_FOR_CLASS_WITHOUT_USABLE_CONSTRUCTOR = classLiteral( - new Matcher() { - @Override - public boolean matches(ExpressionTree tree, VisitorState state) { - ClassSymbol classSymbol = (ClassSymbol) getSymbol(tree); - if (classSymbol == null) { - return false; - } + (ExpressionTree tree, VisitorState state) -> { + ClassSymbol classSymbol = (ClassSymbol) getSymbol(tree); + if (classSymbol == null) { + return false; + } - if (classSymbol.isInner()) { - return true; - } + if (classSymbol.isInner()) { + return true; + } - for (Symbol enclosedSymbol : getEnclosedElements(classSymbol)) { - if (!enclosedSymbol.isConstructor()) { - continue; - } - MethodSymbol constructorSymbol = (MethodSymbol) enclosedSymbol; - if (canBeUsedByGetChecked(constructorSymbol, state)) { - return false; - } + for (Symbol enclosedSymbol : getEnclosedElements(classSymbol)) { + if (!enclosedSymbol.isConstructor()) { + continue; + } + MethodSymbol constructorSymbol = (MethodSymbol) enclosedSymbol; + if (canBeUsedByGetChecked(constructorSymbol, state)) { + return false; } - - return true; } + + return true; }); private static final Matcher PASSED_TYPE_WITHOUT_USABLE_CONSTRUCTOR = diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/LongLiteralLowerCaseSuffix.java b/core/src/main/java/com/google/errorprone/bugpatterns/LongLiteralLowerCaseSuffix.java index 3870d537d3b..b9d0f36bb31 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/LongLiteralLowerCaseSuffix.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/LongLiteralLowerCaseSuffix.java @@ -41,17 +41,14 @@ public class LongLiteralLowerCaseSuffix extends BugChecker implements LiteralTreeMatcher { private static final Matcher matcher = - new Matcher() { - @Override - public boolean matches(LiteralTree literalTree, VisitorState state) { - if (literalTree.getKind() == Kind.LONG_LITERAL) { - // The javac AST doesn't seem to record whether the suffix is present, or whether it's - // an 'l' or 'L'. We have to look at the original source - String longLiteral = getLongLiteral(literalTree, state); - return longLiteral != null && longLiteral.endsWith("l"); - } else { - return false; - } + (LiteralTree literalTree, VisitorState state) -> { + if (literalTree.getKind() == Kind.LONG_LITERAL) { + // The javac AST doesn't seem to record whether the suffix is present, or whether it's + // an 'l' or 'L'. We have to look at the original source + String longLiteral = getLongLiteral(literalTree, state); + return longLiteral != null && longLiteral.endsWith("l"); + } else { + return false; } }; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/NoAllocationChecker.java b/core/src/main/java/com/google/errorprone/bugpatterns/NoAllocationChecker.java index 14bfcb19d03..89878d94d63 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/NoAllocationChecker.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/NoAllocationChecker.java @@ -185,28 +185,25 @@ public class NoAllocationChecker extends BugChecker * below it. */ private static final Matcher withinThrowOrAnnotation = - new Matcher() { - @Override - public boolean matches(Tree tree, VisitorState state) { - // TODO(agoode): Make this accept statements in a block that definitely will lead to a - // throw. - TreePath path = state.getPath().getParentPath(); - while (path != null) { - Tree node = path.getLeaf(); - state = state.withPath(path); - switch (node.getKind()) { - case METHOD -> { - // We've gotten to the top of the method without finding a throw. - return false; - } - case THROW, ANNOTATION -> { - return true; - } - default -> path = path.getParentPath(); + (Tree tree, VisitorState state) -> { + // TODO(agoode): Make this accept statements in a block that definitely will lead to a + // throw. + TreePath path = state.getPath().getParentPath(); + while (path != null) { + Tree node = path.getLeaf(); + state = state.withPath(path); + switch (node.getKind()) { + case METHOD -> { + // We've gotten to the top of the method without finding a throw. + return false; } + case THROW, ANNOTATION -> { + return true; + } + default -> path = path.getParentPath(); } - return false; } + return false; }; /** @@ -288,71 +285,65 @@ public boolean matches(Tree tree, VisitorState state) { /** Matches boxing by method invocation, including varargs. */ private static final Matcher boxingInvocation = - new Matcher() { - @Override - public boolean matches(MethodInvocationTree tree, VisitorState state) { - if (!enclosingMethod(noAllocationMethodMatcher).matches(tree, state)) { - return false; - } + (MethodInvocationTree tree, VisitorState state) -> { + if (!enclosingMethod(noAllocationMethodMatcher).matches(tree, state)) { + return false; + } + + // Get the arguments. + JCMethodInvocation methodInvocation = (JCMethodInvocation) tree; + List arguments = methodInvocation.getArguments(); - // Get the arguments. - JCMethodInvocation methodInvocation = (JCMethodInvocation) tree; - List arguments = methodInvocation.getArguments(); + // Get the parameters. + MethodSymbol methodSymbol = ASTHelpers.getSymbol(tree); + List params = methodSymbol.getParameters(); - // Get the parameters. - MethodSymbol methodSymbol = ASTHelpers.getSymbol(tree); - List params = methodSymbol.getParameters(); + // If there is a length mismatch, this implies varargs boxing. + if (arguments.size() != params.size()) { + return true; + } - // If there is a length mismatch, this implies varargs boxing. - if (arguments.size() != params.size()) { + // Check for boxing at each argument. + int numArgs = arguments.size(); + int i = 0; + Iterator argument = arguments.iterator(); + Iterator param = params.iterator(); + while (param.hasNext() && argument.hasNext()) { + JCExpression a = argument.next(); + VarSymbol p = param.next(); + + if (a.type.isPrimitive() && !p.type.isPrimitive()) { + // Boxing occurs here. return true; } - // Check for boxing at each argument. - int numArgs = arguments.size(); - int i = 0; - Iterator argument = arguments.iterator(); - Iterator param = params.iterator(); - while (param.hasNext() && argument.hasNext()) { - JCExpression a = argument.next(); - VarSymbol p = param.next(); - - if (a.type.isPrimitive() && !p.type.isPrimitive()) { - // Boxing occurs here. - return true; - } - - // Check last parameter. If it's a varargs parameter, ensure no boxing by making sure - // it's assignable. - if (i == numArgs - 1 - && methodSymbol.isVarArgs() - && p.type instanceof ArrayType - && !state.getTypes().isAssignable(a.type, p.type)) { - return true; - } - i++; + // Check last parameter. If it's a varargs parameter, ensure no boxing by making sure + // it's assignable. + if (i == numArgs - 1 + && methodSymbol.isVarArgs() + && p.type instanceof ArrayType + && !state.getTypes().isAssignable(a.type, p.type)) { + return true; } - - return false; + i++; } + + return false; }; /** Matches boxing by unary operator. */ private static final Matcher boxingUnary = - new Matcher() { - @Override - public boolean matches(UnaryTree tree, VisitorState state) { - return allOf( - not(withinThrowOrAnnotation), - enclosingMethod(noAllocationMethodMatcher), - anyOf( - kindIs(POSTFIX_DECREMENT), - kindIs(POSTFIX_INCREMENT), - kindIs(PREFIX_DECREMENT), - kindIs(PREFIX_INCREMENT))) - .matches(tree, state) - && not(isPrimitiveType()).matches(tree, state); - } + (UnaryTree tree, VisitorState state) -> { + return allOf( + not(withinThrowOrAnnotation), + enclosingMethod(noAllocationMethodMatcher), + anyOf( + kindIs(POSTFIX_DECREMENT), + kindIs(POSTFIX_INCREMENT), + kindIs(PREFIX_DECREMENT), + kindIs(PREFIX_INCREMENT))) + .matches(tree, state) + && not(isPrimitiveType()).matches(tree, state); }; @Override diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/NonAtomicVolatileUpdate.java b/core/src/main/java/com/google/errorprone/bugpatterns/NonAtomicVolatileUpdate.java index e7f5b1a07e9..d454912f1f1 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/NonAtomicVolatileUpdate.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/NonAtomicVolatileUpdate.java @@ -54,33 +54,24 @@ public class NonAtomicVolatileUpdate extends BugChecker /** Extracts the expression from a UnaryTree and applies a matcher to it. */ private static Matcher expressionFromUnaryTree(Matcher exprMatcher) { - return new Matcher() { - @Override - public boolean matches(UnaryTree tree, VisitorState state) { - return exprMatcher.matches(tree.getExpression(), state); - } + return (UnaryTree tree, VisitorState state) -> { + return exprMatcher.matches(tree.getExpression(), state); }; } /** Extracts the variable from a CompoundAssignmentTree and applies a matcher to it. */ private static Matcher variableFromCompoundAssignmentTree( Matcher exprMatcher) { - return new Matcher() { - @Override - public boolean matches(CompoundAssignmentTree tree, VisitorState state) { - return exprMatcher.matches(tree.getVariable(), state); - } + return (CompoundAssignmentTree tree, VisitorState state) -> { + return exprMatcher.matches(tree.getVariable(), state); }; } /** Extracts the variable from an AssignmentTree and applies a matcher to it. */ private static Matcher variableFromAssignmentTree( Matcher exprMatcher) { - return new Matcher() { - @Override - public boolean matches(AssignmentTree tree, VisitorState state) { - return exprMatcher.matches(tree.getVariable(), state); - } + return (AssignmentTree tree, VisitorState state) -> { + return exprMatcher.matches(tree.getVariable(), state); }; } diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/TryFailThrowable.java b/core/src/main/java/com/google/errorprone/bugpatterns/TryFailThrowable.java index ccdf3afcba5..968409327e0 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/TryFailThrowable.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/TryFailThrowable.java @@ -101,29 +101,26 @@ public class TryFailThrowable extends BugChecker implements TryTreeMatcher { isSameType("junit.framework.AssertionFailedError")); private static final Matcher failOrAssert = - new Matcher() { - @Override - public boolean matches(ExpressionTree item, VisitorState state) { - if (!(item instanceof MethodInvocationTree)) { - return false; - } - Symbol sym = getSymbol(item); - if (!(sym instanceof MethodSymbol)) { - throw new IllegalArgumentException("not a method call"); - } - if (!isStatic(sym)) { - return false; - } - - String methodName = sym.getQualifiedName().toString(); - String className = sym.owner.getQualifiedName().toString(); - // TODO(cpovirk): Look for literal "throw new AssertionError()," etc. - return (methodName.startsWith("assert") || methodName.startsWith("fail")) - && (className.equals("org.junit.Assert") - || className.equals("junit.framework.Assert") - || className.equals("junit.framework.TestCase") - || className.endsWith("MoreAsserts")); + (ExpressionTree item, VisitorState state) -> { + if (!(item instanceof MethodInvocationTree)) { + return false; + } + Symbol sym = getSymbol(item); + if (!(sym instanceof MethodSymbol)) { + throw new IllegalArgumentException("not a method call"); } + if (!isStatic(sym)) { + return false; + } + + String methodName = sym.getQualifiedName().toString(); + String className = sym.owner.getQualifiedName().toString(); + // TODO(cpovirk): Look for literal "throw new AssertionError()," etc. + return (methodName.startsWith("assert") || methodName.startsWith("fail")) + && (className.equals("org.junit.Assert") + || className.equals("junit.framework.Assert") + || className.equals("junit.framework.TestCase") + || className.endsWith("MoreAsserts")); }; @Override diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AssertEqualsArgumentOrderChecker.java b/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AssertEqualsArgumentOrderChecker.java index 7522028c7cb..9d19c5574ba 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AssertEqualsArgumentOrderChecker.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AssertEqualsArgumentOrderChecker.java @@ -84,37 +84,33 @@ public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState * perfect match otherwise we return a distance of 1. */ private static Function buildDistanceFunction() { - return new Function() { - - @Override - public Double apply(ParameterPair parameterPair) { - Parameter formal = parameterPair.formal(); - Parameter actual = parameterPair.actual(); - String formalName = formal.name(); - String actualName = actual.name(); - - if (formalName.equals("expected")) { - if (actual.constant() || isEnumIdentifier(actual)) { - return 0.0; - } - if (actualName.startsWith("expected")) { - return 0.0; - } - return 1.0; + return (ParameterPair parameterPair) -> { + Parameter formal = parameterPair.formal(); + Parameter actual = parameterPair.actual(); + String formalName = formal.name(); + String actualName = actual.name(); + + if (formalName.equals("expected")) { + if (actual.constant() || isEnumIdentifier(actual)) { + return 0.0; + } + if (actualName.startsWith("expected")) { + return 0.0; } + return 1.0; + } - if (formalName.equals("actual")) { - if (actual.constant() || isEnumIdentifier(actual)) { - return 1.0; - } - if (actualName.startsWith("actual")) { - return 0.0; - } + if (formalName.equals("actual")) { + if (actual.constant() || isEnumIdentifier(actual)) { return 1.0; } - - return formal.index() == actual.index() ? 0.0 : Double.POSITIVE_INFINITY; + if (actualName.startsWith("actual")) { + return 0.0; + } + return 1.0; } + + return formal.index() == actual.index() ? 0.0 : Double.POSITIVE_INFINITY; }; } diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AutoValueConstructorOrderChecker.java b/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AutoValueConstructorOrderChecker.java index 72d53b3a8d6..23cc90ffedf 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AutoValueConstructorOrderChecker.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/argumentselectiondefects/AutoValueConstructorOrderChecker.java @@ -70,16 +70,13 @@ public Description matchNewClass(NewClassTree tree, VisitorState state) { } private static Function buildDistanceFunction() { - return new Function() { - @Override - public Double apply(ParameterPair parameterPair) { - Parameter formal = parameterPair.formal(); - Parameter actual = parameterPair.actual(); - if (formal.isUnknownName() || actual.isUnknownName()) { - return formal.index() == actual.index() ? 0.0 : 1.0; - } else { - return formal.name().equals(actual.name()) ? 0.0 : 1.0; - } + return (ParameterPair parameterPair) -> { + Parameter formal = parameterPair.formal(); + Parameter actual = parameterPair.actual(); + if (formal.isUnknownName() || actual.isUnknownName()) { + return formal.index() == actual.index() ? 0.0 : 1.0; + } else { + return formal.name().equals(actual.name()) ? 0.0 : 1.0; } }; } diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/InjectedConstructorAnnotations.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/InjectedConstructorAnnotations.java index 79d3c04c0be..5ee198ada4d 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/InjectedConstructorAnnotations.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/InjectedConstructorAnnotations.java @@ -50,12 +50,9 @@ public class InjectedConstructorAnnotations extends BugChecker implements Method // A matcher of binding annotations private static final Matcher BINDING_ANNOTATION_MATCHER = - new Matcher() { - @Override - public boolean matches(AnnotationTree annotationTree, VisitorState state) { - return symbolHasAnnotation(GUICE_BINDING_ANNOTATION) - .matches(annotationTree.getAnnotationType(), state); - } + (AnnotationTree annotationTree, VisitorState state) -> { + return symbolHasAnnotation(GUICE_BINDING_ANNOTATION) + .matches(annotationTree.getAnnotationType(), state); }; /** diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/ScopeAnnotationOnInterfaceOrAbstractClass.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/ScopeAnnotationOnInterfaceOrAbstractClass.java index b01449e3cc3..f7d1e5de0f0 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/ScopeAnnotationOnInterfaceOrAbstractClass.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/ScopeAnnotationOnInterfaceOrAbstractClass.java @@ -45,12 +45,9 @@ public class ScopeAnnotationOnInterfaceOrAbstractClass extends BugChecker implements AnnotationTreeMatcher { private static final Matcher INTERFACE_AND_ABSTRACT_TYPE_MATCHER = - new Matcher() { - @Override - public boolean matches(ClassTree classTree, VisitorState state) { - return classTree.getModifiers().getFlags().contains(ABSTRACT) - || (ASTHelpers.getSymbol(classTree).flags() & Flags.INTERFACE) != 0; - } + (ClassTree classTree, VisitorState state) -> { + return classTree.getModifiers().getFlags().contains(ABSTRACT) + || (ASTHelpers.getSymbol(classTree).flags() & Flags.INTERFACE) != 0; }; @Override diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/EmptySetMultibindingContributions.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/EmptySetMultibindingContributions.java index 1d934c20a95..0dcc2ade4f1 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/EmptySetMultibindingContributions.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/EmptySetMultibindingContributions.java @@ -124,15 +124,12 @@ private static Matcher setFactory(String factoryName) { Matchers.singleStatementReturnMatcher(EMPTY_SET); private static final Matcher RETURNS_EMPTY_SET = - new Matcher() { - @Override - public boolean matches(MethodTree method, VisitorState state) { - List parameters = method.getParameters(); - if (!parameters.isEmpty()) { - return false; - } - return DIRECTLY_RETURNS_EMPTY_SET.matches(method, state); + (MethodTree method, VisitorState state) -> { + List parameters = method.getParameters(); + if (!parameters.isEmpty()) { + return false; } + return DIRECTLY_RETURNS_EMPTY_SET.matches(method, state); }; private static final Matcher ANNOTATED_WITH_PRODUCES_OR_PROVIDES = diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/UseBinds.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/UseBinds.java index 64131bdd28e..9c3a2262ad9 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/UseBinds.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/UseBinds.java @@ -64,35 +64,32 @@ severity = WARNING) public class UseBinds extends BugChecker implements MethodTreeMatcher { private static final Matcher SIMPLE_METHOD = - new Matcher() { - @Override - public boolean matches(MethodTree t, VisitorState state) { - List parameters = t.getParameters(); - if (parameters.size() != 1) { - return false; - } - VariableTree onlyParameter = Iterables.getOnlyElement(parameters); - - BlockTree body = t.getBody(); - if (body == null) { - return false; - } - List statements = body.getStatements(); - if (statements.size() != 1) { - return false; - } - StatementTree onlyStatement = Iterables.getOnlyElement(statements); + (MethodTree t, VisitorState state) -> { + List parameters = t.getParameters(); + if (parameters.size() != 1) { + return false; + } + VariableTree onlyParameter = Iterables.getOnlyElement(parameters); - if (!(onlyStatement instanceof ReturnTree returnTree)) { - return false; - } - Symbol returnedSymbol = getSymbol(returnTree.getExpression()); - if (returnedSymbol == null) { - return false; - } + BlockTree body = t.getBody(); + if (body == null) { + return false; + } + List statements = body.getStatements(); + if (statements.size() != 1) { + return false; + } + StatementTree onlyStatement = Iterables.getOnlyElement(statements); - return getSymbol(onlyParameter).equals(returnedSymbol); + if (!(onlyStatement instanceof ReturnTree returnTree)) { + return false; } + Symbol returnedSymbol = getSymbol(returnTree.getExpression()); + if (returnedSymbol == null) { + return false; + } + + return getSymbol(onlyParameter).equals(returnedSymbol); }; private static final Matcher CAN_BE_A_BINDS_METHOD = diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/Util.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/Util.java index 063d48be030..03583ce3494 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/Util.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/Util.java @@ -37,7 +37,6 @@ import static javax.lang.model.element.Modifier.FINAL; import static javax.lang.model.element.Modifier.STATIC; -import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; @@ -96,20 +95,14 @@ private static Matcher hasAnyParameter(String... parameters) { return anyOf( transform( asList(parameters), - new Function>() { - @Override - public Matcher apply(String parameter) { - return hasArgumentWithValue(parameter, Matchers.anything()); - } + (String parameter) -> { + return hasArgumentWithValue(parameter, Matchers.anything()); })); } private static final Matcher CLASS_EXTENDS_NOTHING = - new Matcher() { - @Override - public boolean matches(ClassTree t, VisitorState state) { - return t.getExtendsClause() == null; - } + (ClassTree t, VisitorState state) -> { + return t.getExtendsClause() == null; }; /** @@ -144,11 +137,8 @@ static Optional findAnnotation(String annotationName, ClassTree private static final MultiMatcher HAS_GENERATED_CONSTRUCTOR = constructor( AT_LEAST_ONE, - new Matcher() { - @Override - public boolean matches(MethodTree t, VisitorState state) { - return isGeneratedConstructor(t); - } + (MethodTree t, VisitorState state) -> { + return isGeneratedConstructor(t); }); /** diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/inject/guice/AssistedInjectScoping.java b/core/src/main/java/com/google/errorprone/bugpatterns/inject/guice/AssistedInjectScoping.java index bda6a1acee8..a65e658895b 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/inject/guice/AssistedInjectScoping.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/inject/guice/AssistedInjectScoping.java @@ -69,20 +69,17 @@ public class AssistedInjectScoping extends BugChecker implements ClassTreeMatche * constructor and at least one constructor is annotated with @AssistedInject. */ private static final Matcher HAS_ASSISTED_CONSTRUCTOR = - new Matcher() { - @Override - public boolean matches(ClassTree classTree, VisitorState state) { - MultiMatchResult injectedConstructors = - CLASS_TO_INJECTED_CONSTRUCTORS.multiMatchResult(classTree, state); - if (injectedConstructors.matches()) { - // Check constructor with @Inject annotation for parameter with @Assisted annotation. - return methodHasParameters(AT_LEAST_ONE, hasAnnotation(ASSISTED_ANNOTATION)) - .matches(injectedConstructors.matchingNodes().getFirst(), state); - } - - return constructor(AT_LEAST_ONE, hasAnnotation(ASSISTED_INJECT_ANNOTATION)) - .matches(classTree, state); + (ClassTree classTree, VisitorState state) -> { + MultiMatchResult injectedConstructors = + CLASS_TO_INJECTED_CONSTRUCTORS.multiMatchResult(classTree, state); + if (injectedConstructors.matches()) { + // Check constructor with @Inject annotation for parameter with @Assisted annotation. + return methodHasParameters(AT_LEAST_ONE, hasAnnotation(ASSISTED_ANNOTATION)) + .matches(injectedConstructors.matchingNodes().getFirst(), state); } + + return constructor(AT_LEAST_ONE, hasAnnotation(ASSISTED_INJECT_ANNOTATION)) + .matches(classTree, state); }; @Override diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/argumentselectiondefects/ArgumentSelectionDefectCheckerTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/argumentselectiondefects/ArgumentSelectionDefectCheckerTest.java index b6fc2465467..ecaa0d58ea0 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/argumentselectiondefects/ArgumentSelectionDefectCheckerTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/argumentselectiondefects/ArgumentSelectionDefectCheckerTest.java @@ -321,11 +321,8 @@ void test(Object first, Object second) { } private static Function buildEqualityFunction() { - return new Function() { - @Override - public Double apply(ParameterPair parameterPair) { - return parameterPair.formal().name().equals(parameterPair.actual().name()) ? 0.0 : 1.0; - } + return (ParameterPair parameterPair) -> { + return parameterPair.formal().name().equals(parameterPair.actual().name()) ? 0.0 : 1.0; }; } diff --git a/core/src/test/java/com/google/errorprone/matchers/HasIdentifierTest.java b/core/src/test/java/com/google/errorprone/matchers/HasIdentifierTest.java index be09e3f825e..7129e2d732e 100644 --- a/core/src/test/java/com/google/errorprone/matchers/HasIdentifierTest.java +++ b/core/src/test/java/com/google/errorprone/matchers/HasIdentifierTest.java @@ -63,11 +63,8 @@ public class A { methodHasIdentifierMatching( /* shouldMatch= */ true, hasIdentifier( - new Matcher() { - @Override - public boolean matches(IdentifierTree tree, VisitorState state) { - return tree.getName().contentEquals("this"); - } + (IdentifierTree tree, VisitorState state) -> { + return tree.getName().contentEquals("this"); }))); } @@ -87,11 +84,8 @@ public class A { methodHasIdentifierMatching( /* shouldMatch= */ true, hasIdentifier( - new Matcher() { - @Override - public boolean matches(IdentifierTree tree, VisitorState state) { - return tree.getName().contentEquals("foo"); - } + (IdentifierTree tree, VisitorState state) -> { + return tree.getName().contentEquals("foo"); }))); } @@ -110,11 +104,8 @@ public class A { methodHasIdentifierMatching( /* shouldMatch= */ true, hasIdentifier( - new Matcher() { - @Override - public boolean matches(IdentifierTree tree, VisitorState state) { - return tree.getName().contentEquals("foo"); - } + (IdentifierTree tree, VisitorState state) -> { + return tree.getName().contentEquals("foo"); }))); } @@ -133,11 +124,8 @@ public class A { methodHasIdentifierMatching( /* shouldMatch= */ false, hasIdentifier( - new Matcher() { - @Override - public boolean matches(IdentifierTree tree, VisitorState state) { - return tree.getName().contentEquals("foo"); - } + (IdentifierTree tree, VisitorState state) -> { + return tree.getName().contentEquals("foo"); }))); } @@ -160,11 +148,8 @@ public class A { literalHasIdentifierMatching( /* shouldMatch= */ false, hasIdentifier( - new Matcher() { - @Override - public boolean matches(IdentifierTree tree, VisitorState state) { - return tree.getName().contentEquals("somethingElse"); - } + (IdentifierTree tree, VisitorState state) -> { + return tree.getName().contentEquals("somethingElse"); }))); } diff --git a/core/src/test/java/com/google/errorprone/refaster/TemplateIntegrationTest.java b/core/src/test/java/com/google/errorprone/refaster/TemplateIntegrationTest.java index c323ed95f53..8011c816d38 100644 --- a/core/src/test/java/com/google/errorprone/refaster/TemplateIntegrationTest.java +++ b/core/src/test/java/com/google/errorprone/refaster/TemplateIntegrationTest.java @@ -23,15 +23,12 @@ import static org.junit.Assert.assertThrows; import com.google.common.base.CharMatcher; -import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import com.google.errorprone.CodeTransformer; import com.sun.source.tree.ClassTree; import com.sun.source.tree.CompilationUnitTree; -import com.sun.source.tree.Tree; import java.io.IOException; -import java.util.List; import javax.tools.JavaFileObject; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,11 +47,8 @@ private CodeTransformer extractRefasterRule(JavaFileObject object) { Iterables.getOnlyElement( FluentIterable.from(compilationUnits) .transformAndConcat( - new Function>() { - @Override - public List apply(CompilationUnitTree input) { - return input.getTypeDecls(); - } + (CompilationUnitTree input) -> { + return input.getTypeDecls(); }) .filter(ClassTree.class)); return Iterables.getOnlyElement(RefasterRuleBuilderScanner.extractRules(classTree, context));