types for inner classes supported

This commit is contained in:
Sergey Ignatov
2011-11-17 17:10:14 +04:00
parent aa976315d9
commit 82fbc98757
4 changed files with 26 additions and 3 deletions
@@ -43,8 +43,27 @@ public class TypeVisitor extends PsiTypeVisitor<Type> {
@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);
@@ -1,3 +1,5 @@
package org.test;
class OuterClass {
class InnerClass {
}
@@ -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()
}
}
}
@@ -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()
}
}
}