Skip to content

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

@agrieve

Description

@agrieve

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions