Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: google/error-prone
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.29.2
Choose a base ref
...
head repository: google/error-prone
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.30.0
Choose a head ref

Commits on Jul 19, 2024

  1. Treat all com.google.protobuf.ProtocolMessageEnums as immutable

    PiperOrigin-RevId: 653806506
    cushon authored and Error Prone Team committed Jul 19, 2024
    Copy the full SHA
    8e1bd10 View commit details
  2. Add TraditionalSwitchExpression.md.

    PiperOrigin-RevId: 654138846
    eamonnmcmanus authored and Error Prone Team committed Jul 19, 2024
    Copy the full SHA
    053f721 View commit details

Commits on Jul 22, 2024

  1. [Test-only change] Use TEXT_MATCH mode for StatementSwitchToExpressio…

    …nSwitch direct conversion unit tests involving comment processing
    
    PiperOrigin-RevId: 654746861
    markhbrady authored and Error Prone Team committed Jul 22, 2024
    Copy the full SHA
    df5eec2 View commit details
  2. StatementSwitchToExpressionSwitch: Enhance code comment handling for …

    …assignment switch and return switch, including retaining comments after the final statement in a case.
    
    PiperOrigin-RevId: 654761204
    markhbrady authored and Error Prone Team committed Jul 22, 2024
    Copy the full SHA
    94f5eb0 View commit details
  3. Flag @OtherNullnessAnnotation void as we already do @Nullable void.

    We got this wrong with `@CheckForNull` in one file in Guava (unknown commit).
    
    PiperOrigin-RevId: 654797514
    cpovirk authored and Error Prone Team committed Jul 22, 2024
    Copy the full SHA
    dd94f4a View commit details
  4. Fix a crash in YodaCondition

    #4488
    
    PiperOrigin-RevId: 654844314
    cushon authored and Error Prone Team committed Jul 22, 2024
    Copy the full SHA
    62c454e View commit details
  5. Ban more class loading primitives

    No new violations are found after TGP.
    
    PiperOrigin-RevId: 654858529
    java-team-github-bot authored and Error Prone Team committed Jul 22, 2024
    Copy the full SHA
    868626b View commit details

Commits on Jul 23, 2024

  1. Remove unused dependency on guice

    See 1c3c09f
    
    PiperOrigin-RevId: 655210727
    cushon authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    fefeef9 View commit details
  2. Add kotlin Result to WellKnownThreadSafety -[]

    `Result<T>` is an immutable wrapper over a `T` in the case of success, or `Throwable` in the case of an error.
    
    Kotlin docs - https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-result/
    
    TAP train - []
    
    PiperOrigin-RevId: 655230537
    java-team-github-bot authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    f97736d View commit details
  3. Disable implicit annotation processing in some tests

    Fixes
    
    ```
    Note: Annotation processing is enabled because one or more processors were found
      on the class path. A future release of javac may disable annotation processing
      unless at least one processor is specified by name (-processor), or a search
      path is specified (--processor-path, --processor-module-path), or annotation
      processing is enabled explicitly (-proc:only, -proc:full).
      Use -Xlint:-options to suppress this message.
      Use -proc:none to disable annotation processing.
    ```
    PiperOrigin-RevId: 655236694
    cushon authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    9f4b7d0 View commit details
  4. Add DefaultLocale check to discourage use of the default locale

    Fixes #632
    
    Fixes #4487
    
    COPYBARA_INTEGRATE_REVIEW=#4487 from tbroyer:default-locale 102a28f
    PiperOrigin-RevId: 655239463
    tbroyer authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    996d09c View commit details
  5. Add more tests for arrow and multi-case switch statements in MissingC…

    …asesInEnumSwitchTest
    
    PiperOrigin-RevId: 655288858
    cushon authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    7b58ec9 View commit details
  6. Handle multiple labels in UnnecessaryDefaultInEnumSwitch

    Fixes #4443
    
    PiperOrigin-RevId: 655300423
    cushon authored and Error Prone Team committed Jul 23, 2024
    Copy the full SHA
    0ec88c0 View commit details

Commits on Jul 24, 2024

  1. Disallow unnecessary break statements at the end of the body of a `…

    …->` switch statement
    
    Startblock:
      * unknown commit is submitted
    PiperOrigin-RevId: 655602239
    cushon authored and Error Prone Team committed Jul 24, 2024
    Copy the full SHA
    fc339e0 View commit details
  2. Improve fix to prepare for a change to the return type of `JCCompilat…

    …ionUnit#getImports` in an upcoming JDK version
    
    Follow-up to 9e0fbf7
    
    This allows the code to work if it's compiled and executed against different javac versions.
    
    PiperOrigin-RevId: 655688755
    cushon authored and Error Prone Team committed Jul 24, 2024
    Copy the full SHA
    a94279c View commit details
  3. Migrate Error Prone to use JSpecify nullness annotations

    PiperOrigin-RevId: 655693769
    cushon authored and Error Prone Team committed Jul 24, 2024
    Copy the full SHA
    bfe69f8 View commit details

Commits on Jul 26, 2024

  1. Demonstrate that NullableVoid already handles @Nullable on constr…

    …uctors.
    
    PiperOrigin-RevId: 656164310
    cpovirk authored and Error Prone Team committed Jul 26, 2024
    Copy the full SHA
    3ad4e45 View commit details
  2. Verify that UnnecessaryBoxedVariable handles AutoValue factories

    PiperOrigin-RevId: 656498912
    cushon authored and Error Prone Team committed Jul 26, 2024
    Copy the full SHA
    40f5b21 View commit details

