type annotation on lambda method reference crashes javac
Werner Dietl
wdietl at gmail.com
Tue Feb 5 14:21:43 PST 2013
Hi Steve,
thanks for this test case!
I now implemented and pushed method/constructor reference type
arguments and all crashes should be removed.
Please expand and push your test cases for lambda and let me know
whether you see any problems.
Thanks,
cu, WMD.
On Mon, Jan 28, 2013 at 5:15 PM, Steve Sides <steve.sides at oracle.com> wrote:
> Hi Werner,
> This may be addressed with the rest of type-annotations + lambda, but so
> far most type annotations on lambda epxression are ignored.
> This one crashes javac.
>
> Compile TAlambda2.java below. Error message and stack trace is below the
> code.
>
> -steve
>
> import java.lang.annotation.*;
> import static java.lang.annotation.RetentionPolicy.*;
> import static java.lang.annotation.ElementType.*;
>
> public class TAlambda2 {
>
> public void test() {
> Integer[] intarray = { new Integer(1), new Integer(2), new
> Integer(3) };
> printArray(intarray, TPrint::<@A String>print);
> }
>
> public void printArray(Object[] oa, PrintString ps) {
> for(Object o : oa ) ps.print(o.toString());
> }
>
> public static void main(String... args) {
> new TAlambda2().test();
> }
> }
>
> interface PrintString { void print(String s); }
>
> class TPrint {
> public static <T> void print(T msg) {
> System.out.println("TPrint: " + msg.toString());
> }
> }
>
> @Retention(RUNTIME)
> @Target({TYPE_USE})
> @interface A {}
>
> Error message and stack trace:
>
> An exception has occurred in the compiler (1.8.0-ea). Please file a bug at
> the Java Developer Connection (http://java.sun.com/webapps/bugreport)
> after checking the Bug Parade for duplicates. Include your program and the
> following diagnostic in your report. Thank you.
> java.lang.AssertionError: Unresolved frame: TPrint::< @A() String>print of
> kind: MEMBER_REFERENCE
> Looking for tree: @A() String
> at com.sun.tools.javac.util.Assert.error(Assert.java:133)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.resolveFrame(TypeAnnotations.java:796)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.resolveFrame(TypeAnnotations.java:757)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.findPosition(TypeAnnotations.java:1025)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitAnnotatedType(TypeAnnotations.java:964)
> at
> com.sun.tools.javac.tree.JCTree$JCAnnotatedType.accept(JCTree.java:2330)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
> at
> com.sun.tools.javac.tree.TreeScanner.visitReference(TreeScanner.java:268)
> at
> com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:1931)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
> at
> com.sun.tools.javac.tree.TreeScanner.visitApply(TreeScanner.java:199)
> at
> com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1440)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at
> com.sun.tools.javac.tree.TreeScanner.visitExec(TreeScanner.java:174)
> at
> com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1271)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitBlock(TypeAnnotations.java:957)
> at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:884)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:901)
> at
> com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:771)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitClassDef(TypeAnnotations.java:843)
> at
> com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:686)
> at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
> at
> com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:135)
> at
> com.sun.tools.javac.code.TypeAnnotations.organizeTypeAnnotationsBodies(TypeAnnotations.java:102)
> at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4096)
> at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3975)
> at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:3909)
> at com.sun.tools.javac.comp.Attr.attrib(Attr.java:3883)
> at
> com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1254)
> at
> com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:907)
> at
> com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:866)
> 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:76)
> at com.sun.tools.javac.Main.main(Main.java:61)
>
--
http://www.google.com/profiles/wdietl
More information about the type-annotations-dev
mailing list