8008444: Inherited generic functional descriptors are merged incorrectly
authormcimadamore
Thu, 21 Feb 2013 15:27:05 +0000
changeset 16313 ca91cf83b25c
parent 16312 7fb570abcb54
child 16314 f1ece0e4178b
8008444: Inherited generic functional descriptors are merged incorrectly Summary: Missing call to Types.createMethodWithThrownTypes Reviewed-by: jjg
langtools/src/share/classes/com/sun/tools/javac/code/Types.java
langtools/test/tools/javac/lambda/LambdaConv25.java
langtools/test/tools/javac/lambda/LambdaConv25.out
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java	Thu Feb 21 15:26:46 2013 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java	Thu Feb 21 15:27:05 2013 +0000
@@ -512,7 +512,7 @@
                 @Override
                 public Type getType(Type origin) {
                     Type mt = memberType(origin, getSymbol());
-                    return new MethodType(mt.getParameterTypes(), mt.getReturnType(), thrown1, syms.methodClass);
+                    return createMethodTypeWithThrown(mt, thrown1);
                 }
             };
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/LambdaConv25.java	Thu Feb 21 15:27:05 2013 +0000
@@ -0,0 +1,21 @@
+/*
+ * @test /nodynamiccopyright/
+ * @summary check that merged inherited descriptors preservers type-parameters
+ * @compile/fail/ref=LambdaConv25.out -XDrawDiagnostics LambdaConv25.java
+ */
+class LambdaConv25 {
+
+    interface A {
+        <X> void m();
+    }
+
+    interface B {
+        <X> void m();
+    }
+
+    interface C extends A, B { }
+
+    void test() {
+        C c = ()->{}; //should fail
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/LambdaConv25.out	Thu Feb 21 15:27:05 2013 +0000
@@ -0,0 +1,2 @@
+LambdaConv25.java:19:15: compiler.err.prob.found.req: (compiler.misc.invalid.generic.lambda.target: <X>()void, kindname.interface, LambdaConv25.C)
+1 error