Commits on Jul 27, 2024

  1. Make ASTHelpers.getSymbol(Tree) delegate to the `MemberReferenceTre…

    …e` overload.
    
    This may or may not actually change behavior: The handling that I added in e5a6d0d was definitely important for `MethodInvocationTree`, since it affects behavior when code uses static imports. However, static imports can't be used with a `MemberReferenceTree`, so the change might not be important there. Still, as I noted in that previous CL's description, I get the impression that this might also help with cases like `someSerializable.equals`—and presumably `someSerializable::equals`, too.
    
    Anyway, this change seems clearly like either an improvement in behavior or a no-op that makes the implementation more consistent, so either way feels like a win.
    
    PiperOrigin-RevId: 656731744
    cpovirk authored and Error Prone Team committed Jul 27, 2024
    Copy the full SHA
    9884911 View commit details
  2. Automatic code cleanup.

    PiperOrigin-RevId: 656794179
    cpovirk authored and Error Prone Team committed Jul 27, 2024
    Copy the full SHA
    8e39783 View commit details

Commits on Jul 29, 2024

  1. Copy a key line from the @Rule Javadoc to[]

    java-team-github-bot authored and Error Prone Team committed Jul 29, 2024
    Copy the full SHA
    dbfd4a6 View commit details

Commits on Jul 30, 2024

  1. Recognize more unnecessary breaks in UnnecessaryBreakInSwitch

    PiperOrigin-RevId: 657598108
    cushon authored and Error Prone Team committed Jul 30, 2024
    Copy the full SHA
    198903c View commit details
  2. Recognize AutoValue extension generated code in ClassInitializationDe…

    …adlock and AutoValueSubclassLeaked
    
    PiperOrigin-RevId: 657606731
    cushon authored and Error Prone Team committed Jul 30, 2024
    Copy the full SHA
    5413aa5 View commit details
  3. Improve handling of AutoValue extensions in AutoValueSubclassLeaked

    Follow-up to 5413aa5
    
    Don't rely on the extension generated code having `@Generated` annotations. A number of extensions omit the annotation, and AutoValueSubclassLeaked relies on the generated annotation to recognize generated code, so after 5413aa5 it was reporting errors for references from extensions.
    
    PiperOrigin-RevId: 657715233
    cushon authored and Error Prone Team committed Jul 30, 2024
    Copy the full SHA
    ca7b569 View commit details

Commits on Jul 31, 2024

  1. Confirm that https://errorprone.info/bugpattern/CannotMockFinalClass

    …covers records.
    
    Relevant to #4384.
    
    PiperOrigin-RevId: 657972168
    cpovirk authored and Error Prone Team committed Jul 31, 2024
    Copy the full SHA
    f56c8b2 View commit details
  2. Internal Change

    PiperOrigin-RevId: 658145394
    nick-someone authored and Error Prone Team committed Jul 31, 2024
    Copy the full SHA
    ba7e3b3 View commit details

Commits on Aug 1, 2024

  1. Allow any package's @CanIgnoreReturnValue to suppress CanIgnoreReturn…

    …ValueSuggester
    
    This brings it into alignment with the CheckReturnValue checker logic.
    
    PiperOrigin-RevId: 658248419
    mhansen authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    6ff6f35 View commit details
  2. Don't fire CanIgnoreReturnValueSuggester if the function is directl…

    …y annotated w/ `@CheckReturnValue` (from any package).
    
    #checkreturnvalue
    
    PiperOrigin-RevId: 658409445
    kluever authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    1e0e03c View commit details
  3. Minor documentation tweak in SuggestedFix.Builder.

    PiperOrigin-RevId: 658434707
    eamonnmcmanus authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    4ec7faa View commit details
  4. Add Error Prone check for unnecessary boxed types in AutoValue classes.

    This check will warn users when they are using boxed types in their AutoValue classes that are not Nullable. This is because boxed types are not necessary in AutoValue classes, and they can actually be harmful because they can cause unnecessary boxing and unboxing.
    
    Clean up reference: unknown commit
    
    This check is currently enabled as a warning, but it can be made into an error in the future.
    
    PiperOrigin-RevId: 658493053
    java-team-github-bot authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    fe07236 View commit details
  5. Omit some unnecessary break statements when translating to -> switches

    PiperOrigin-RevId: 658578239
    cushon authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    d887307 View commit details
  6. Add handling of toBuilder()

    toBuilder() was identified as a getter leading to not correctly identifying the case where all the getters are prefixed.
    
    PiperOrigin-RevId: 658585727
    java-team-github-bot authored and Error Prone Team committed Aug 1, 2024
    Copy the full SHA
    ccd3ca6 View commit details

Commits on Aug 2, 2024

  1. Handle var in MustBeClosedChecker

    Fixes #4164
    
    PiperOrigin-RevId: 658802144
    cushon authored and Error Prone Team committed Aug 2, 2024
    Copy the full SHA
    ac7ebf5 View commit details
  2. Remove // fall out comments, which are sometimes used to document a…

    …n empty `default:` statement group
    
    PiperOrigin-RevId: 658827224
    cushon authored and Error Prone Team committed Aug 2, 2024
    Copy the full SHA
    474554a View commit details
  3. Convert some simple blocks to return switches using yield

    PiperOrigin-RevId: 658843015
    cushon authored and Error Prone Team committed Aug 2, 2024
    Copy the full SHA
    86df5cf View commit details

