Merge
This commit is contained in:
commit
ff7f1b9999
langtools
@ -588,10 +588,21 @@ public class Types {
|
||||
case BYTE: case CHAR: case SHORT: case INT: case LONG: case FLOAT:
|
||||
case DOUBLE: case BOOLEAN: case VOID: case BOT: case NONE:
|
||||
return t.tag == s.tag;
|
||||
case TYPEVAR:
|
||||
return s.isSuperBound()
|
||||
&& !s.isExtendsBound()
|
||||
&& visit(t, upperBound(s));
|
||||
case TYPEVAR: {
|
||||
if (s.tag == TYPEVAR) {
|
||||
//type-substitution does not preserve type-var types
|
||||
//check that type var symbols and bounds are indeed the same
|
||||
return t.tsym == s.tsym &&
|
||||
visit(t.getUpperBound(), s.getUpperBound());
|
||||
}
|
||||
else {
|
||||
//special case for s == ? super X, where upper(s) = u
|
||||
//check that u == t, where u has been set by Type.withTypeVar
|
||||
return s.isSuperBound() &&
|
||||
!s.isExtendsBound() &&
|
||||
visit(t, upperBound(s));
|
||||
}
|
||||
}
|
||||
default:
|
||||
throw new AssertionError("isSameType " + t.tag);
|
||||
}
|
||||
@ -1850,13 +1861,16 @@ public class Types {
|
||||
|
||||
/**
|
||||
* Same as {@link #setBounds(Type.TypeVar,List,Type)}, except that
|
||||
* third parameter is computed directly. Note that this test
|
||||
* might cause a symbol completion. Hence, this version of
|
||||
* third parameter is computed directly, as follows: if all
|
||||
* all bounds are interface types, the computed supertype is Object,
|
||||
* otherwise the supertype is simply left null (in this case, the supertype
|
||||
* is assumed to be the head of the bound list passed as second argument).
|
||||
* Note that this check might cause a symbol completion. Hence, this version of
|
||||
* setBounds may not be called during a classfile read.
|
||||
*/
|
||||
public void setBounds(TypeVar t, List<Type> bounds) {
|
||||
Type supertype = (bounds.head.tsym.flags() & INTERFACE) != 0 ?
|
||||
supertype(bounds.head) : null;
|
||||
syms.objectType : null;
|
||||
setBounds(t, bounds, supertype);
|
||||
t.rank_field = -1;
|
||||
}
|
||||
|
@ -1472,7 +1472,7 @@ public class Attr extends JCTree.Visitor {
|
||||
// Attribute clazz expression and store
|
||||
// symbol + type back into the attributed tree.
|
||||
Type clazztype = attribType(clazz, env);
|
||||
Pair<Scope,Scope> mapping = getSyntheticScopeMapping((ClassType)clazztype);
|
||||
Pair<Scope,Scope> mapping = getSyntheticScopeMapping(clazztype);
|
||||
if (!TreeInfo.isDiamond(tree)) {
|
||||
clazztype = chk.checkClassType(
|
||||
tree.clazz.pos(), clazztype, true);
|
||||
@ -1640,9 +1640,10 @@ public class Attr extends JCTree.Visitor {
|
||||
List<Type> argtypes,
|
||||
List<Type> typeargtypes,
|
||||
boolean reportErrors) {
|
||||
if (clazztype.isErroneous()) {
|
||||
//if the type of the instance creation expression is erroneous
|
||||
//return the erroneous type itself
|
||||
if (clazztype.isErroneous() || mapping == erroneousMapping) {
|
||||
//if the type of the instance creation expression is erroneous,
|
||||
//or something prevented us to form a valid mapping, return the
|
||||
//(possibly erroneous) type unchanged
|
||||
return clazztype;
|
||||
}
|
||||
else if (clazztype.isInterface()) {
|
||||
@ -1740,7 +1741,10 @@ public class Attr extends JCTree.Visitor {
|
||||
* inference. The inferred return type of the synthetic constructor IS
|
||||
* the inferred type for the diamond operator.
|
||||
*/
|
||||
private Pair<Scope, Scope> getSyntheticScopeMapping(ClassType ctype) {
|
||||
private Pair<Scope, Scope> getSyntheticScopeMapping(Type ctype) {
|
||||
if (ctype.tag != CLASS) {
|
||||
return erroneousMapping;
|
||||
}
|
||||
Pair<Scope, Scope> mapping =
|
||||
new Pair<Scope, Scope>(ctype.tsym.members(), new Scope(ctype.tsym));
|
||||
List<Type> typevars = ctype.tsym.type.getTypeArguments();
|
||||
@ -1763,6 +1767,8 @@ public class Attr extends JCTree.Visitor {
|
||||
return mapping;
|
||||
}
|
||||
|
||||
private final Pair<Scope,Scope> erroneousMapping = new Pair<Scope,Scope>(null, null);
|
||||
|
||||
/** Make an attributed null check tree.
|
||||
*/
|
||||
public JCExpression makeNullCheck(JCExpression arg) {
|
||||
|
@ -886,6 +886,7 @@ public class Check {
|
||||
void checkRaw(JCTree tree, Env<AttrContext> env) {
|
||||
if (lint.isEnabled(Lint.LintCategory.RAW) &&
|
||||
tree.type.tag == CLASS &&
|
||||
!TreeInfo.isDiamond(tree) &&
|
||||
!env.enclClass.name.isEmpty() && //anonymous or intersection
|
||||
tree.type.isRaw()) {
|
||||
log.warning(tree.pos(), "raw.class.use", tree.type, tree.type.tsym.type);
|
||||
@ -915,7 +916,7 @@ public class Check {
|
||||
List<Type> actuals = tree.type.allparams();
|
||||
List<JCExpression> args = tree.arguments;
|
||||
List<Type> forms = tree.type.tsym.type.getTypeArguments();
|
||||
ListBuffer<TypeVar> tvars_buf = new ListBuffer<TypeVar>();
|
||||
ListBuffer<Type> tvars_buf = new ListBuffer<Type>();
|
||||
|
||||
// For matching pairs of actual argument types `a' and
|
||||
// formal type parameters with declared bound `b' ...
|
||||
@ -946,12 +947,15 @@ public class Check {
|
||||
}
|
||||
|
||||
args = tree.arguments;
|
||||
List<TypeVar> tvars = tvars_buf.toList();
|
||||
List<Type> tvars = tvars_buf.toList();
|
||||
|
||||
while (args.nonEmpty() && tvars.nonEmpty()) {
|
||||
Type actual = types.subst(args.head.type,
|
||||
tree.type.tsym.type.getTypeArguments(),
|
||||
tvars_buf.toList());
|
||||
checkExtends(args.head.pos(),
|
||||
args.head.type,
|
||||
tvars.head);
|
||||
actual,
|
||||
(TypeVar)tvars.head);
|
||||
args = args.tail;
|
||||
tvars = tvars.tail;
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ ifeq ($(OSNAME), Windows_NT)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
EXE_SUFFIX=.exe
|
||||
endif
|
||||
|
||||
# Root of this test area (important to use full paths in some places)
|
||||
@ -105,12 +106,13 @@ endif
|
||||
# PRODUCT_HOME is a JPRT variable pointing to a directory containing the output from
|
||||
# make/Makefile
|
||||
# For langtools, this is a directory containing build and dist
|
||||
# For a control build, this is build/$(PRODUCT)-$(ARCH)/j2sdk-image
|
||||
# For a control build, this is build/$(PRODUCT)-$(ARCH)/XYZ-image
|
||||
# (i.e, j2sdk-image or jdk-module-image)
|
||||
ifdef PRODUCT_HOME
|
||||
ifeq ($(shell [ -r $(PRODUCT_HOME)/dist/lib/classes.jar ]; echo $$?),0)
|
||||
TESTBOOTCLASSPATH = $(PRODUCT_HOME)/dist/lib/classes.jar
|
||||
endif
|
||||
ifeq ($(shell [ -r $(PRODUCT_HOME)/lib/tools.jar ]; echo $$?),0)
|
||||
ifeq ($(shell [ -r $(PRODUCT_HOME)/bin/javac$(EXE_SUFFIX) ]; echo $$?),0)
|
||||
TESTJAVA = $(PRODUCT_HOME)
|
||||
endif
|
||||
endif
|
||||
@ -150,6 +152,16 @@ ifdef JCK_GROUP_SIZE
|
||||
### -jtoptions:-Ejck.env.runtime.testCompile.groupMode.groupSize=$(JCK_GROUP_SIZE)
|
||||
endif
|
||||
|
||||
# Timeouts -- by default, increase test timeouts when running on JPRT
|
||||
ifdef JPRT_JOB_ID
|
||||
ifndef JTREG_TIMEOUT_FACTOR
|
||||
JTREG_TIMEOUT_FACTOR = 3
|
||||
endif
|
||||
endif
|
||||
ifdef JTREG_TIMEOUT_FACTOR
|
||||
JTREG_OPTIONS += -timeoutFactor:$(JTREG_TIMEOUT_FACTOR)
|
||||
endif
|
||||
|
||||
# Assertions: some tests show failures when assertions are enabled.
|
||||
# Since javac is typically loaded via the bootclassloader (either via TESTJAVA
|
||||
# or TESTBOOTCLASSPATH), you may need -esa to enable assertions in javac.
|
||||
|
29
langtools/test/tools/javac/6948381/T6948381.java
Normal file
29
langtools/test/tools/javac/6948381/T6948381.java
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 6948381
|
||||
* @summary javac Null Pointer Exception in Types.makeCompoundType
|
||||
* @compile npe/A.java npe/B.java
|
||||
*/
|
28
langtools/test/tools/javac/6948381/npe/A.java
Normal file
28
langtools/test/tools/javac/6948381/npe/A.java
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2010 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
package npe;
|
||||
|
||||
import npe.B.*;
|
||||
|
||||
public interface A {}
|
26
langtools/test/tools/javac/6948381/npe/B.java
Normal file
26
langtools/test/tools/javac/6948381/npe/B.java
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
package npe;
|
||||
|
||||
public interface B<T extends A & java.io.Serializable> {}
|
21
langtools/test/tools/javac/generics/6946618/T6946618a.java
Normal file
21
langtools/test/tools/javac/generics/6946618/T6946618a.java
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 6946618
|
||||
* @summary sqe test fails: javac/generics/NewOnTypeParm in pit jdk7 b91 in all platforms.
|
||||
* @author mcimadamore
|
||||
* @compile/fail/ref=T6946618a.out -XDrawDiagnostics T6946618a.java
|
||||
*/
|
||||
|
||||
class T6946618a {
|
||||
static class C<T> {
|
||||
T makeT() {
|
||||
return new T(); //error
|
||||
}
|
||||
}
|
||||
|
||||
static class D<S> {
|
||||
C<S> makeC() {
|
||||
return new C<S>(); //ok
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
T6946618a.java:12:20: compiler.err.type.found.req: (compiler.misc.type.parameter: T), (compiler.misc.type.req.class)
|
||||
1 error
|
21
langtools/test/tools/javac/generics/6946618/T6946618b.java
Normal file
21
langtools/test/tools/javac/generics/6946618/T6946618b.java
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 6946618
|
||||
* @summary sqe test fails: javac/generics/NewOnTypeParm in pit jdk7 b91 in all platforms.
|
||||
* @author mcimadamore
|
||||
* @compile/fail/ref=T6946618b.out -XDrawDiagnostics T6946618b.java
|
||||
*/
|
||||
|
||||
class T6946618b {
|
||||
static class C<T> {
|
||||
T makeT() {
|
||||
return new T<>(); //error
|
||||
}
|
||||
}
|
||||
|
||||
static class D<S> {
|
||||
C<S> makeC() {
|
||||
return new C<>(); //ok
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
T6946618b.java:12:20: compiler.err.type.found.req: (compiler.misc.type.parameter: T), (compiler.misc.type.req.class)
|
||||
1 error
|
17
langtools/test/tools/javac/generics/6946618/T6946618c.java
Normal file
17
langtools/test/tools/javac/generics/6946618/T6946618c.java
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 6946618
|
||||
* @summary sqe test fails: javac/generics/NewOnTypeParm in pit jdk7 b91 in all platforms.
|
||||
* @author mcimadamore
|
||||
* @compile/fail/ref=T6946618c.out -XDrawDiagnostics T6946618c.java
|
||||
*/
|
||||
|
||||
class T6946618c {
|
||||
static class C<T> { }
|
||||
|
||||
void test() {
|
||||
C<?> c1 = new C<? extends String>();
|
||||
C<?> c2 = new C<? super String>();
|
||||
C<?> c3 = new C<?>();
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
T6946618c.java:13:24: compiler.err.type.found.req: ? extends java.lang.String, class or interface without bounds
|
||||
T6946618c.java:14:24: compiler.err.type.found.req: ? super java.lang.String, class or interface without bounds
|
||||
T6946618c.java:15:24: compiler.err.type.found.req: ?, class or interface without bounds
|
||||
3 errors
|
36
langtools/test/tools/javac/generics/diamond/T6951833.java
Normal file
36
langtools/test/tools/javac/generics/diamond/T6951833.java
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2010 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6951833
|
||||
*
|
||||
* @summary latest diamond implementation generates spurious raw type warnings
|
||||
* @author mcimadamore
|
||||
* @compile -Xlint:rawtypes -Werror T6951833.java
|
||||
*
|
||||
*/
|
||||
|
||||
class T6951833<X> {
|
||||
T6951833<String> bug = new T6951833<>();
|
||||
}
|
40
langtools/test/tools/javac/generics/typevars/T6880344.java
Normal file
40
langtools/test/tools/javac/generics/typevars/T6880344.java
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6880344
|
||||
* @summary Recursive type parameters do not compile
|
||||
* @author mcimadamore
|
||||
* @compile T6880344.java
|
||||
*/
|
||||
|
||||
class T6880344 {
|
||||
static class A<X1 extends G<X1>> {
|
||||
public A<N<X1>> xyz;
|
||||
}
|
||||
|
||||
static class N<X2 extends G<X2>> implements G<N<X2>> { }
|
||||
|
||||
interface G<X3 extends G<X3>> { }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user