Fix NPE compiling code with a constructor reference (Type::new).
Constructor references to constructors of local classes inside static
methods were not properly handlded.
Change-Id: I87c178acb7f6ee2be804b16fbb72545f24b3287a
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
index d2cb9b6..7cb8ef5 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
@@ -1820,7 +1820,7 @@
// it's constructor invoked with an enclosing instance, Inner::new
// Java8 doesn't allow the qualifified case, e.g. x.new Foo() -> x.Foo::new
ReferenceBinding targetBinding = referredMethodBinding.declaringClass;
- if (JdtUtil.isInnerClass(targetBinding)) {
+ if (targetBinding.syntheticEnclosingInstanceTypes() != null) {
for (ReferenceBinding argType : targetBinding.syntheticEnclosingInstanceTypes()) {
argType = (ReferenceBinding) argType.erasure();
JExpression enclosingThisRef = resolveThisReference(info, argType, false, blockScope);
diff --git a/user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java b/user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java
index 6684445..e8aecbf 100644
--- a/user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java
+++ b/user/test-super/com/google/gwt/dev/jjs/super/com/google/gwt/dev/jjs/test/Java8Test.java
@@ -1703,5 +1703,19 @@
(SubclassImplementingInterfaceWithOverlay) (Object) new int[]{1, 2, 3};
assertEquals(3, object.len());
}
+
+ interface Producer<T> {
+ T get();
+ }
+
+ private static Producer<Object> createInnerClassProducer() {
+ class InnerClass {
+ }
+ return (Producer) InnerClass::new;
+ }
+
+ public void testLocalClassConstructorReferenceInStaticMethod() {
+ assertTrue(createInnerClassProducer().get() != null);
+ }
}
diff --git a/user/test/com/google/gwt/dev/jjs/test/Java8Test.java b/user/test/com/google/gwt/dev/jjs/test/Java8Test.java
index 3cf89d1..f9f945d 100644
--- a/user/test/com/google/gwt/dev/jjs/test/Java8Test.java
+++ b/user/test/com/google/gwt/dev/jjs/test/Java8Test.java
@@ -312,6 +312,10 @@
assertFalse(isGwtSourceLevel8());
}
+ public void testLocalClassConstructorReferenceInStaticMethod() {
+ assertFalse(isGwtSourceLevel8());
+ }
+
private boolean isGwtSourceLevel8() {
return JUnitShell.getCompilerOptions().getSourceLevel().compareTo(SourceLevel.JAVA8) >= 0;
}