types for inner classes supported
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user