New J2K: ArrayType and PrimitiveType
This commit is contained in:
@@ -219,8 +219,17 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun PsiType.toJK(): JKType {
|
fun PsiType.toJK(): JKType {
|
||||||
val ref = JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference((this as PsiClassType).resolve() ?: TODO())) //TODO support other types
|
return when (this) {
|
||||||
return JKClassTypeImpl(ref, parameters.map { it.toJK() })
|
is PsiClassType -> JKClassTypeImpl(resolve()!!.convertClassReference(), parameters.map { it.toJK() })
|
||||||
|
is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK())
|
||||||
|
is PsiPrimitiveType -> when (presentableText) {
|
||||||
|
"int" -> JKJavaPrimitiveTypeImpl.INT
|
||||||
|
"byte" -> JKJavaPrimitiveTypeImpl.BYTE
|
||||||
|
"boolean" -> JKJavaPrimitiveTypeImpl.BOOLEAN
|
||||||
|
else -> throw Exception("Invalid PSI")
|
||||||
|
}
|
||||||
|
else -> throw Exception("Invalid PSI")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ private class DebugTreePrinter : JKVisitorVoid {
|
|||||||
printer.indented {
|
printer.indented {
|
||||||
javaMethod.block?.accept(this, null)
|
javaMethod.block?.accept(this, null)
|
||||||
javaMethod.modifierList.accept(this, null)
|
javaMethod.modifierList.accept(this, null)
|
||||||
|
javaMethod.valueArguments.forEach { it.accept(this, null) }
|
||||||
}
|
}
|
||||||
printer.println("]")
|
printer.println("]")
|
||||||
}
|
}
|
||||||
@@ -94,6 +95,15 @@ private class DebugTreePrinter : JKVisitorVoid {
|
|||||||
}
|
}
|
||||||
printer.println("\"")
|
printer.println("\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitType(type: JKType) {
|
||||||
|
printer.println(type.classNameWithoutJK(), " \"")
|
||||||
|
printer.indented {
|
||||||
|
if(type is JKClassType)
|
||||||
|
printer.println(type.classReference.target.name.name)
|
||||||
|
}
|
||||||
|
printer.println("\"")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Any.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK")
|
private fun Any.classNameWithoutJK(): String = this.javaClass.simpleName.removePrefix("JK")
|
||||||
|
|||||||
@@ -165,8 +165,7 @@ sealed class JKJavaPrimitiveTypeImpl(override val name: String) : JKJavaPrimitiv
|
|||||||
object INT : JKJavaPrimitiveTypeImpl("int")
|
object INT : JKJavaPrimitiveTypeImpl("int")
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaArrayTypeImpl(override val type: JKType, override val dimensionCount: Int) : JKJavaArrayType, JKElementBase() {
|
class JKJavaArrayTypeImpl(override val type: JKType) : JKJavaArrayType, JKElementBase() {
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaArrayType(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaArrayType(this, data)
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ interface JKJavaPrimitiveType : JKType {
|
|||||||
|
|
||||||
interface JKJavaArrayType : JKType {
|
interface JKJavaArrayType : JKType {
|
||||||
val type: JKType
|
val type: JKType
|
||||||
val dimensionCount : Int
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaStringLiteralExpression : JKLiteralExpression {
|
interface JKJavaStringLiteralExpression : JKLiteralExpression {
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ package p;
|
|||||||
public class Some {
|
public class Some {
|
||||||
public String test=""+"a";
|
public String test=""+"a";
|
||||||
|
|
||||||
public static void main(String args) {
|
public static void main(String[][][] args, int[] b) {
|
||||||
System.out.println("Test");
|
System.out.println("Test");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user