--- old/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacTypes.java 2017-02-21 17:27:44.390306554 -0800 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/model/JavacTypes.java 2017-02-21 17:27:44.286306558 -0800 @@ -93,22 +93,22 @@ @DefinedBy(Api.LANGUAGE_MODEL) public boolean isSubtype(TypeMirror t1, TypeMirror t2) { - validateTypeNotIn(t1, EXEC_OR_PKG); - validateTypeNotIn(t2, EXEC_OR_PKG); + validateTypeNotIn(t1, EXEC_OR_PKG_OR_MOD); + validateTypeNotIn(t2, EXEC_OR_PKG_OR_MOD); return types.isSubtype((Type) t1, (Type) t2); } @DefinedBy(Api.LANGUAGE_MODEL) public boolean isAssignable(TypeMirror t1, TypeMirror t2) { - validateTypeNotIn(t1, EXEC_OR_PKG); - validateTypeNotIn(t2, EXEC_OR_PKG); + validateTypeNotIn(t1, EXEC_OR_PKG_OR_MOD); + validateTypeNotIn(t2, EXEC_OR_PKG_OR_MOD); return types.isAssignable((Type) t1, (Type) t2); } @DefinedBy(Api.LANGUAGE_MODEL) public boolean contains(TypeMirror t1, TypeMirror t2) { - validateTypeNotIn(t1, EXEC_OR_PKG); - validateTypeNotIn(t2, EXEC_OR_PKG); + validateTypeNotIn(t1, EXEC_OR_PKG_OR_MOD); + validateTypeNotIn(t2, EXEC_OR_PKG_OR_MOD); return types.containsType((Type) t1, (Type) t2); } @@ -119,7 +119,7 @@ @DefinedBy(Api.LANGUAGE_MODEL) public List directSupertypes(TypeMirror t) { - validateTypeNotIn(t, EXEC_OR_PKG); + validateTypeNotIn(t, EXEC_OR_PKG_OR_MOD); Type ty = (Type)t; return types.directSupertypes(ty).stream() .map(Type::stripMetadataIfNeeded) @@ -128,7 +128,8 @@ @DefinedBy(Api.LANGUAGE_MODEL) public TypeMirror erasure(TypeMirror t) { - if (t.getKind() == TypeKind.PACKAGE) + TypeKind kind = t.getKind(); + if (kind == TypeKind.PACKAGE || kind == TypeKind.MODULE) throw new IllegalArgumentException(t.toString()); return types.erasure((Type)t).stripMetadataIfNeeded(); } @@ -150,7 +151,7 @@ @DefinedBy(Api.LANGUAGE_MODEL) public TypeMirror capture(TypeMirror t) { - validateTypeNotIn(t, EXEC_OR_PKG); + validateTypeNotIn(t, EXEC_OR_PKG_OR_MOD); return types.capture((Type)t).stripMetadataIfNeeded(); } @@ -192,6 +193,7 @@ case EXECUTABLE: case WILDCARD: // heh! case PACKAGE: + case MODULE: throw new IllegalArgumentException(componentType.toString()); } return new Type.ArrayType((Type) componentType, syms.arrayClass); @@ -299,8 +301,8 @@ } - private static final Set EXEC_OR_PKG = - EnumSet.of(TypeKind.EXECUTABLE, TypeKind.PACKAGE); + private static final Set EXEC_OR_PKG_OR_MOD = + EnumSet.of(TypeKind.EXECUTABLE, TypeKind.PACKAGE, TypeKind.MODULE); /** * Throws an IllegalArgumentException if a type's kind is one of a set.