diff --git a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java index 7f99693f1e1..340eb09240b 100644 --- a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java @@ -43,8 +43,27 @@ public class TypeVisitor extends PsiTypeVisitor { @Override public Type visitClassType(PsiClassType classType) { + String classTypeName = getClassTypeName(classType); + + if (classType instanceof PsiClassReferenceType) { // TODO: simplify + final PsiJavaCodeReferenceElement reference = ((PsiClassReferenceType) classType).getReference(); + PsiElement resolveClass = reference.resolve(); + if (resolveClass != null && resolveClass instanceof PsiClass) { + final PsiClass innerClass = (PsiClass) resolveClass; + PsiClass outerClass = innerClass.getContainingClass(); + if (outerClass != null) { + String result = new IdentifierImpl(innerClass.getName()).toKotlin(); + while (outerClass != null) { + result = new IdentifierImpl(outerClass.getName()).toKotlin() + "." + result; + outerClass = outerClass.getContainingClass(); + } + classTypeName = result; + } + } + } + myResult = new ClassType( - new IdentifierImpl(getClassTypeName(classType)), + new IdentifierImpl(classTypeName), typesToTypeList(classType.getParameters()) ); return super.visitClassType(classType); diff --git a/testData/ast/newClassExpression/file/newInnerClass.jav b/testData/ast/newClassExpression/file/newInnerClass.jav index a7343d1b5a4..1f4cdf9f589 100644 --- a/testData/ast/newClassExpression/file/newInnerClass.jav +++ b/testData/ast/newClassExpression/file/newInnerClass.jav @@ -1,3 +1,5 @@ +package org.test; + class OuterClass { class InnerClass { } diff --git a/testData/ast/newClassExpression/file/newInnerClass.kt b/testData/ast/newClassExpression/file/newInnerClass.kt index 2c49f35b125..497bc0514cd 100644 --- a/testData/ast/newClassExpression/file/newInnerClass.kt +++ b/testData/ast/newClassExpression/file/newInnerClass.kt @@ -1,3 +1,4 @@ +namespace org.test { open class OuterClass() { open class InnerClass() { } @@ -5,6 +6,7 @@ open class InnerClass() { open class User() { open fun main() : Unit { var outerObject : OuterClass? = OuterClass() -var innerObject : InnerClass? = outerObject?.InnerClass() +var innerObject : OuterClass.InnerClass? = outerObject?.InnerClass() +} } } \ No newline at end of file diff --git a/testData/ast/newClassExpression/file/newStaticInnerClass.kt b/testData/ast/newClassExpression/file/newStaticInnerClass.kt index e7f898003c3..8adc33c21a5 100644 --- a/testData/ast/newClassExpression/file/newStaticInnerClass.kt +++ b/testData/ast/newClassExpression/file/newStaticInnerClass.kt @@ -7,7 +7,7 @@ open class Bar() { } open class User() { open fun main() : Unit { -var boo : Bar? = Foo.Bar() +var boo : Foo.Bar? = Foo.Bar() } } } \ No newline at end of file