KT-535 no need in outer type info for class object

This commit is contained in:
Alex Tkachman
2011-11-18 13:38:38 +02:00
parent b054ccefdb
commit 50edc9750b
4 changed files with 28 additions and 2 deletions
@@ -101,7 +101,7 @@ public class CodegenUtil {
}
ClassDescriptor outerClassDescriptor = getOuterClassDescriptor(type.getConstructor().getDeclarationDescriptor());
if(outerClassDescriptor == null)
if(outerClassDescriptor == null || isClassObject(type.getConstructor().getDeclarationDescriptor()))
return false;
return hasTypeInfoField(outerClassDescriptor.getDefaultType());
@@ -869,7 +869,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
v.aconst(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION));
v.iconst(0);
ClassDescriptor outerClassDescriptor = CodegenUtil.getOuterClassDescriptor(descriptor);
if(outerClassDescriptor == null) {
if(outerClassDescriptor == null || CodegenUtil.isClassObject(descriptor)) {
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/typeinfo/TypeInfo;");
}
else {
@@ -0,0 +1,21 @@
class Identifier<T>(t : T?, myHasDollar : Boolean) {
private val myT : T?
public fun getName() : T? { return myT }
class object {
open public fun init<T>(name : T?) : Identifier<T> {
val __ = Identifier<T>(name, false)
return __
}
}
{
$myT = t
}
}
fun box() : String {
var i3 : Identifier<String?>? = Identifier.init<String?>("name")
System.out?.println(i3?.getName())
return "OK"
}
@@ -2,6 +2,7 @@ package org.jetbrains.jet.codegen;
/**
* @author yole
* @author alex.tkachman
*/
public class ObjectGenTest extends CodegenTestCase {
public void testSimpleObject() throws Exception {
@@ -16,4 +17,8 @@ public class ObjectGenTest extends CodegenTestCase {
public void testMethodOnObject() throws Exception {
blackBoxFile("objects/methodOnObject.jet");
}
public void testKt535() throws Exception {
blackBoxFile("regressions/kt535.jet");
}
}