diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 7217beb58a5..26b45bb9f5f 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -731,15 +731,21 @@ public class ExpressionCodegen extends JetVisitor { } } else if (descriptor instanceof ClassDescriptor) { - final JetClassObject classObject = ((JetClass) declaration).getClassObject(); - if (classObject == null) { - throw new UnsupportedOperationException("trying to reference a class which doesn't have a class object"); + if(declaration instanceof JetClass) { + final JetClassObject classObject = ((JetClass) declaration).getClassObject(); + if (classObject == null) { + throw new UnsupportedOperationException("trying to reference a class which doesn't have a class object"); + } + final String type = typeMapper.jvmName(classObject); + return StackValue.field(Type.getObjectType(type), + typeMapper.jvmName((ClassDescriptor) descriptor, OwnerKind.IMPLEMENTATION), + "$classobj", + true); + } + else { + // todo ? + return StackValue.none(); } - final String type = typeMapper.jvmName(classObject); - return StackValue.field(Type.getObjectType(type), - typeMapper.jvmName((ClassDescriptor) descriptor, OwnerKind.IMPLEMENTATION), - "$classobj", - true); } else if (descriptor instanceof TypeParameterDescriptor) { loadTypeParameterTypeInfo((TypeParameterDescriptor) descriptor); diff --git a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java index ddb3a463377..5713d75b728 100644 --- a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -24,6 +24,7 @@ public class JetTypeMapper { public static final Type TYPE_OBJECT = Type.getObjectType("java/lang/Object"); public static final Type TYPE_TYPEINFO = Type.getType(TypeInfo.class); public static final Type TYPE_JET_OBJECT = Type.getType(JetObject.class); + public static final Type TYPE_CLASS = Type.getType(Class.class); private final JetStandardLibrary standardLibrary; private final BindingContext bindingContext; @@ -61,6 +62,11 @@ public class JetTypeMapper { } static Type psiTypeToAsm(PsiType type) { + if(type instanceof PsiArrayType) { + PsiArrayType psiArrayType = (PsiArrayType) type; + return Type.getType("[" + psiTypeToAsm(psiArrayType.getComponentType()).getDescriptor()); + } + if (type instanceof PsiPrimitiveType) { if (type == PsiType.VOID) { return Type.VOID_TYPE; diff --git a/idea/testData/codegen/regressions/kt243.jet b/idea/testData/codegen/regressions/kt243.jet new file mode 100644 index 00000000000..1e96f08fe50 --- /dev/null +++ b/idea/testData/codegen/regressions/kt243.jet @@ -0,0 +1,8 @@ +fun box() : String { + val t = java.lang.String.copyValueOf(java.lang.String("s").toCharArray()) + val i = java.lang.Integer.MAX_VALUE + val j = java.lang.Integer.valueOf(15) + val s = java.lang.String.valueOf(1) + val l = java.util.Collections.emptyList() + return "OK" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/codegen/ArrayGetTestCase.java b/idea/tests/org/jetbrains/jet/codegen/ArrayGenTestCase.java similarity index 71% rename from idea/tests/org/jetbrains/jet/codegen/ArrayGetTestCase.java rename to idea/tests/org/jetbrains/jet/codegen/ArrayGenTestCase.java index 689dfc6294b..36153e29568 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ArrayGetTestCase.java +++ b/idea/tests/org/jetbrains/jet/codegen/ArrayGenTestCase.java @@ -1,6 +1,6 @@ package org.jetbrains.jet.codegen; -public class ArrayGetTestCase extends CodegenTestCase { +public class ArrayGenTestCase extends CodegenTestCase { public void testKt238 () throws Exception { blackBoxFile("regressions/kt238.jet"); } diff --git a/idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java b/idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java index adc0bd15095..41a81f3713e 100644 --- a/idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java @@ -266,4 +266,8 @@ public class PrimitiveTypesTest extends CodegenTestCase { public void testKt239 () throws Exception { blackBoxFile("regressions/kt242.jet"); } + + public void testKt243 () throws Exception { + blackBoxFile("regressions/kt243.jet"); + } }