Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing Generics causes: java.lang.RuntimeException: Number of types arguments in Foo.Supplier<java.lang.Object> does not match Foo.Supplier #1151

Open
agrieve opened this issue Feb 26, 2025 · 0 comments

Comments

@agrieve
Copy link

agrieve commented Feb 26, 2025

How to repro:

import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;

@NullMarked
public class Foo {
  public interface Supplier<T extends @Nullable Object> extends java.util.function.Supplier<T> {
  }

  public static void waitForAll(Runnable callback, Supplier... suppliers) {
  }

  public static void test(Supplier<Object> sup2) {
     waitForAll(() -> {}, sup2);
  }
}

Changing waitForAll to use Supplier<?> rather than Supplier fixes the crash.

Foo.java:16: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
     waitForAll(() -> {}, sup2);
               ^
     Please report this at https://github.com/google/error-prone/issues/new and include the following:

     error-prone version: 2.36.0
     BugPattern: NullAway
     Stack Trace:
     java.lang.RuntimeException: Number of types arguments in Foo.Supplier<java.lang.Object> does not match Foo.Supplier
  	at com.uber.nullaway.generics.CheckIdenticalNullabilityVisitor.visitClassType(CheckIdenticalNullabilityVisitor.java:52)
  	at com.uber.nullaway.generics.CheckIdenticalNullabilityVisitor.visitClassType(CheckIdenticalNullabilityVisitor.java:15)
  	at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1053)
  	at com.uber.nullaway.generics.GenericsChecks.identicalTypeParameterNullability(GenericsChecks.java:491)
  	at com.uber.nullaway.generics.GenericsChecks.subtypeParameterNullability(GenericsChecks.java:520)
  	at com.uber.nullaway.generics.GenericsChecks.compareGenericTypeParameterNullabilityForCall(GenericsChecks.java:667)
  	at com.uber.nullaway.NullAway.handleInvocation(NullAway.java:1889)
  	at com.uber.nullaway.NullAway.matchMethodInvocation(NullAway.java:401)
  	at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:509)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:824)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethodInvocation(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1873)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler/com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:504)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:711)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1652)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
  	at jdk.compiler/com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:271)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:591)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1145)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
  	at jdk.compiler/com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:223)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:818)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:989)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
  	at jdk.compiler/com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:619)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:896)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
  	at jdk.compiler/com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
  	at jdk.compiler/com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:151)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:631)
  	at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:170)
  	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:625)
  	at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
  	at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
  	at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
  	at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:227)
  	at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1432)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1379)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:964)
  	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:319)
  	at jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:178)
  	at jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:66)
  	at jdk.compiler/com.sun.tools.javac.Main.main(Main.java:52)
1 error
1 warning
printing javac parameters to: /tmp/javac.20250226_162924.args

Contents of: /tmp/javac.20250226_162924.args:

