diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 64340ceb16a..6ca20a702a8 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -796,6 +796,13 @@ public class ExpressionCodegen extends JetVisitor { } if (type instanceof PsiClassType) { PsiClass psiClass = ((PsiClassType) type).resolve(); + if (psiClass instanceof PsiTypeParameter) { + final PsiClassType[] extendsListTypes = psiClass.getExtendsListTypes(); + if (extendsListTypes.length > 0) { + throw new UnsupportedOperationException("should return common supertype"); + } + return OBJECT_TYPE; + } if (psiClass == null) { throw new UnsupportedOperationException("unresolved PsiClassType: " + type); } diff --git a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 2414093a025..71c516ba0c2 100644 --- a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -3,7 +3,6 @@ package org.jetbrains.jet.codegen; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import jet.typeinfo.TypeInfo; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -33,7 +32,11 @@ public class JetTypeMapper { } static String jvmName(PsiClass psiClass) { - return psiClass.getQualifiedName().replace(".", "/"); + final String qName = psiClass.getQualifiedName(); + if (qName == null) { + throw new UnsupportedOperationException("can't evaluate JVM name for anonymous class " + psiClass); + } + return qName.replace(".", "/"); } public String jvmName(ClassDescriptor jetClass, OwnerKind kind) { diff --git a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java index 675ec2ee193..ef29499407c 100644 --- a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java @@ -385,4 +385,12 @@ public class NamespaceGenTest extends CodegenTestCase { assertTrue(result.contains(10)); assertFalse(result.contains(11)); } + + public void testSubstituteJavaMethodTypeParameters() throws Exception { + loadText("import java.util.*; fun foo(l: ArrayList) { l.add(10) }"); + final Method main = generateFunction(); + final ArrayList l = new ArrayList(); + main.invoke(null, l); + assertEquals(10, l.get(0).intValue()); + } }