# HG changeset patch # User mcimadamore # Date 1361460425 0 # Node ID 3fef0cae83b32ea65dcee69bfb72da10d8e2c39f # Parent 9f0ec00514b6306f2e54d806f222baabc1d34566 8008444: Inherited generic functional descriptors are merged incorrectly Summary: Missing call to Types.createMethodWithThrownTypes Reviewed-by: jjg diff -r 9f0ec00514b6 -r 3fef0cae83b3 src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Thu Feb 21 15:26:46 2013 +0000 +++ b/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); } }; } diff -r 9f0ec00514b6 -r 3fef0cae83b3 test/tools/javac/lambda/LambdaConv25.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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 { + void m(); + } + + interface B { + void m(); + } + + interface C extends A, B { } + + void test() { + C c = ()->{}; //should fail + } +} diff -r 9f0ec00514b6 -r 3fef0cae83b3 test/tools/javac/lambda/LambdaConv25.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/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: ()void, kindname.interface, LambdaConv25.C) +1 error