types for inner classes supported
This commit is contained in:
@@ -43,8 +43,27 @@ public class TypeVisitor extends PsiTypeVisitor<Type> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Type visitClassType(PsiClassType classType) {
|
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(
|
myResult = new ClassType(
|
||||||
new IdentifierImpl(getClassTypeName(classType)),
|
new IdentifierImpl(classTypeName),
|
||||||
typesToTypeList(classType.getParameters())
|
typesToTypeList(classType.getParameters())
|
||||||
);
|
);
|
||||||
return super.visitClassType(classType);
|
return super.visitClassType(classType);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
package org.test;
|
||||||
|
|
||||||
class OuterClass {
|
class OuterClass {
|
||||||
class InnerClass {
|
class InnerClass {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
namespace org.test {
|
||||||
open class OuterClass() {
|
open class OuterClass() {
|
||||||
open class InnerClass() {
|
open class InnerClass() {
|
||||||
}
|
}
|
||||||
@@ -5,6 +6,7 @@ open class InnerClass() {
|
|||||||
open class User() {
|
open class User() {
|
||||||
open fun main() : Unit {
|
open fun main() : Unit {
|
||||||
var outerObject : OuterClass? = OuterClass()
|
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 class User() {
|
||||||
open fun main() : Unit {
|
open fun main() : Unit {
|
||||||
var boo : Bar? = Foo.Bar()
|
var boo : Foo.Bar? = Foo.Bar()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user