# javac crashed, this report includes the parameters passed to it in the @-file format
-g
--release
17
-encoding
UTF-8
-sourcepath
:
-Xlint:-dep-ann
-Xlint:-removal
-XDcompilePolicy=simple
"-Xplugin:ErrorProne -XepOpt:NullAway:AnnotatedPackages= -XepOpt:NullAway:CustomContractAnnotations=org.chromium.build.annotations.Contract -XepOpt:NullAway:CheckContracts=true -XepOpt:NullAway:CastToNonNullMethod=org.chromium.build.NullUtil.assumeNonNull -XepOpt:NullAway:AssertsEnabled=true -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true -XepOpt:Nullaway:AcknowledgeAndroidRecent=true -XepOpt:NullAway:JSpecifyMode=true -XepOpt:NullAway:KnownInitializers=android.app.Application.onCreate,android.app.Activity.onCreate,android.app.Service.onCreate,android.app.backup.BackupAgent.onCreate,android.content.ContentProvider.attachInfo,android.content.ContentProvider.onCreate,android.content.ContentWrapper.attachBaseContext -XepAllErrorsAsWarnings -XepDisableWarningsInGeneratedCode -Xep:InlineMeInliner:OFF -Xep:InlineMeSuggester:OFF -Xep:HidingField:OFF -Xep:AlreadyChecked:OFF -Xep:DirectInvocationOnMock:OFF -Xep:MockNotUsedInProduction:OFF -Xep:JdkObsolete:OFF -Xep:ReturnValueIgnored:OFF -Xep:StaticAssignmentInConstructor:OFF -Xep:InvalidBlockTag:OFF -Xep:InvalidParam:OFF -Xep:InvalidLink:OFF -Xep:InvalidInlineTag:OFF -Xep:MalformedInlineTag:OFF -Xep:MissingSummary:OFF -Xep:UnescapedEntity:OFF -Xep:UnrecognisedJavadocTag:OFF -Xep:MutablePublicArray:OFF -Xep:NonCanonicalType:OFF -Xep:DoNotClaimAnnotations:OFF -Xep:JavaUtilDate:OFF -Xep:IdentityHashMapUsage:OFF -Xep:StaticMockMember:OFF -Xep:StaticAssignmentOfThrowable:OFF -Xep:CatchAndPrintStackTrace:OFF -Xep:TypeParameterUnusedInFormals:OFF -Xep:DefaultCharset:OFF -Xep:FutureReturnValueIgnored:OFF -Xep:ThreadJoinLoop:OFF -Xep:StringSplitter:OFF -Xep:ClassNewInstance:OFF -Xep:ThreadLocalUsage:OFF -Xep:EqualsHashCode:OFF -Xep:OverrideThrowableToString:OFF -Xep:UnsafeReflectiveConstructionCast:OFF -Xep:MixedMutabilityReturnType:OFF -Xep:EqualsGetClass:OFF -Xep:UndefinedEquals:OFF -Xep:SameNameButDifferent:OFF -Xep:UnnecessaryLambda:OFF -Xep:EmptyCatch:OFF -Xep:BadImport:OFF -Xep:UseCorrectAssertInTests:OFF -Xep:RefersToDaggerCodegen:OFF -Xep:RemoveUnusedImports:OFF -Xep:UnicodeEscape:OFF -Xep:NonApiType:OFF -Xep:StringCharset:OFF -Xep:StringCaseLocaleUsage:OFF -Xep:RedundantControlFlow:OFF -Xep:BinderIdentityRestoredDangerously:WARN -Xep:EmptyIf:WARN -Xep:EqualsBrokenForNull:WARN -Xep:InvalidThrows:WARN -Xep:LongLiteralLowerCaseSuffix:WARN -Xep:MultiVariableDeclaration:WARN -Xep:RedundantOverride:WARN -Xep:StaticQualifiedUsingExpression:WARN -Xep:TimeUnitMismatch:WARN -Xep:UnnecessaryStaticImport:WARN -Xep:UseBinds:WARN -Xep:WildcardImport:WARN -Xep:NoStreams:WARN"
-XDshould-stop.ifError=FLOW
-proc:none
-processorpath
lib.java/tools/android/errorprone_plugin/errorprone_plugin.jar:lib.java/build/android/build_java.jar:lib.java/third_party/android_build_tools/error_prone/error_prone_java.jar:lib.java/third_party/android_build_tools/error_prone_javac/error_prone_javac_java.jar:../../third_party/android_build_tools/nullaway/cipd/nullaway.jar
-classpath
../../third_party/android_deps/cipd/libs/org_jspecify_jspecify/jspecify-1.0.0.jar:obj/build/android/build_java.turbine.jar:.
Foo.java
aarongable pushed a commit to chromium/chromium that referenced this issue Feb 27, 2025
And add missing generics to SupplierUtils, which was causing
NullAway to crash. Filed:
uber/NullAway#1151

Bug: 389129271
Change-Id: Ic6f9dadc64a6d3c41e9ace7f62d3a7af4b870717
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6305604
Auto-Submit: Andrew Grieve <[email protected]>
Commit-Queue: Andrew Grieve <[email protected]>
Reviewed-by: Henrique Nakashima <[email protected]>
Owners-Override: Andrew Grieve <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1425903}
github-actions bot pushed a commit to kaidokert/chrome_base_mirror that referenced this issue Mar 1, 2025
And add missing generics to SupplierUtils, which was causing
NullAway to crash. Filed:
uber/NullAway#1151

Bug: 389129271
Change-Id: Ic6f9dadc64a6d3c41e9ace7f62d3a7af4b870717
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6305604
Auto-Submit: Andrew Grieve <[email protected]>
Commit-Queue: Andrew Grieve <[email protected]>
Reviewed-by: Henrique Nakashima <[email protected]>
Owners-Override: Andrew Grieve <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1425903}
NOKEYCHECK=True
GitOrigin-RevId: c6127d1d1bdfe2c7a115295bdbb4c717ff23b50f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant