# HG changeset patch # User sadayapalam # Date 1430136380 -19800 # Node ID 952a476681b2d53d446ad2291da7f3e578d19cfe # Parent c904bbdc5ec128633265e13b88230bb9796ac0b2 8078473: javac diamond finder crashes when used to build java.base module. Reviewed-by: mcimadamore diff -r c904bbdc5ec1 -r 952a476681b2 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java Sat Apr 25 15:59:54 2015 +0530 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java Mon Apr 27 17:36:20 2015 +0530 @@ -226,8 +226,18 @@ @Override void process(JCNewClass oldTree, JCNewClass newTree, boolean hasErrors) { if (!hasErrors) { - List inferredArgs = newTree.type.getTypeArguments(); - List explicitArgs = oldTree.type.getTypeArguments(); + List inferredArgs, explicitArgs; + if (oldTree.def != null) { + inferredArgs = newTree.def.implementing.nonEmpty() + ? newTree.def.implementing.get(0).type.getTypeArguments() + : newTree.def.extending.type.getTypeArguments(); + explicitArgs = oldTree.def.implementing.nonEmpty() + ? oldTree.def.implementing.get(0).type.getTypeArguments() + : oldTree.def.extending.type.getTypeArguments(); + } else { + inferredArgs = newTree.type.getTypeArguments(); + explicitArgs = oldTree.type.getTypeArguments(); + } for (Type t : inferredArgs) { if (!types.isSameType(t, explicitArgs.head)) { log.warning(oldTree.clazz, "diamond.redundant.args.1", diff -r c904bbdc5ec1 -r 952a476681b2 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Sat Apr 25 15:59:54 2015 +0530 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java Mon Apr 27 17:36:20 2015 +0530 @@ -2006,6 +2006,8 @@ * @param name The type's name. */ Symbol findType(Env env, Name name) { + if (name == names.empty) + return typeNotFound; // do not allow inadvertent "lookup" of anonymous types Symbol bestSoFar = typeNotFound; Symbol sym; boolean staticOnly = false; diff -r c904bbdc5ec1 -r 952a476681b2 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java Sat Apr 25 15:59:54 2015 +0530 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java Mon Apr 27 17:36:20 2015 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -690,7 +690,7 @@ break; case WILDCARD: { WildcardType a = ((WildcardType) t); - tp = Wildcard(TypeBoundKind(a.kind), Type(a.type)); + tp = Wildcard(TypeBoundKind(a.kind), a.kind == BoundKind.UNBOUND ? null : Type(a.type)); break; } case CLASS: diff -r c904bbdc5ec1 -r 952a476681b2 langtools/test/tools/javac/generics/diamond/6939780/T6939780_9.out --- a/langtools/test/tools/javac/generics/diamond/6939780/T6939780_9.out Sat Apr 25 15:59:54 2015 +0530 +++ b/langtools/test/tools/javac/generics/diamond/6939780/T6939780_9.out Mon Apr 27 17:36:20 2015 +0530 @@ -3,11 +3,11 @@ T6939780.java:23:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo T6939780.java:24:33: compiler.warn.diamond.redundant.args T6939780.java:25:28: compiler.warn.diamond.redundant.args -T6939780.java:26:28: compiler.warn.diamond.redundant.args +T6939780.java:26:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo T6939780.java:30:19: compiler.warn.diamond.redundant.args T6939780.java:31:19: compiler.warn.diamond.redundant.args T6939780.java:32:19: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo T6939780.java:33:19: compiler.warn.diamond.redundant.args T6939780.java:34:19: compiler.warn.diamond.redundant.args -T6939780.java:35:19: compiler.warn.diamond.redundant.args +T6939780.java:35:19: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo 12 warnings diff -r c904bbdc5ec1 -r 952a476681b2 langtools/test/tools/javac/generics/diamond/neg/T8078473.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/diamond/neg/T8078473.java Mon Apr 27 17:36:20 2015 +0530 @@ -0,0 +1,18 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8078473 + * @summary javac diamond finder crashes when used to build java.base module + * @compile/ref=T8078473.out T8078473.java -XDrawDiagnostics -XDfind=diamond + */ + +class T8078473 { + + static class C { + C(T8078473 p) {} + } + + { + new C(this) {}; + new C(this); + } +} diff -r c904bbdc5ec1 -r 952a476681b2 langtools/test/tools/javac/generics/diamond/neg/T8078473.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/diamond/neg/T8078473.out Mon Apr 27 17:36:20 2015 +0530 @@ -0,0 +1,3 @@ +T8078473.java:15:14: compiler.warn.diamond.redundant.args.1: T8078473.C, T8078473.C +T8078473.java:16:14: compiler.warn.diamond.redundant.args.1: T8078473.C, T8078473.C +2 warnings diff -r c904bbdc5ec1 -r 952a476681b2 langtools/test/tools/javac/generics/diamond/neg/T8078473_2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/diamond/neg/T8078473_2.java Mon Apr 27 17:36:20 2015 +0530 @@ -0,0 +1,20 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8078473 + * @summary javac diamond finder crashes when used to build java.base module + * @compile/ref=T8078473_2.out T8078473_2.java -XDrawDiagnostics -XDfind=diamond + */ + +package java.util.stream; + +class T8078473_2 { + + static class C { + C(T8078473_2 p) {} + } + + { + new C(this) {}; + new C(this); + } +} diff -r c904bbdc5ec1 -r 952a476681b2 langtools/test/tools/javac/generics/diamond/neg/T8078473_2.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/diamond/neg/T8078473_2.out Mon Apr 27 17:36:20 2015 +0530 @@ -0,0 +1,3 @@ +T8078473_2.java:17:13: compiler.warn.diamond.redundant.args.1: java.util.stream.T8078473_2.C, java.util.stream.T8078473_2.C +T8078473_2.java:18:13: compiler.warn.diamond.redundant.args.1: java.util.stream.T8078473_2.C, java.util.stream.T8078473_2.C +2 warnings