Class NoReflection

java.lang.Object
com.google.errorprone.bugpatterns.BugChecker
io.micronaut.errorprone.noreflection.NoReflection
All Implemented Interfaces:
com.google.errorprone.bugpatterns.BugChecker.MemberReferenceTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MethodInvocationTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.NewClassTreeMatcher, com.google.errorprone.matchers.Suppressible, Serializable

@AutoService(com.google.errorprone.bugpatterns.BugChecker.class) public final class NoReflection extends com.google.errorprone.bugpatterns.BugChecker implements com.google.errorprone.bugpatterns.BugChecker.MethodInvocationTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MemberReferenceTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.NewClassTreeMatcher
Reports reflection: a call, a method named rather than called, or a constructor that reaches for it, unless the build allows it.

A method reference is matched as well as a call, and a constructor as well as a method: Class::getDeclaredMethods handed to a map is the lookup deferred, and new EnumMap<>(type) fills the enum constants of the type as surely as EnumSet.noneOf does. What the build allows and forbids comes from the flags declared on ReflectionCategory. A report links to the section of the guide saying what the call does and which cache it fills.

A single call can still be allowed where nothing else will do, with a suppression on the local variable that holds what the platform returned rather than on the method, so that the rest of the method stays checked:

public Method getMethod() {
    // getMethod returns a java.lang.reflect.Method, which only the platform can produce
    @SuppressWarnings("NoReflection")
    Method target = context.getExecutableMethod().getTargetMethod();
    return target;
}

The check decides suppression itself rather than leaving it to ErrorProne, so that a build can stop honouring it with ReflectionCategory.SUPPRESSIBLE_FLAG for this check alone - ErrorProne's option to ignore suppression annotations would do it for every check at once.

Since:
1.0.0
Author:
Denis Stepanov
See Also:
  • Nested Class Summary

    Nested classes/interfaces inherited from class com.google.errorprone.bugpatterns.BugChecker

    com.google.errorprone.bugpatterns.BugChecker.AnnotatedTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.AnnotationTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ArrayAccessTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ArrayTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.AssertTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.AssignmentTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.BinaryTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.BindingPatternTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.BlockTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.BreakTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.CaseTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.CatchTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ClassTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.CompilationUnitTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.CompoundAssignmentTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ConditionalExpressionTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ConstantCaseLabelTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ContinueTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.DeconstructionPatternTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.DefaultCaseLabelTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.DoWhileLoopTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.EmptyStatementTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.EnhancedForLoopTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ExportsTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ExpressionStatementTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ForLoopTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.IdentifierTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.IfTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ImportTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.InstanceOfTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.IntersectionTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.LabeledStatementTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.LambdaExpressionTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.LiteralTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MemberReferenceTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MemberSelectTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MethodInvocationTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.MethodTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ModifiersTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ModuleTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.NewArrayTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.NewClassTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.OpensTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.PackageTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ParameterizedTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ParenthesizedTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.PatternCaseLabelTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.PrimitiveTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ProvidesTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.RequiresTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ReturnTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.SuppressibleTreePathScanner<R,P>, com.google.errorprone.bugpatterns.BugChecker.SwitchExpressionTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.SwitchTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.SynchronizedTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.ThrowTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.TryTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.TypeCastTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.TypeParameterTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.UnaryTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.UnionTypeTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.UsesTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.VariableTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.WhileLoopTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.WildcardTreeMatcher, com.google.errorprone.bugpatterns.BugChecker.YieldTreeMatcher
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    The flag naming the categories allowed throughout the project, separated by commas.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Forbids every category everywhere, and honours a suppression.
    NoReflection(com.google.errorprone.ErrorProneFlags flags)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    com.google.errorprone.matchers.Description
    matchMemberReference(MemberReferenceTree tree, com.google.errorprone.VisitorState state)
     
    com.google.errorprone.matchers.Description
    matchMethodInvocation(MethodInvocationTree tree, com.google.errorprone.VisitorState state)
     
    com.google.errorprone.matchers.Description
    matchNewClass(NewClassTree tree, com.google.errorprone.VisitorState state)
     

    Methods inherited from class com.google.errorprone.bugpatterns.BugChecker

    allNames, buildDescription, buildDescription, buildDescription, buildDescription, canonicalName, customSuppressionAnnotations, defaultSeverity, describeMatch, describeMatch, describeMatch, describeMatch, describeMatch, describeMatch, describeMatch, describeMatch, disableable, equals, hashCode, isSuppressed, isSuppressed, linkUrl, message, supportsSuppressWarnings, suppressedByAnyOf, suppressedRegions

    Methods inherited from class Object

    clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface com.google.errorprone.matchers.Suppressible

    allNames, canonicalName, customSuppressionAnnotations, supportsSuppressWarnings, suppressedByAnyOf
  • Field Details

    • ALLOWED_FLAG

      public static final String ALLOWED_FLAG
      The flag naming the categories allowed throughout the project, separated by commas.
      See Also:
  • Constructor Details

    • NoReflection

      public NoReflection()
      Forbids every category everywhere, and honours a suppression.
    • NoReflection

      @Inject public NoReflection(com.google.errorprone.ErrorProneFlags flags)
      Parameters:
      flags - The flags naming what the build allows and forbids, and whether a suppression is honoured
  • Method Details

    • matchMethodInvocation

      public com.google.errorprone.matchers.Description matchMethodInvocation(MethodInvocationTree tree, com.google.errorprone.VisitorState state)
      Specified by:
      matchMethodInvocation in interface com.google.errorprone.bugpatterns.BugChecker.MethodInvocationTreeMatcher
    • matchMemberReference

      public com.google.errorprone.matchers.Description matchMemberReference(MemberReferenceTree tree, com.google.errorprone.VisitorState state)
      Specified by:
      matchMemberReference in interface com.google.errorprone.bugpatterns.BugChecker.MemberReferenceTreeMatcher
    • matchNewClass

      public com.google.errorprone.matchers.Description matchNewClass(NewClassTree tree, com.google.errorprone.VisitorState state)
      Specified by:
      matchNewClass in interface com.google.errorprone.bugpatterns.BugChecker.NewClassTreeMatcher