提交 a43c0c19 编写于 作者: S Stepan Koltsov

assert builtins do not reference java.* classes

上级 3e9ef572
...@@ -335,6 +335,7 @@ public class JetTypeMapper { ...@@ -335,6 +335,7 @@ public class JetTypeMapper {
if (signatureVisitor != null) { if (signatureVisitor != null) {
visitAsmType(signatureVisitor, asmType, true); visitAsmType(signatureVisitor, asmType, true);
} }
checkValidType(asmType);
return asmType; return asmType;
} }
...@@ -349,18 +350,22 @@ public class JetTypeMapper { ...@@ -349,18 +350,22 @@ public class JetTypeMapper {
mapType(memberType, signatureVisitor, MapTypeMode.TYPE_PARAMETER); mapType(memberType, signatureVisitor, MapTypeMode.TYPE_PARAMETER);
signatureVisitor.writeArrayEnd(); signatureVisitor.writeArrayEnd();
} }
Type r;
if (!isGenericsArray(jetType)) { if (!isGenericsArray(jetType)) {
return Type.getType("[" + boxType(mapType(memberType, kind)).getDescriptor()); r = Type.getType("[" + boxType(mapType(memberType, kind)).getDescriptor());
} else { } else {
return ARRAY_GENERIC_TYPE; r = ARRAY_GENERIC_TYPE;
} }
checkValidType(r);
return r;
} }
if (JetStandardClasses.getAny().equals(descriptor)) { if (JetStandardClasses.getAny().equals(descriptor)) {
if (signatureVisitor != null) { if (signatureVisitor != null) {
visitAsmType(signatureVisitor, TYPE_OBJECT, jetType.isNullable()); visitAsmType(signatureVisitor, TYPE_OBJECT, jetType.isNullable());
} }
checkValidType(TYPE_OBJECT);
return TYPE_OBJECT; return TYPE_OBJECT;
} }
...@@ -393,6 +398,7 @@ public class JetTypeMapper { ...@@ -393,6 +398,7 @@ public class JetTypeMapper {
signatureVisitor.writeClassEnd(); signatureVisitor.writeClassEnd();
} }
checkValidType(asmType);
return asmType; return asmType;
} }
...@@ -403,6 +409,7 @@ public class JetTypeMapper { ...@@ -403,6 +409,7 @@ public class JetTypeMapper {
TypeParameterDescriptor typeParameterDescriptor = (TypeParameterDescriptor) jetType.getConstructor().getDeclarationDescriptor(); TypeParameterDescriptor typeParameterDescriptor = (TypeParameterDescriptor) jetType.getConstructor().getDeclarationDescriptor();
signatureVisitor.writeTypeVariable(typeParameterDescriptor.getName(), jetType.isNullable(), type); signatureVisitor.writeTypeVariable(typeParameterDescriptor.getName(), jetType.isNullable(), type);
} }
checkValidType(type);
return type; return type;
} }
...@@ -415,11 +422,13 @@ public class JetTypeMapper { ...@@ -415,11 +422,13 @@ public class JetTypeMapper {
if (signatureVisitor != null) { if (signatureVisitor != null) {
visitAsmType(signatureVisitor, boxed, jetType.isNullable()); visitAsmType(signatureVisitor, boxed, jetType.isNullable());
} }
checkValidType(boxed);
return boxed; return boxed;
} else { } else {
if (signatureVisitor != null) { if (signatureVisitor != null) {
visitAsmType(signatureVisitor, asmType, jetType.isNullable()); visitAsmType(signatureVisitor, asmType, jetType.isNullable());
} }
checkValidType(asmType);
return asmType; return asmType;
} }
} }
...@@ -428,6 +437,18 @@ public class JetTypeMapper { ...@@ -428,6 +437,18 @@ public class JetTypeMapper {
visitor.writeAsmType(asmType, nullable); visitor.writeAsmType(asmType, nullable);
} }
private void checkValidType(@NotNull Type type) {
if (compilerSpecialMode == CompilerSpecialMode.BUILTINS) {
String descriptor = type.getDescriptor();
if (descriptor.equals("Ljava/lang/Object;")) {
return;
}
else if (descriptor.startsWith("Ljava/")) {
throw new IllegalStateException("builtins must not reference java.* classes: " + descriptor);
}
}
}
public static Type unboxType(final Type type) { public static Type unboxType(final Type type) {
JvmPrimitiveType jvmPrimitiveType = JvmPrimitiveType.getByWrapperAsmType(type); JvmPrimitiveType jvmPrimitiveType = JvmPrimitiveType.getByWrapperAsmType(type);
if (jvmPrimitiveType != null) { if (jvmPrimitiveType != null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册