Commits on Aug 6, 2024

  1. Add ability to suppress warning for the entire AutoValue class

    PiperOrigin-RevId: 660029479
    java-team-github-bot authored and Error Prone Team committed Aug 6, 2024
    Copy the full SHA
    a706e8d View commit details
  2. Do not update getters that override methods from a superclass.

    The change would be incorrect as the modified method is no longer matching the signature of the method in the superclass.
    
    PiperOrigin-RevId: 660049434
    java-team-github-bot authored and Error Prone Team committed Aug 6, 2024
    Copy the full SHA
    ba8f9a2 View commit details

Commits on Aug 8, 2024

  1. Don't fire the CanIgnoreReturnValueSuggester for `dagger.producers.…

    …ProductionComponent.Builder` and `dagger.producers.ProductionSubcomponent.Builder`.
    
    #checkreturnvalue
    
    PiperOrigin-RevId: 660826447
    kluever authored and Error Prone Team committed Aug 8, 2024
    Copy the full SHA
    af175b0 View commit details

Commits on Aug 10, 2024

  1. Release Error Prone 2.30.0

    cushon committed Aug 10, 2024
    Copy the full SHA
    5ada179 View commit details
Showing with 3,997 additions and 913 deletions.
  1. +1 −1 annotation/pom.xml
  2. +1 −1 annotations/pom.xml
  3. +8 −8 check_api/pom.xml
  4. +1 −1 check_api/src/main/java/com/google/errorprone/BaseErrorProneJavaCompiler.java
  5. +2 −3 check_api/src/main/java/com/google/errorprone/BugCheckerInfo.java
  6. +13 −22 check_api/src/main/java/com/google/errorprone/VisitorState.java
  7. +2 −3 check_api/src/main/java/com/google/errorprone/apply/DiffApplier.java
  8. +1 −1 check_api/src/main/java/com/google/errorprone/apply/DiffSupplier.java
  9. +4 −7 check_api/src/main/java/com/google/errorprone/dataflow/AccessPath.java
  10. +2 −3 check_api/src/main/java/com/google/errorprone/dataflow/AccessPathStore.java
  11. +2 −3 check_api/src/main/java/com/google/errorprone/dataflow/ConstantPropagationAnalysis.java
  12. +3 −5 check_api/src/main/java/com/google/errorprone/dataflow/DataFlow.java
  13. +1 −1 check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessAnnotations.java
  14. +6 −10 ...src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessPropagationTransfer.java
  15. +1 −1 ...src/main/java/com/google/errorprone/dataflow/nullnesspropagation/TrustingNullnessPropagation.java
  16. +2 −3 ...java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java
  17. +2 −3 check_api/src/main/java/com/google/errorprone/fixes/AppliedFix.java
  18. +5 −5 check_api/src/main/java/com/google/errorprone/fixes/SuggestedFix.java
  19. +4 −6 check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java
  20. +2 −3 check_api/src/main/java/com/google/errorprone/matchers/AnnotationMatcherUtils.java
  21. +4 −6 check_api/src/main/java/com/google/errorprone/matchers/Description.java
  22. +1 −1 check_api/src/main/java/com/google/errorprone/matchers/FieldMatchers.java
  23. +1 −1 check_api/src/main/java/com/google/errorprone/matchers/method/BaseMethodMatcher.java
  24. +2 −2 check_api/src/main/java/com/google/errorprone/matchers/method/MethodInvocationMatcher.java
  25. +89 −113 check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java
  26. +1 −1 check_api/src/main/java/com/google/errorprone/util/ErrorProneScope.java
  27. +3 −5 check_api/src/main/java/com/google/errorprone/util/FindIdentifiers.java
  28. +3 −3 core/pom.xml
  29. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/AbstractJUnit4InitMethodNotRun.java
  30. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/AbstractMockChecker.java
  31. +21 −7 core/src/main/java/com/google/errorprone/bugpatterns/AbstractMustBeClosedChecker.java
  32. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/AbstractUseSwitch.java
  33. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/AlreadyChecked.java
  34. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/AlwaysThrows.java
  35. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/AnnotateFormatMethod.java
  36. +3 −3 core/src/main/java/com/google/errorprone/bugpatterns/AnnotationPosition.java
  37. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/AssertionFailureIgnored.java
  38. +346 −0 core/src/main/java/com/google/errorprone/bugpatterns/AutoValueBoxedValues.java
  39. +19 −3 core/src/main/java/com/google/errorprone/bugpatterns/AutoValueSubclassLeaked.java
  40. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/BadAnnotationImplementation.java
  41. +2 −0 core/src/main/java/com/google/errorprone/bugpatterns/BanClassLoader.java
  42. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/BoxedPrimitiveConstructor.java
  43. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/CatchingUnchecked.java
  44. +5 −9 core/src/main/java/com/google/errorprone/bugpatterns/ChainedAssertionLosesContext.java
  45. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/CheckReturnValue.java
  46. +5 −1 core/src/main/java/com/google/errorprone/bugpatterns/ClassInitializationDeadlock.java
  47. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/ComplexBooleanConstant.java
  48. +12 −23 core/src/main/java/com/google/errorprone/bugpatterns/ConstantOverflow.java
  49. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/ConstantPatternCompile.java
  50. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/DeduplicateConstants.java
  51. +699 −0 core/src/main/java/com/google/errorprone/bugpatterns/DefaultLocale.java
  52. +4 −3 core/src/main/java/com/google/errorprone/bugpatterns/DoNotUseRuleChain.java
  53. +2 −2 core/src/main/java/com/google/errorprone/bugpatterns/DuplicateDateFormatField.java
  54. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/EqualsHashCode.java
  55. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/EqualsNaN.java
  56. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/ExpectedExceptionChecker.java
  57. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/ForEachIterable.java
  58. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/ForOverrideChecker.java
  59. +5 −9 core/src/main/java/com/google/errorprone/bugpatterns/ImplementAssertionWithChaining.java
  60. +15 −27 core/src/main/java/com/google/errorprone/bugpatterns/ImpossibleNullComparison.java
  61. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/InstanceOfAndCastMatchWrongType.java
  62. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/InterruptedExceptionSwallowed.java
  63. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/IsInstanceIncompatibleType.java
  64. +4 −7 core/src/main/java/com/google/errorprone/bugpatterns/JdkObsolete.java
  65. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/LockNotBeforeTry.java
  66. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/LongLiteralLowerCaseSuffix.java
  67. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/MissingTestCall.java
  68. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/ModifySourceCollectionInStream.java
  69. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/NarrowingCompoundAssignment.java
  70. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/NonCanonicalType.java
  71. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/NullOptional.java
  72. +7 −6 core/src/main/java/com/google/errorprone/bugpatterns/NullableVoid.java
  73. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/RedundantOverride.java
  74. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/RedundantSetterCall.java
  75. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/RemoveUnusedImports.java
  76. +4 −4 core/src/main/java/com/google/errorprone/bugpatterns/RestrictedApiChecker.java
  77. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/SameNameButDifferent.java
  78. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/SelfAssignment.java
  79. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/SelfEquals.java
  80. +112 −48 core/src/main/java/com/google/errorprone/bugpatterns/StatementSwitchToExpressionSwitch.java
  81. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/StaticImports.java
  82. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/StringSplitter.java
  83. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/SwitchDefault.java
  84. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/TestExceptionChecker.java
  85. +4 −7 core/src/main/java/com/google/errorprone/bugpatterns/TruthAssertExpected.java
  86. +4 −7 core/src/main/java/com/google/errorprone/bugpatterns/TypeCompatibility.java
  87. +3 −3 core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryAnonymousClass.java
  88. +85 −0 core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryBreakInSwitch.java
  89. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryDefaultInEnumSwitch.java
  90. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/UnnecessaryLambda.java
  91. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java
  92. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/UseEnumSwitch.java
  93. +6 −6 core/src/main/java/com/google/errorprone/bugpatterns/YodaCondition.java
  94. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/android/FragmentInjection.java
  95. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/android/IsLoggableTagLength.java
  96. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/apidiff/ApiDiffChecker.java
  97. +1 −1 ...n/java/com/google/errorprone/bugpatterns/argumentselectiondefects/EnclosedByReverseHeuristic.java
  98. +1 −1 .../java/com/google/errorprone/bugpatterns/argumentselectiondefects/LowInformationNameHeuristic.java
  99. +30 −15 ...c/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggester.java
  100. +11 −19 .../errorprone/bugpatterns/collectionincompatibletype/AbstractCollectionIncompatibleTypeMatcher.java
  101. +7 −13 core/src/main/java/com/google/errorprone/bugpatterns/collectionincompatibletype/BinopMatcher.java
  102. +1 −1 .../main/java/com/google/errorprone/bugpatterns/collectionincompatibletype/CompatibleWithMisuse.java
  103. +3 −3 ...c/main/java/com/google/errorprone/bugpatterns/collectionincompatibletype/ContainmentMatchers.java
  104. +7 −12 ...n/java/com/google/errorprone/bugpatterns/collectionincompatibletype/IncompatibleArgumentType.java
  105. +4 −7 .../src/main/java/com/google/errorprone/bugpatterns/collectionincompatibletype/MethodArgMatcher.java
  106. +4 −7 .../java/com/google/errorprone/bugpatterns/collectionincompatibletype/TypeArgOfMethodArgMatcher.java
  107. +4 −4 core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerArgumentToString.java
  108. +3 −3 core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerFormatString.java
  109. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerRedundantIsEnabled.java
  110. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerWithoutCause.java
  111. +5 −9 core/src/main/java/com/google/errorprone/bugpatterns/formatstring/FormatStringValidation.java
  112. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/formatstring/InlineFormatString.java
  113. +5 −7 core/src/main/java/com/google/errorprone/bugpatterns/formatstring/StrictFormatStringValidation.java
  114. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/inject/MissingRuntimeRetention.java
  115. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/inject/dagger/AndroidInjectionBeforeSuper.java
  116. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/inlineme/InlinabilityResult.java
  117. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/javadoc/EscapedEntity.java
  118. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/javadoc/MissingSummary.java
  119. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnescapedEntity.java
  120. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/javadoc/UnrecognisedJavadocTag.java
  121. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/javadoc/Utils.java
  122. +2 −3 core/src/main/java/com/google/errorprone/bugpatterns/nullness/EqualsBrokenForNull.java
  123. +6 −11 core/src/main/java/com/google/errorprone/bugpatterns/nullness/NullnessUtils.java
  124. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ConstantExpressions.java
  125. +4 −7 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/DoubleCheckedLocking.java
  126. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByBinder.java
  127. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByChecker.java
  128. +9 −17 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedBySymbolResolver.java
  129. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByUtils.java
  130. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableAnalysis.java
  131. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableChecker.java
  132. +7 −12 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableRefactoring.java
  133. +1 −1 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafeChecker.java
  134. +8 −11 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafety.java
  135. +8 −0 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/WellKnownMutability.java
  136. +1 −0 core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/WellKnownThreadSafety.java
  137. +3 −5 core/src/main/java/com/google/errorprone/bugpatterns/time/TimeUnitMismatch.java
  138. +2 −3 core/src/main/java/com/google/errorprone/refaster/Bindings.java
  139. +1 −1 core/src/main/java/com/google/errorprone/refaster/ExpressionTemplate.java
  140. +10 −1 core/src/main/java/com/google/errorprone/refaster/ImportPolicy.java
  141. +2 −3 core/src/main/java/com/google/errorprone/refaster/PlaceholderUnificationVisitor.java
  142. +1 −1 core/src/main/java/com/google/errorprone/refaster/RefasterRule.java
  143. +1 −1 core/src/main/java/com/google/errorprone/refaster/StringName.java
  144. +2 −4 core/src/main/java/com/google/errorprone/refaster/Template.java
  145. +2 −3 core/src/main/java/com/google/errorprone/refaster/UAnnotation.java
  146. +2 −3 core/src/main/java/com/google/errorprone/refaster/UArrayType.java
  147. +2 −3 core/src/main/java/com/google/errorprone/refaster/UArrayTypeTree.java
  148. +2 −3 core/src/main/java/com/google/errorprone/refaster/UAssert.java
  149. +3 −5 core/src/main/java/com/google/errorprone/refaster/UBreak.java
  150. +2 −3 core/src/main/java/com/google/errorprone/refaster/UCatch.java
  151. +3 −5 core/src/main/java/com/google/errorprone/refaster/UClassIdent.java
  152. +2 −3 core/src/main/java/com/google/errorprone/refaster/UConditional.java
  153. +2 −3 core/src/main/java/com/google/errorprone/refaster/UContinue.java
  154. +3 −3 core/src/main/java/com/google/errorprone/refaster/UDoWhileLoop.java
  155. +2 −3 core/src/main/java/com/google/errorprone/refaster/UExpressionStatement.java
  156. +3 −5 core/src/main/java/com/google/errorprone/refaster/UForLoop.java
  157. +1 −1 core/src/main/java/com/google/errorprone/refaster/UFreeIdent.java
  158. +4 −5 core/src/main/java/com/google/errorprone/refaster/UIf.java
  159. +3 −3 core/src/main/java/com/google/errorprone/refaster/UInstanceOf.java
  160. +2 −3 core/src/main/java/com/google/errorprone/refaster/ULabeledStatement.java
  161. +2 −3 core/src/main/java/com/google/errorprone/refaster/ULiteral.java
  162. +2 −3 core/src/main/java/com/google/errorprone/refaster/UMatches.java
  163. +2 −3 core/src/main/java/com/google/errorprone/refaster/UMemberReference.java
  164. +2 −3 core/src/main/java/com/google/errorprone/refaster/UMethodDecl.java
  165. +2 −3 core/src/main/java/com/google/errorprone/refaster/UMethodInvocation.java
  166. +2 −3 core/src/main/java/com/google/errorprone/refaster/UMethodType.java
  167. +5 −9 core/src/main/java/com/google/errorprone/refaster/UNewArray.java
  168. +4 −7 core/src/main/java/com/google/errorprone/refaster/UNewClass.java
  169. +2 −3 core/src/main/java/com/google/errorprone/refaster/UOfKind.java
  170. +3 −5 core/src/main/java/com/google/errorprone/refaster/URepeated.java
  171. +3 −5 core/src/main/java/com/google/errorprone/refaster/UReturn.java
  172. +6 −11 core/src/main/java/com/google/errorprone/refaster/UTemplater.java
  173. +2 −3 core/src/main/java/com/google/errorprone/refaster/UThrow.java
  174. +1 −1 core/src/main/java/com/google/errorprone/refaster/UTree.java
  175. +5 −7 core/src/main/java/com/google/errorprone/refaster/UTry.java
  176. +2 −3 core/src/main/java/com/google/errorprone/refaster/UType.java
  177. +2 −3 core/src/main/java/com/google/errorprone/refaster/UTypeApply.java
  178. +3 −3 core/src/main/java/com/google/errorprone/refaster/UTypeParameter.java
  179. +2 −3 core/src/main/java/com/google/errorprone/refaster/UTypeVar.java
  180. +1 −1 core/src/main/java/com/google/errorprone/refaster/UTypeVarIdent.java
  181. +2 −3 core/src/main/java/com/google/errorprone/refaster/UUnary.java
  182. +2 −3 core/src/main/java/com/google/errorprone/refaster/UVariableDecl.java
  183. +2 −3 core/src/main/java/com/google/errorprone/refaster/UWildcard.java
  184. +2 −3 core/src/main/java/com/google/errorprone/refaster/Unifier.java
  185. +1 −1 core/src/main/java/com/google/errorprone/refaster/annotation/RequiredAnnotationProcessor.java
  186. +6 −0 core/src/main/java/com/google/errorprone/scanner/BuiltInCheckerSuppliers.java
  187. +678 −0 core/src/test/java/com/google/errorprone/bugpatterns/AutoValueBoxedValuesTest.java
  188. +68 −0 core/src/test/java/com/google/errorprone/bugpatterns/AutoValueSubclassLeakedTest.java
  189. +23 −0 core/src/test/java/com/google/errorprone/bugpatterns/CannotMockFinalClassTest.java
  190. +17 −0 core/src/test/java/com/google/errorprone/bugpatterns/ClassInitializationDeadlockTest.java
  191. +493 −0 core/src/test/java/com/google/errorprone/bugpatterns/DefaultLocaleTest.java
  192. +59 −0 core/src/test/java/com/google/errorprone/bugpatterns/MissingCasesInEnumSwitchTest.java
  193. +43 −0 core/src/test/java/com/google/errorprone/bugpatterns/MustBeClosedCheckerTest.java
  194. +26 −1 core/src/test/java/com/google/errorprone/bugpatterns/NullableVoidTest.java
  195. +362 −30 core/src/test/java/com/google/errorprone/bugpatterns/StatementSwitchToExpressionSwitchTest.java
  196. +21 −0 core/src/test/java/com/google/errorprone/bugpatterns/UnnecessaryBoxedVariableTest.java
  197. +172 −0 core/src/test/java/com/google/errorprone/bugpatterns/UnnecessaryBreakInSwitchTest.java
  198. +26 −0 core/src/test/java/com/google/errorprone/bugpatterns/UnnecessaryDefaultInEnumSwitchTest.java
  199. +18 −0 core/src/test/java/com/google/errorprone/bugpatterns/YodaConditionTest.java
  200. +37 −0 ...st/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggesterTest.java
  201. +1 −1 ...java/com/google/errorprone/bugpatterns/inject/guice/testdata/InjectOnFinalFieldPositiveCases.java
  202. +1 −1 ...test/java/com/google/errorprone/bugpatterns/nullness/testdata/NullablePrimitiveNegativeCases.java
  203. +1 −1 ...test/java/com/google/errorprone/bugpatterns/nullness/testdata/NullablePrimitivePositiveCases.java
  204. +1 −1 ...le/errorprone/bugpatterns/overloading/testdata/InconsistentOverloadsPositiveCasesAnnotations.java
  205. +1 −1 ...c/test/java/com/google/errorprone/bugpatterns/testdata/AsyncFunctionReturnsNullNegativeCases.java
  206. +1 −1 core/src/test/java/com/google/errorprone/bugpatterns/testdata/BadImportPositiveCases.java
  207. +1 −1 core/src/test/java/com/google/errorprone/bugpatterns/testdata/BadImportPositiveCases_expected.java
  208. +2 −2 core/src/test/java/com/google/errorprone/bugpatterns/testdata/UnnecessaryBoxedVariableCases.java
  209. +1 −1 .../test/java/com/google/errorprone/bugpatterns/testdata/UnnecessaryBoxedVariableCases_expected.java
  210. +7 −7 core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByBinderTest.java
  211. +17 −0 core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafeCheckerTest.java
  212. +1 −1 docgen/pom.xml
  213. +2 −2 docgen/src/main/java/com/google/errorprone/BugPatternFileGenerator.java
  214. +1 −1 docgen_processor/pom.xml
  215. +11 −0 docs/bugpattern/AutoValueBoxedValues.md
  216. +6 −0 docs/bugpattern/TraditionalSwitchExpression.md
  217. +3 −0 docs/bugpattern/UnnecessaryBreakInSwitch.md
  218. +1 −2 pom.xml
  219. +1 −1 refaster/pom.xml
  220. +5 −5 test_helpers/pom.xml
  221. +2 −2 test_helpers/src/main/java/com/google/errorprone/CompilationTestHelper.java
  222. +1 −1 type_annotations/pom.xml
2 changes: 1 addition & 1 deletion annotation/pom.xml
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@
<parent>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_parent</artifactId>
<version>1.0-HEAD-SNAPSHOT</version>
<version>2.30.0</version>
</parent>

<name>@BugPattern annotation</name>
2 changes: 1 addition & 1 deletion annotations/pom.xml
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@
<parent>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_parent</artifactId>
<version>1.0-HEAD-SNAPSHOT</version>
<version>2.30.0</version>
</parent>

<name>error-prone annotations</name>
16 changes: 8 additions & 8 deletions check_api/pom.xml
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@
<parent>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_parent</artifactId>
<version>1.0-HEAD-SNAPSHOT</version>
<version>2.30.0</version>
</parent>

<name>error-prone check api</name>
@@ -44,10 +44,10 @@
<version>${project.version}</version>
</dependency>
<dependency>
<!-- BSD New -->
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
<!-- Apache 2.0 -->
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>${jspecify.version}</version>
</dependency>
<dependency>
<!-- GPLv2 with Classpath Exception -->
@@ -138,9 +138,9 @@
</dependency>
<dependency>
<!-- Apache 2.0 -->
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>

Original file line number Diff line number Diff line change
@@ -34,14 +34,14 @@
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
import javax.annotation.Nullable;
import javax.lang.model.SourceVersion;
import javax.tools.DiagnosticListener;
import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import org.jspecify.annotations.Nullable;

/** An Error Prone compiler that implements {@link javax.tools.JavaCompiler}. */
public class BaseErrorProneJavaCompiler implements JavaCompiler {
Original file line number Diff line number Diff line change
@@ -29,7 +29,7 @@
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;

/**
* An accessor for information about a single bug checker, including the metadata in the check's
@@ -172,8 +172,7 @@ public BugCheckerInfo withCustomDefaultSeverity(SeverityLevel defaultSeverity) {
disableable);
}

@Nullable
private static String createLinkUrl(String canonicalName, BugPattern pattern) {
private static @Nullable String createLinkUrl(String canonicalName, BugPattern pattern) {
switch (pattern.linkType()) {
case AUTOGENERATED:
return String.format("https://errorprone.info/bugpattern/%s", canonicalName);
35 changes: 13 additions & 22 deletions check_api/src/main/java/com/google/errorprone/VisitorState.java
Original file line number Diff line number Diff line change
@@ -60,8 +60,8 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
import javax.lang.model.util.Elements;
import org.jspecify.annotations.Nullable;

/**
* @author alexeagle@google.com (Alex Eagle)
@@ -355,16 +355,14 @@ public Name getName(String nameStr) {
* @param typeStr the JLS 13.1 binary name of the class, e.g. {@code "java.util.Map$Entry"}
* @return the {@link Type}, or null if it cannot be found
*/
@Nullable
public Type getTypeFromString(String typeStr) {
public @Nullable Type getTypeFromString(String typeStr) {
return sharedState
.typeCache
.computeIfAbsent(typeStr, key -> Optional.ofNullable(getTypeFromStringInternal(key)))
.orElse(null);
}

@Nullable
private Type getTypeFromStringInternal(String typeStr) {
private @Nullable Type getTypeFromStringInternal(String typeStr) {
validateTypeStr(typeStr);
Type primitiveOrVoidType = getPrimitiveOrVoidType(typeStr);
if (primitiveOrVoidType != null) {
@@ -385,8 +383,7 @@ private Type getTypeFromStringInternal(String typeStr) {
* @return the Symbol object, or null if it cannot be found
*/
// TODO(cushon): deal with binary compat issues and return ClassSymbol
@Nullable
public Symbol getSymbolFromString(String symStr) {
public @Nullable Symbol getSymbolFromString(String symStr) {
return getSymbolFromName(binaryNameFromClassname(symStr));
}

@@ -404,8 +401,7 @@ public Name binaryNameFromClassname(String className) {
*
* @param name the name to look up, which must be in binary form (i.e. with $ for nested classes).
*/
@Nullable
public ClassSymbol getSymbolFromName(Name name) {
public @Nullable ClassSymbol getSymbolFromName(Name name) {
boolean modular = sharedState.modules.getDefaultModule() != getSymtab().noModule;
if (!modular) {
return getSymbolFromString(getSymtab().noModule, name);
@@ -422,8 +418,7 @@ public ClassSymbol getSymbolFromName(Name name) {
return null;
}

@Nullable
public ClassSymbol getSymbolFromString(ModuleSymbol msym, Name name) {
public @Nullable ClassSymbol getSymbolFromString(ModuleSymbol msym, Name name) {
ClassSymbol result = getSymtab().getClass(msym, name);
if (result == null || result.kind == Kind.ERR || !result.exists()) {
return null;
@@ -507,9 +502,8 @@ public Type arrayTypeForType(Type baseType) {
*
* @return the path, or {@code null} if there is no match
*/
@Nullable
@SafeVarargs
public final TreePath findPathToEnclosing(Class<? extends Tree>... classes) {
public final @Nullable TreePath findPathToEnclosing(Class<? extends Tree>... classes) {
TreePath enclosingPath = getPath();
while (enclosingPath != null) {
for (Class<? extends Tree> clazz : classes) {
@@ -527,10 +521,10 @@ public final TreePath findPathToEnclosing(Class<? extends Tree>... classes) {
*
* @return the node, or {@code null} if there is no match
*/
@Nullable
@SuppressWarnings("unchecked") // findPathToEnclosing guarantees that the type is from |classes|
// findPathToEnclosing guarantees that the type is from |classes|
@SuppressWarnings("unchecked")
@SafeVarargs
public final <T extends Tree> T findEnclosing(Class<? extends T>... classes) {
public final <T extends Tree> @Nullable T findEnclosing(Class<? extends T>... classes) {
TreePath pathToEnclosing = findPathToEnclosing(classes);
return (pathToEnclosing == null) ? null : (T) pathToEnclosing.getLeaf();
}
@@ -540,8 +534,7 @@ public final <T extends Tree> T findEnclosing(Class<? extends T>... classes) {
*
* @return the source file as a sequence of characters, or null if it is not available
*/
@Nullable
public CharSequence getSourceCode() {
public @Nullable CharSequence getSourceCode() {
try {
return getPath().getCompilationUnit().getSourceFile().getCharContent(false);
} catch (IOException e) {
@@ -559,8 +552,7 @@ public CharSequence getSourceCode() {
* @return the source code that represents the node, or {@code null} if the source code is
* unavailable (e.g. for generated or desugared AST nodes)
*/
@Nullable
public String getSourceForNode(Tree tree) {
public @Nullable String getSourceForNode(Tree tree) {
int start = ((JCTree) tree).getStartPosition();
int end = getEndPosition(tree);
CharSequence source = getSourceCode();
@@ -634,8 +626,7 @@ private static void validateTypeStr(String typeStr) {
* Given a string that represents a type, if it's a primitive type (e.g., "int") or "void", return
* the corresponding Type, or null otherwise.
*/
@Nullable
private Type getPrimitiveOrVoidType(String typeStr) {
private @Nullable Type getPrimitiveOrVoidType(String typeStr) {
switch (typeStr) {
case "byte":
return getSymtab().byteType;
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;

/**
* Applier of diffs to Java source code
@@ -132,8 +132,7 @@ public void run() {
}
}

@Nullable
public Future<?> put(Diff diff) {
public @Nullable Future<?> put(Diff diff) {
if (refactoredPaths.add(diff.getRelevantFileName())) {
runState.incrementAndGet();
return workerService.submit(new Task(diff));
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
package com.google.errorprone.apply;

import java.io.IOException;
import javax.annotation.Nullable;
import org.jspecify.annotations.Nullable;

/**
* Supplier of file differences.
Original file line number Diff line number Diff line change
@@ -28,7 +28,6 @@
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
import javax.annotation.Nullable;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Modifier;
@@ -38,6 +37,7 @@
import org.checkerframework.errorprone.dataflow.cfg.node.Node;
import org.checkerframework.errorprone.dataflow.cfg.node.VariableDeclarationNode;
import org.checkerframework.errorprone.javacutil.TreeUtils;
import org.jspecify.annotations.Nullable;

/**
* A sequence of field names or autovalue accessors, along with a receiver: either a variable or a
@@ -61,8 +61,7 @@
public abstract class AccessPath {

/** If present, base of access path is contained Element; if absent, base is `this` */
@Nullable
public abstract Element base();
public abstract @Nullable Element base();

public abstract ImmutableList<String> path();

@@ -111,8 +110,7 @@ public static boolean isAutoValueAccessor(Tree tree) {
* otherwise (for example, when the receiver of the field access contains an array access or
* non-AutoValue method call.
*/
@Nullable
public static AccessPath fromFieldAccess(FieldAccessNode fieldAccess) {
public static @Nullable AccessPath fromFieldAccess(FieldAccessNode fieldAccess) {
ImmutableList.Builder<String> pathBuilder = ImmutableList.builder();

Tree tree = fieldAccess.getTree();
@@ -161,8 +159,7 @@ public static AccessPath fromVariableDecl(VariableDeclarationNode node) {
* Returns an AccessPath representing {@code node} if {@code node} is representable as an access
* path and null otherwise
*/
@Nullable
public static AccessPath fromNodeIfTrackable(Node node) {
public static @Nullable AccessPath fromNodeIfTrackable(Node node) {
if (node instanceof LocalVariableNode) {
return fromLocalVariable((LocalVariableNode) node);
} else if (node instanceof VariableDeclarationNode) {
Original file line number Diff line number Diff line change
@@ -24,11 +24,11 @@
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.annotation.Nullable;
import org.checkerframework.errorprone.dataflow.analysis.AbstractValue;
import org.checkerframework.errorprone.dataflow.analysis.Store;
import org.checkerframework.errorprone.dataflow.cfg.visualize.CFGVisualizer;
import org.checkerframework.errorprone.dataflow.expression.JavaExpression;
import org.jspecify.annotations.Nullable;

/**
* Immutable map from local variables or heap access paths to their {@link AbstractValue}
@@ -58,8 +58,7 @@ public static <V extends AbstractValue<V>> AccessPathStore<V> empty() {
return (AccessPathStore<V>) EMPTY;
}

@Nullable
private V getInformation(AccessPath ap) {
private @Nullable V getInformation(AccessPath ap) {
return heap().get(checkNotNull(ap));
}

Original file line number Diff line number Diff line change
@@ -18,9 +18,9 @@

import com.sun.source.util.TreePath;
import com.sun.tools.javac.util.Context;
import javax.annotation.Nullable;
import org.checkerframework.errorprone.dataflow.constantpropagation.Constant;
import org.checkerframework.errorprone.dataflow.constantpropagation.ConstantPropagationTransfer;
import org.jspecify.annotations.Nullable;

/** An interface to the constant propagation analysis. */
public final class ConstantPropagationAnalysis {
@@ -33,8 +33,7 @@ public final class ConstantPropagationAnalysis {
* evaluates to the same numeric value), and null otherwise. Note that returning null does not
* necessarily mean the expression is *not* a constant.
*/
@Nullable
public static Number numberValue(TreePath exprPath, Context context) {
public static @Nullable Number numberValue(TreePath exprPath, Context context) {
Constant val = DataFlow.expressionDataflow(exprPath, context, CONSTANT_PROPAGATION);
if (val == null || !val.isConstant()) {
return null;
Original file line number Diff line number Diff line change
@@ -32,7 +32,6 @@
import com.sun.source.util.TreePath;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.util.Context;
import javax.annotation.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import org.checkerframework.errorprone.dataflow.analysis.AbstractValue;
import org.checkerframework.errorprone.dataflow.analysis.Analysis;
@@ -43,6 +42,7 @@
import org.checkerframework.errorprone.dataflow.cfg.ControlFlowGraph;
import org.checkerframework.errorprone.dataflow.cfg.UnderlyingAST;
import org.checkerframework.errorprone.dataflow.cfg.builder.CFGBuilder;
import org.jspecify.annotations.Nullable;

/**
* Provides a wrapper around {@link org.checkerframework.errorprone.dataflow.analysis.Analysis}.
@@ -127,8 +127,7 @@ public ControlFlowGraph load(CfgParams key) {
});

// TODO(b/158869538): remove once we merge jdk8 specific's with core
@Nullable
private static <T> TreePath findEnclosingMethodOrLambdaOrInitializer(TreePath path) {
private static <T> @Nullable TreePath findEnclosingMethodOrLambdaOrInitializer(TreePath path) {
while (path != null) {
if (path.getLeaf() instanceof MethodTree) {
return path;
@@ -201,10 +200,9 @@ public ControlFlowGraph getControlFlowGraph() {
* @return dataflow result for the given expression or {@code null} if the expression is not part
* of a method, lambda or initializer
*/
@Nullable
public static <
A extends AbstractValue<A>, S extends Store<S>, T extends ForwardTransferFunction<A, S>>
A expressionDataflow(TreePath exprPath, Context context, T transfer) {
@Nullable A expressionDataflow(TreePath exprPath, Context context, T transfer) {
Tree leaf = exprPath.getLeaf();
Preconditions.checkArgument(
leaf instanceof ExpressionTree,
Original file line number Diff line number Diff line change
@@ -32,7 +32,6 @@
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
@@ -43,6 +42,7 @@
import javax.lang.model.type.IntersectionType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.type.TypeVariable;
import org.jspecify.annotations.Nullable;

/** Utilities to extract {@link Nullness} from annotations. */
public class NullnessAnnotations {
Loading