During the course of writing tests for JDK-8007574, the following functional interface test case from the in-progress lambda specification caused javac to crash:
@ExpectedIsFunInt(false) // Foo3 is _not_ functional: different signatures for m
interface Foo3<T, N extends Number> {
void m(T arg);
void m(N arg);
}
@ExpectedIsFunInt(false) // Bar3 is _not_ functional: different signatures for m
interface Bar3 extends Foo3<String, Integer> {}
@ExpectedIsFunInt(true) // Baz3 is functional: same signature for m
interface Baz3 extends Foo3<Integer, Integer> {}
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.NullPointerException
at com.sun.tools.javac.code.Types$DescriptorFilter.accepts(Types.java:606)
at com.sun.tools.javac.code.Types$DescriptorFilter.accepts(Types.java:593)
at com.sun.tools.javac.code.Scope$2$1.skipToNextMatchingEntry(Scope.java:405)
at com.sun.tools.javac.code.Scope$2$1.update(Scope.java:396)
at com.sun.tools.javac.code.Scope$2$1.<init>(Scope.java:375)
at com.sun.tools.javac.code.Scope$2.iterator(Scope.java:371)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.nextIterator(Scope.java:653)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.update(Scope.java:703)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.<init>(Scope.java:680)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.<init>(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1.iterator(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.nextIterator(Scope.java:653)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.update(Scope.java:703)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.<init>(Scope.java:680)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.<init>(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1.iterator(Scope.java:651)
at com.sun.tools.javac.code.Types$DescriptorCache.findDescriptorInternal(Types.java:423)
at com.sun.tools.javac.code.Types$DescriptorCache.get(Types.java:404)
at com.sun.tools.javac.code.Types.findDescriptorSymbol(Types.java:556)
at com.sun.tools.javac.code.Types.isFunctionalInterface(Types.java:572)
at com.sun.tools.javac.model.JavacElements.isFunctionalInterface(JavacElements.java:769)
at TestIsFunctionalInterface.process(TestIsFunctionalInterface.java:57)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:777)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:706)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:93)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1018)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1152)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1178)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:864)
at com.sun.tools.javac.main.Main.compile(Main.java:506)
at com.sun.tools.javac.main.Main.compile(Main.java:365)
at com.sun.tools.javac.main.Main.compile(Main.java:354)
at com.sun.tools.javac.main.Main.compile(Main.java:345)
at com.sun.tools.javac.Main.compile(Main.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:487)
at com.sun.javatest.regtest.RegressionCompileCommand.run(RegressionCompileCommand.java:247)
at com.sun.javatest.regtest.CompileAction.runCompile(CompileAction.java:556)
at com.sun.javatest.regtest.Agent$Server.doCompile(Agent.java:508)
at com.sun.javatest.regtest.Agent$Server.run(Agent.java:478)
at com.sun.javatest.regtest.Agent.main(Agent.java:84)
@ExpectedIsFunInt(false) // Foo3 is _not_ functional: different signatures for m
interface Foo3<T, N extends Number> {
void m(T arg);
void m(N arg);
}
@ExpectedIsFunInt(false) // Bar3 is _not_ functional: different signatures for m
interface Bar3 extends Foo3<String, Integer> {}
@ExpectedIsFunInt(true) // Baz3 is functional: same signature for m
interface Baz3 extends Foo3<Integer, Integer> {}
An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.NullPointerException
at com.sun.tools.javac.code.Types$DescriptorFilter.accepts(Types.java:606)
at com.sun.tools.javac.code.Types$DescriptorFilter.accepts(Types.java:593)
at com.sun.tools.javac.code.Scope$2$1.skipToNextMatchingEntry(Scope.java:405)
at com.sun.tools.javac.code.Scope$2$1.update(Scope.java:396)
at com.sun.tools.javac.code.Scope$2$1.<init>(Scope.java:375)
at com.sun.tools.javac.code.Scope$2.iterator(Scope.java:371)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.nextIterator(Scope.java:653)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.update(Scope.java:703)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.<init>(Scope.java:680)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.<init>(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1.iterator(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.nextIterator(Scope.java:653)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.update(Scope.java:703)
at com.sun.tools.javac.code.Scope$CompoundScope$CompoundScopeIterator.<init>(Scope.java:680)
at com.sun.tools.javac.code.Scope$CompoundScope$1$1.<init>(Scope.java:651)
at com.sun.tools.javac.code.Scope$CompoundScope$1.iterator(Scope.java:651)
at com.sun.tools.javac.code.Types$DescriptorCache.findDescriptorInternal(Types.java:423)
at com.sun.tools.javac.code.Types$DescriptorCache.get(Types.java:404)
at com.sun.tools.javac.code.Types.findDescriptorSymbol(Types.java:556)
at com.sun.tools.javac.code.Types.isFunctionalInterface(Types.java:572)
at com.sun.tools.javac.model.JavacElements.isFunctionalInterface(JavacElements.java:769)
at TestIsFunctionalInterface.process(TestIsFunctionalInterface.java:57)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:777)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:706)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:93)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1018)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1152)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1178)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:864)
at com.sun.tools.javac.main.Main.compile(Main.java:506)
at com.sun.tools.javac.main.Main.compile(Main.java:365)
at com.sun.tools.javac.main.Main.compile(Main.java:354)
at com.sun.tools.javac.main.Main.compile(Main.java:345)
at com.sun.tools.javac.Main.compile(Main.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:487)
at com.sun.javatest.regtest.RegressionCompileCommand.run(RegressionCompileCommand.java:247)
at com.sun.javatest.regtest.CompileAction.runCompile(CompileAction.java:556)
at com.sun.javatest.regtest.Agent$Server.doCompile(Agent.java:508)
at com.sun.javatest.regtest.Agent$Server.run(Agent.java:478)
at com.sun.javatest.regtest.Agent.main(Agent.java:84)
- duplicates
-
JDK-8007535 Compiler crashes on @FunctionalInterface used on interface with two inherited methods with same signatures
- Closed
- relates to
-
JDK-8007574 Provide isFunctionalInterface in javax.lang.model
- Closed