8132535: Compiler fails with diamond anonymous class creation with intersection bound of enclosing class

Reviewed-by: mcimadamore
This commit is contained in:
Srikanth Adayapalam 2015-10-01 19:47:06 +05:30
parent 5c4dc85619
commit 0ea96ddfe4
8 changed files with 90 additions and 3 deletions

View File

@ -808,7 +808,7 @@ public class Check {
*/
List<Type> checkDiamondDenotable(ClassType t) {
ListBuffer<Type> buf = new ListBuffer<>();
for (Type arg : t.getTypeArguments()) {
for (Type arg : t.allparams()) {
if (!diamondTypeChecker.visit(arg, null)) {
buf.append(arg);
}
@ -831,7 +831,7 @@ public class Check {
if (t.isCompound()) {
return false;
}
for (Type targ : t.getTypeArguments()) {
for (Type targ : t.allparams()) {
if (!visit(targ, s)) {
return false;
}
@ -842,13 +842,16 @@ public class Check {
@Override
public Boolean visitTypeVar(TypeVar t, Void s) {
/* Any type variable mentioned in the inferred type must have been declared as a type parameter
(i.e cannot have been produced by capture conversion (5.1.10) or by inference (18.4)
(i.e cannot have been produced by inference (18.4))
*/
return t.tsym.owner.type.getTypeArguments().contains(t);
}
@Override
public Boolean visitCapturedType(CapturedType t, Void s) {
/* Any type variable mentioned in the inferred type must have been declared as a type parameter
(i.e cannot have been produced by capture conversion (5.1.10))
*/
return false;
}

View File

@ -0,0 +1,15 @@
/*
* @test /nodynamiccopyright/
* @bug 8132535
* @summary Compiler fails with diamond anonymous class creation with intersection bound of enclosing class.
* @compile/fail/ref=Neg21.out Neg21.java -XDrawDiagnostics
*/
public class Neg21 <T extends java.io.Serializable & Cloneable> {
class A <X>{}
public void foo(){
new Neg21<>().new A<>(){} ;
}
}

View File

@ -0,0 +1,2 @@
Neg21.java:13:28: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg21.A), (compiler.misc.diamond.invalid.arg: java.lang.Object&java.io.Serializable&java.lang.Cloneable, (compiler.misc.diamond: Neg21.A))
1 error

View File

@ -0,0 +1,21 @@
/*
* @test /nodynamiccopyright/
* @bug 8132535
* @summary Compiler fails with diamond anonymous class creation with intersection bound of enclosing class.
* @compile/fail/ref=Neg22.out Neg22.java -XDrawDiagnostics
*/
public class Neg22 {
class Outer<X extends Runnable & java.io.Serializable> {
class Inner<Y> { }
}
class Box<Z> {
Box(Z z) { }
}
{
new Box<>(new Outer<>().new Inner<>()) { };
}
}

View File

@ -0,0 +1,2 @@
Neg22.java:19:16: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg22.Box), (compiler.misc.diamond.invalid.arg: Neg22.Outer<java.lang.Object&java.io.Serializable&java.lang.Runnable>.Inner<java.lang.Object>, (compiler.misc.diamond: Neg22.Box))
1 error

View File

@ -0,0 +1,12 @@
/*
* @test /nodynamiccopyright/
* @bug 8132535
* @summary Compiler fails with diamond anonymous class creation with intersection bound of enclosing class.
* @compile/fail/ref=Neg23.out Neg23.java -XDrawDiagnostics
*/
public class Neg23 {
{
new pkg.Neg23_01<>().new Inner<>();
}
}

View File

@ -0,0 +1,2 @@
Neg23.java:10:39: compiler.err.not.def.public.cant.access: pkg.Neg23_02, pkg
1 error

View File

@ -0,0 +1,30 @@
/*
* Copyright (c) 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package pkg;
public class Neg23_01<X extends Neg23_02> {
public class Inner<Y> { }
}
class Neg23_02 {}