New J2K: Added java -> jk converter for field access.

This commit is contained in:
Dimach
2017-10-20 01:49:19 +03:00
committed by Ilya Kirillov
parent 98d01d600a
commit 5bf806b85c
6 changed files with 71 additions and 13 deletions
@@ -82,7 +82,7 @@ class JavaToJKTreeBuilder {
fun PsiMethodCallExpression.toJK(): JKExpression {
val method = methodExpression as PsiReferenceExpressionImpl
val identifier = (method.referenceNameElement as PsiIdentifier).convertMethodReference()
val call = JKJavaCallExpressionImpl(argumentList.toJK(), identifier)
val call = JKJavaMethodCallExpressionImpl(argumentList.toJK(), identifier)
return if (method.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualificationIdentifierImpl.DOT, call)
}
@@ -91,6 +91,18 @@ class JavaToJKTreeBuilder {
}
}
fun PsiReferenceExpression.toJK(): JKExpression {
val impl = this as PsiReferenceExpressionImpl
val identifier = (impl.referenceNameElement as PsiIdentifier).convertFieldReference()
val access = JKJavaFieldAccessExpressionImpl(identifier)
return if (impl.findChildByRole(ChildRole.DOT) != null) {
JKQualifiedExpressionImpl((impl.qualifier as PsiExpression).toJK(), JKJavaQualificationIdentifierImpl.DOT, access)
}
else {
access
}
}
fun PsiExpressionList.toJK(): JKExpressionList {
return JKExpressionListImpl(expressions.map { it.toJK() }.toTypedArray())
}
@@ -98,6 +110,10 @@ class JavaToJKTreeBuilder {
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
return JKJavaMethodReferenceImpl()
}
fun PsiIdentifier.convertFieldReference(): JKJavaFieldReference {
return JKJavaFieldReferenceImpl()
}
}
private object DeclarationMapper {
@@ -77,9 +77,9 @@ sealed class JKJavaQualificationIdentifierImpl : JKJavaQualificationIdentifier,
object DOT : JKJavaQualificationIdentifierImpl()
}
class JKJavaCallExpressionImpl(override val arguments: JKExpressionList,
override val identifier: JKJavaMethodReference) : JKJavaCallExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaCallExpression(this, data)
class JKJavaMethodCallExpressionImpl(override val arguments: JKExpressionList,
override val identifier: JKMethodReference) : JKJavaMethodCallExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodCallExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
identifier.accept(visitor, data)
@@ -87,10 +87,26 @@ class JKJavaCallExpressionImpl(override val arguments: JKExpressionList,
}
}
class JKJavaFieldAccessExpressionImpl(override val identifier: JKFieldReference) : JKJavaFieldAccessExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaFieldAccessExpression(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
identifier.accept(visitor, data)
}
}
class JKJavaMethodReferenceImpl() : JKJavaMethodReference, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethodReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
}
}
class JKJavaFieldReferenceImpl() : JKJavaFieldReference, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaFieldReference(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
}
}
@@ -45,12 +45,18 @@ interface JKJavaOperatorIdentifier : JKOperatorIdentifier
interface JKJavaQualificationIdentifier : JKQualificationIdentifier
interface JKJavaCallExpression : JKCallExpression {
override val identifier: JKJavaMethodReference
interface JKJavaMethodCallExpression : JKMethodCallExpression {
}
interface JKJavaFieldAccessExpression : JKFieldAccessExpression {
}
interface JKJavaMethodReference : JKMethodReference
interface JKJavaFieldReference : JKFieldReference
interface JKJavaAccessModifier : JKAccessModifier {
val type: AccessModifierType
@@ -65,11 +65,15 @@ interface JKQualifiedExpression : JKExpression {
val selector: JKStatement
}
interface JKCallExpression : JKExpression {
interface JKMethodCallExpression : JKExpression {
val identifier: JKMethodReference
val arguments: JKExpressionList
}
interface JKFieldAccessExpression : JKExpression {
val identifier: JKFieldReference
}
interface JKExpressionList : JKElement {
val expressions: Array<JKExpression>
}
@@ -78,6 +82,10 @@ interface JKMethodReference : JKElement {
}
interface JKFieldReference : JKElement {
}
interface JKOperatorIdentifier : JKIdentifier
interface JKQualificationIdentifier : JKIdentifier
@@ -12,9 +12,11 @@ interface JKVisitor<out R, in D> {
fun visitPrefixExpression(prefixExpression: JKPrefixExpression, data: D): R = visitUnaryExpression(prefixExpression, data)
fun visitPostfixExpression(postfixExpression: JKPostfixExpression, data: D): R = visitUnaryExpression(postfixExpression, data)
fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression, data: D): R = visitExpression(qualifiedExpression, data)
fun visitCallExpression(callExpression: JKCallExpression, data: D): R = visitExpression(callExpression, data)
fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: D): R = visitExpression(methodCallExpression, data)
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: D): R = visitExpression(fieldAccessExpression, data)
fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitElement(expressionList, data)
fun visitMethodReference(methodReference: JKMethodReference, data: D): R = visitElement(methodReference, data)
fun visitFieldReference(fieldReference: JKFieldReference, data: D): R = visitElement(fieldReference, data)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): R = visitIdentifier(operatorIdentifier, data)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): R = visitIdentifier(qualificationIdentifier, data)
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, data)
@@ -40,8 +42,10 @@ interface JKVisitor<out R, in D> {
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): R = visitLiteralExpression(javaStringLiteralExpression, data)
fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier, data: D): R = visitOperatorIdentifier(javaOperatorIdentifier, data)
fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier, data: D): R = visitQualificationIdentifier(javaQualificationIdentifier, data)
fun visitJavaCallExpression(javaCallExpression: JKJavaCallExpression, data: D): R = visitCallExpression(javaCallExpression, data)
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data)
fun visitJavaFieldAccessExpression(javaFieldAccessExpression: JKJavaFieldAccessExpression, data: D): R = visitFieldAccessExpression(javaFieldAccessExpression, data)
fun visitJavaMethodReference(javaMethodReference: JKJavaMethodReference, data: D): R = visitMethodReference(javaMethodReference, data)
fun visitJavaFieldReference(javaFieldReference: JKJavaFieldReference, data: D): R = visitFieldReference(javaFieldReference, data)
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: D): R = visitAccessModifier(javaAccessModifier, data)
fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data)
fun visitKtFun(ktFun: JKKtFun, data: D): R = visitDeclaration(ktFun, data)
@@ -21,12 +21,16 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression, data: Nothing?) = visitPostfixExpression(postfixExpression)
fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) = visitExpression(qualifiedExpression, null)
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression, data: Nothing?) = visitQualifiedExpression(qualifiedExpression)
fun visitCallExpression(callExpression: JKCallExpression) = visitExpression(callExpression, null)
override fun visitCallExpression(callExpression: JKCallExpression, data: Nothing?) = visitCallExpression(callExpression)
fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) = visitExpression(methodCallExpression, null)
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: Nothing?) = visitMethodCallExpression(methodCallExpression)
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) = visitExpression(fieldAccessExpression, null)
override fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: Nothing?) = visitFieldAccessExpression(fieldAccessExpression)
fun visitExpressionList(expressionList: JKExpressionList) = visitElement(expressionList, null)
override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList)
fun visitMethodReference(methodReference: JKMethodReference) = visitElement(methodReference, null)
override fun visitMethodReference(methodReference: JKMethodReference, data: Nothing?) = visitMethodReference(methodReference)
fun visitFieldReference(fieldReference: JKFieldReference) = visitElement(fieldReference, null)
override fun visitFieldReference(fieldReference: JKFieldReference, data: Nothing?) = visitFieldReference(fieldReference)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier) = visitIdentifier(operatorIdentifier, null)
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?) = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier) = visitIdentifier(qualificationIdentifier, null)
@@ -71,10 +75,14 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier, data: Nothing?) = visitJavaOperatorIdentifier(javaOperatorIdentifier)
fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier) = visitQualificationIdentifier(javaQualificationIdentifier, null)
override fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier, data: Nothing?) = visitJavaQualificationIdentifier(javaQualificationIdentifier)
fun visitJavaCallExpression(javaCallExpression: JKJavaCallExpression) = visitCallExpression(javaCallExpression, null)
override fun visitJavaCallExpression(javaCallExpression: JKJavaCallExpression, data: Nothing?) = visitJavaCallExpression(javaCallExpression)
fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression) = visitMethodCallExpression(javaMethodCallExpression, null)
override fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: Nothing?) = visitJavaMethodCallExpression(javaMethodCallExpression)
fun visitJavaFieldAccessExpression(javaFieldAccessExpression: JKJavaFieldAccessExpression) = visitFieldAccessExpression(javaFieldAccessExpression, null)
override fun visitJavaFieldAccessExpression(javaFieldAccessExpression: JKJavaFieldAccessExpression, data: Nothing?) = visitJavaFieldAccessExpression(javaFieldAccessExpression)
fun visitJavaMethodReference(javaMethodReference: JKJavaMethodReference) = visitMethodReference(javaMethodReference, null)
override fun visitJavaMethodReference(javaMethodReference: JKJavaMethodReference, data: Nothing?) = visitJavaMethodReference(javaMethodReference)
fun visitJavaFieldReference(javaFieldReference: JKJavaFieldReference) = visitFieldReference(javaFieldReference, null)
override fun visitJavaFieldReference(javaFieldReference: JKJavaFieldReference, data: Nothing?) = visitJavaFieldReference(javaFieldReference)
fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier) = visitAccessModifier(javaAccessModifier, null)
override fun visitJavaAccessModifier(javaAccessModifier: JKJavaAccessModifier, data: Nothing?) = visitJavaAccessModifier(javaAccessModifier)
fun visitKtFun(ktFun: JKKtFun) = visitDeclaration(ktFun, null)