New J2K: Addded kt expressions and changed literals logic.

This commit is contained in:
Dimach
2018-01-04 16:05:21 +02:00
committed by Ilya Kirillov
parent fb32783168
commit aeae668f3d
11 changed files with 113 additions and 31 deletions
@@ -108,10 +108,12 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
if (this !is PsiLiteralExpressionImpl) {
throw RuntimeException("Not supported")
}
return when (this.literalElementType) {
JavaTokenType.STRING_LITERAL -> JKJavaStringLiteralExpressionImpl(innerText!!)
return JKJavaLiteralExpressionImpl(innerText!!, when (this.literalElementType) {
JavaTokenType.STRING_LITERAL -> JKLiteralExpression.LiteralType.STRING
JavaTokenType.TRUE_KEYWORD, JavaTokenType.FALSE_KEYWORD -> JKLiteralExpression.LiteralType.BOOLEAN
JavaTokenType.NULL_KEYWORD -> JKLiteralExpression.LiteralType.NULL
else -> throw RuntimeException("Not supported")
}
})
}
fun PsiJavaToken.toJK(): JKOperatorIdentifier = when (tokenType) {
@@ -39,8 +39,9 @@ class JKJavaFieldImpl(override var modifierList: JKModifierList,
}
}
class JKJavaStringLiteralExpressionImpl(override val text: String) : JKJavaStringLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaStringLiteralExpression(this, data)
class JKJavaLiteralExpressionImpl(override val literal: String, override val type: JKLiteralExpression.LiteralType) : JKJavaLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLiteralExpression(this, data)
}
@@ -94,10 +94,6 @@ class JKBlockImpl(override var statements: List<JKStatement>) : JKBlock, JKEleme
}
}
class JKStringLiteralExpressionImpl(override val text: String) : JKStringLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitStringLiteralExpression(this, data)
}
class JKBinaryExpressionImpl(
override var left: JKExpression, override var right: JKExpression?,
override var operator: JKOperatorIdentifier
@@ -57,3 +57,39 @@ class JKKtFunctionImpl(override var returnType: JKTypeIdentifier,
override val valid: Boolean
get() = true
}
sealed class JKKtQualificationIdentifierImpl : JKKtQualificationIdentifier, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtQualificationIdentifier(this, data)
object DOT : JKKtQualificationIdentifierImpl()
object SAFE : JKKtQualificationIdentifierImpl()
}
class JKKtCallExpressionImpl(override val identifier: JKMethodReference,
override val arguments: JKExpressionList) : JKKtMethodCallExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtMethodCallExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
identifier.accept(visitor, data)
arguments.accept(visitor, data)
}
}
class JKKtFieldAccessExpressionImpl(override val identifier: JKFieldReference) : JKKtFieldAccessExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFieldAccessExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
identifier.accept(visitor, data)
}
}
class JKKtLiteralExpressionImpl(override val literal: String, override val type: JKLiteralExpression.LiteralType) : JKKtLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data)
}
sealed class JKKtOperatorIdentifierImpl : JKKtOperatorIdentifier, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtOperatorIdentifier(this, data)
object PLUS : JKKtOperatorIdentifierImpl()
object MINUS : JKKtOperatorIdentifierImpl()
}
+4 -10
View File
@@ -36,21 +36,13 @@ interface JKJavaArrayType : JKType {
val type: JKType
}
interface JKJavaStringLiteralExpression : JKLiteralExpression {
val text: String
}
interface JKJavaOperatorIdentifier : JKOperatorIdentifier
interface JKJavaQualificationIdentifier : JKQualificationIdentifier
interface JKJavaMethodCallExpression : JKMethodCallExpression {
interface JKJavaMethodCallExpression : JKMethodCallExpression
}
interface JKJavaFieldAccessExpression : JKFieldAccessExpression {
}
interface JKJavaFieldAccessExpression : JKFieldAccessExpression
interface JKJavaNewExpression : JKExpression {
val identifier: JKClassReference
@@ -86,3 +78,5 @@ interface JKJavaNewEmptyArray : JKExpression {
interface JKJavaNewArray : JKExpression {
val initializer: List<JKExpression>
}
interface JKJavaLiteralExpression : JKLiteralExpression
@@ -139,7 +139,14 @@ interface JKNameIdentifier : JKIdentifier {
val name: String
}
interface JKLiteralExpression : JKExpression
interface JKLiteralExpression : JKExpression {
val literal: String
val type: LiteralType
enum class LiteralType {
STRING, BOOLEAN, NULL
}
}
interface JKModifierList : JKElement {
val modifiers: List<JKModifier>
+11 -1
View File
@@ -47,4 +47,14 @@ interface JKKtModifier : JKModifier {
ACTUAL, ABSTRACT, ANNOTATION, COMPANION, CONST, CROSSINLINE, DATA, ENUM, EXPECT, EXTERNAL, FINAL, INFIX, INLINE, INNER,
INTERNAL, LATEINIT, NOINLINE, OPEN, OPERATOR, OUT, OVERRIDE, REIFIED, SEALED, SUSPEND, TAILREC, VARARG
}
}
}
interface JKKtQualificationIdentifier : JKQualificationIdentifier
interface JKKtMethodCallExpression : JKMethodCallExpression
interface JKKtFieldAccessExpression : JKFieldAccessExpression
interface JKKtLiteralExpression : JKLiteralExpression
interface JKKtOperatorIdentifier : JKOperatorIdentifier
@@ -40,12 +40,12 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: D): JKModalityModifier = visitModifier(modalityModifier, data) as JKModalityModifier
override fun visitMethod(method: JKMethod, data: D): JKMethod = visitDeclaration(method, data) as JKMethod
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: D): JKExpressionStatement = visitStatement(expressionStatement, data) as JKExpressionStatement
override fun visitJavaField(javaField: JKJavaField, data: D): JKDeclaration = visitDeclaration(javaField, data)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKMethod = visitMethod(javaMethod, data)
override fun visitJavaField(javaField: JKJavaField, data: D): JKDeclaration = visitDeclaration(javaField, data)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKMethod = visitMethod(javaMethod, data)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): JKLoop = visitLoop(javaForLoop, data)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): JKExpression = visitExpression(javaAssignmentExpression, data)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: D): JKType = visitType(javaPrimitiveType, data)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: D): JKType = visitType(javaArrayType, data)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: D): JKType = visitType(javaPrimitiveType, data)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: D): JKType = visitType(javaArrayType, data)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression, data)
override fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier, data: D): JKOperatorIdentifier = visitOperatorIdentifier(javaOperatorIdentifier, data)
override fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier, data: D): JKQualificationIdentifier = visitQualificationIdentifier(javaQualificationIdentifier, data)
@@ -59,10 +59,16 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): JKModifier = visitModifier(javaModifier, data)
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): JKExpression = visitExpression(javaNewEmptyArray, data)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): JKExpression = visitExpression(javaNewArray, data)
override fun visitKtFun(ktFun: JKKtFun, data: D): JKDeclaration = visitDeclaration(ktFun, data)
override fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: D): JKLiteralExpression = visitLiteralExpression(javaLiteralExpression, data)
override fun visitKtFun(ktFun: JKKtFun, data: D): JKDeclaration = visitDeclaration(ktFun, data)
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): JKDeclaration = visitDeclaration(ktConstructor, data)
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): JKDeclaration = visitKtConstructor(ktPrimaryConstructor, data)
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): JKStatement = visitStatement(ktAssignmentStatement, data)
override fun visitKtCall(ktCall: JKKtCall, data: D): JKMethodCallExpression = visitMethodCallExpression(ktCall, data)
override fun visitKtProperty(ktProperty: JKKtProperty, data: D): JKDeclaration = visitDeclaration(ktProperty, data)
override fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier, data: D): JKQualificationIdentifier = visitQualificationIdentifier(ktQualificationIdentifier, data)
override fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: D): JKMethodCallExpression = visitMethodCallExpression(ktMethodCallExpression, data)
override fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression, data: D): JKFieldAccessExpression = visitFieldAccessExpression(ktFieldAccessExpression, data)
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression, data: D): JKLiteralExpression = visitLiteralExpression(ktLiteralExpression, data)
override fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier, data: D): JKOperatorIdentifier = visitOperatorIdentifier(ktOperatorIdentifier, data)
}
@@ -77,17 +77,17 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitMethod(method: JKMethod, data: Nothing?): JKMethod = visitMethod(method)
fun visitExpressionStatement(expressionStatement: JKExpressionStatement): JKExpressionStatement = visitStatement(expressionStatement) as JKExpressionStatement
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement, data: Nothing?): JKExpressionStatement = visitExpressionStatement(expressionStatement)
fun visitJavaField(javaField: JKJavaField): JKDeclaration = visitDeclaration(javaField)
fun visitJavaField(javaField: JKJavaField): JKDeclaration = visitDeclaration(javaField)
override fun visitJavaField(javaField: JKJavaField, data: Nothing?): JKDeclaration = visitJavaField(javaField)
fun visitJavaMethod(javaMethod: JKJavaMethod): JKMethod = visitMethod(javaMethod)
fun visitJavaMethod(javaMethod: JKJavaMethod): JKMethod = visitMethod(javaMethod)
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?): JKMethod = visitJavaMethod(javaMethod)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop): JKLoop = visitLoop(javaForLoop)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?): JKLoop = visitJavaForLoop(javaForLoop)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression): JKExpression = visitExpression(javaAssignmentExpression)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?): JKExpression = visitJavaAssignmentExpression(javaAssignmentExpression)
fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType): JKType = visitType(javaPrimitiveType)
fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType): JKType = visitType(javaPrimitiveType)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: Nothing?): JKType = visitJavaPrimitiveType(javaPrimitiveType)
fun visitJavaArrayType(javaArrayType: JKJavaArrayType): JKType = visitType(javaArrayType)
fun visitJavaArrayType(javaArrayType: JKJavaArrayType): JKType = visitType(javaArrayType)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: Nothing?): JKType = visitJavaArrayType(javaArrayType)
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?): JKLiteralExpression = visitJavaStringLiteralExpression(javaStringLiteralExpression)
@@ -115,7 +115,9 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?): JKExpression = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray): JKExpression = visitExpression(javaNewArray)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?): JKExpression = visitJavaNewArray(javaNewArray)
fun visitKtFun(ktFun: JKKtFun): JKDeclaration = visitDeclaration(ktFun)
fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression): JKLiteralExpression = visitLiteralExpression(javaLiteralExpression)
override fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: Nothing?): JKLiteralExpression = visitJavaLiteralExpression(javaLiteralExpression)
fun visitKtFun(ktFun: JKKtFun): JKDeclaration = visitDeclaration(ktFun)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?): JKDeclaration = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor): JKDeclaration = visitDeclaration(ktConstructor)
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?): JKDeclaration = visitKtConstructor(ktConstructor)
@@ -127,4 +129,14 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?): JKMethodCallExpression = visitKtCall(ktCall)
fun visitKtProperty(ktProperty: JKKtProperty): JKDeclaration = visitDeclaration(ktProperty)
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?): JKDeclaration = visitKtProperty(ktProperty)
fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier): JKQualificationIdentifier = visitQualificationIdentifier(ktQualificationIdentifier)
override fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier, data: Nothing?): JKQualificationIdentifier = visitKtQualificationIdentifier(ktQualificationIdentifier)
fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression): JKMethodCallExpression = visitMethodCallExpression(ktMethodCallExpression)
override fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: Nothing?): JKMethodCallExpression = visitKtMethodCallExpression(ktMethodCallExpression)
fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression): JKFieldAccessExpression = visitFieldAccessExpression(ktFieldAccessExpression)
override fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression, data: Nothing?): JKFieldAccessExpression = visitKtFieldAccessExpression(ktFieldAccessExpression)
fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression): JKLiteralExpression = visitLiteralExpression(ktLiteralExpression)
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression, data: Nothing?): JKLiteralExpression = visitKtLiteralExpression(ktLiteralExpression)
fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier): JKOperatorIdentifier = visitOperatorIdentifier(ktOperatorIdentifier)
override fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier, data: Nothing?): JKOperatorIdentifier = visitKtOperatorIdentifier(ktOperatorIdentifier)
}
@@ -59,10 +59,16 @@ interface JKVisitor<out R, in D> {
fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data)
fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): R = visitExpression(javaNewArray, data)
fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: D): R = visitLiteralExpression(javaLiteralExpression, data)
fun visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): R = visitStatement(ktAssignmentStatement, data)
fun visitKtCall(ktCall: JKKtCall, data: D): R = visitMethodCallExpression(ktCall, data)
fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitDeclaration(ktProperty, data)
fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier, data: D): R = visitQualificationIdentifier(ktQualificationIdentifier, data)
fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: D): R = visitMethodCallExpression(ktMethodCallExpression, data)
fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression, data: D): R = visitFieldAccessExpression(ktFieldAccessExpression, data)
fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression, data: D): R = visitLiteralExpression(ktLiteralExpression, data)
fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier, data: D): R = visitOperatorIdentifier(ktOperatorIdentifier, data)
}
@@ -115,6 +115,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?) = visitJavaNewEmptyArray(javaNewEmptyArray)
fun visitJavaNewArray(javaNewArray: JKJavaNewArray) = visitExpression(javaNewArray, null)
override fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: Nothing?) = visitJavaNewArray(javaNewArray)
fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression) = visitLiteralExpression(javaLiteralExpression, null)
override fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: Nothing?) = visitJavaLiteralExpression(javaLiteralExpression)
fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)
override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun)
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)
@@ -127,4 +129,14 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitKtCall(ktCall: JKKtCall, data: Nothing?) = visitKtCall(ktCall)
fun visitKtProperty(ktProperty: JKKtProperty) = visitDeclaration(ktProperty, null)
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty)
fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier) = visitQualificationIdentifier(ktQualificationIdentifier, null)
override fun visitKtQualificationIdentifier(ktQualificationIdentifier: JKKtQualificationIdentifier, data: Nothing?) = visitKtQualificationIdentifier(ktQualificationIdentifier)
fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression) = visitMethodCallExpression(ktMethodCallExpression, null)
override fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: Nothing?) = visitKtMethodCallExpression(ktMethodCallExpression)
fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression) = visitFieldAccessExpression(ktFieldAccessExpression, null)
override fun visitKtFieldAccessExpression(ktFieldAccessExpression: JKKtFieldAccessExpression, data: Nothing?) = visitKtFieldAccessExpression(ktFieldAccessExpression)
fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression) = visitLiteralExpression(ktLiteralExpression, null)
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression, data: Nothing?) = visitKtLiteralExpression(ktLiteralExpression)
fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier) = visitOperatorIdentifier(ktOperatorIdentifier, null)
override fun visitKtOperatorIdentifier(ktOperatorIdentifier: JKKtOperatorIdentifier, data: Nothing?) = visitKtOperatorIdentifier(ktOperatorIdentifier)
}