New J2K: Add kotlin declarations to IR (#9)
This commit is contained in:
committed by
Ilya Kirillov
parent
c662813b09
commit
70c291f222
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.j2k
|
||||
|
||||
import org.jetbrains.kotlin.j2k.conversions.JavaFieldToKotlinPropertyConversion
|
||||
import org.jetbrains.kotlin.j2k.conversions.JavaMethodToKotlinFunctionConversion
|
||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
||||
|
||||
object ConversionsRunner {
|
||||
@@ -25,6 +26,7 @@ object ConversionsRunner {
|
||||
|
||||
trees.forEach {
|
||||
JavaFieldToKotlinPropertyConversion().runConversion(it)
|
||||
JavaMethodToKotlinFunctionConversion().runConversion(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@ class JavaToJKTreeBuilder {
|
||||
}
|
||||
|
||||
fun PsiIdentifier.convertMethodReference(): JKJavaMethodReference {
|
||||
|
||||
return JKJavaMethodReferenceImpl()
|
||||
}
|
||||
|
||||
|
||||
+12
-3
@@ -16,9 +16,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.j2k.conversions
|
||||
|
||||
import org.jetbrains.kotlin.j2k.tree.JKDeclaration
|
||||
import org.jetbrains.kotlin.j2k.tree.JKElement
|
||||
import org.jetbrains.kotlin.j2k.tree.JKJavaField
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaTypeIdentifierImpl
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKKtFunctionImpl
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKKtPropertyImpl
|
||||
|
||||
class JavaFieldToKotlinPropertyConversion : TransformerBasedConversion() {
|
||||
@@ -30,4 +30,13 @@ class JavaFieldToKotlinPropertyConversion : TransformerBasedConversion() {
|
||||
|
||||
return JKKtPropertyImpl(javaField.modifierList, javaField.type, javaField.name, javaField.initializer)
|
||||
}
|
||||
}
|
||||
|
||||
class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() {
|
||||
override fun visitElement(element: JKElement): JKElement = element.also { it.transformChildren(this, null) }
|
||||
|
||||
override fun visitJavaMethod(javaMethod: JKJavaMethod): JKDeclaration {
|
||||
somethingChanged = true
|
||||
return JKKtFunctionImpl(JKJavaTypeIdentifierImpl("Stab"), javaMethod.name, javaMethod.valueArguments, javaMethod.block, javaMethod.modifierList)
|
||||
}
|
||||
}
|
||||
@@ -198,7 +198,9 @@ class JKTypeCastExpressionImpl(override var expression: JKExpression?, override
|
||||
}
|
||||
}
|
||||
|
||||
class JKTypeReferenceImpl() : JKTypeReference, JKElementBase() {
|
||||
class JKTypeReferenceImpl(override val parameters: List<JKTypeReference>) : JKTypeReference, JKElementBase() {
|
||||
|
||||
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeReference(this, data)
|
||||
|
||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||
|
||||
@@ -45,3 +45,11 @@ class JKKtPropertyImpl(override var modifierList: JKModifierList,
|
||||
setter = setter?.transform(transformer, data)
|
||||
}
|
||||
}
|
||||
|
||||
class JKKtFunctionImpl(override var returnType: JKTypeIdentifier,
|
||||
override var name: JKNameIdentifier,
|
||||
override var valueArguments: List<JKValueArgument>,
|
||||
override var block: JKBlock?,
|
||||
override var modifierList: JKModifierList) : JKElementBase(), JKKtFunction {
|
||||
|
||||
}
|
||||
|
||||
@@ -86,4 +86,8 @@ interface JKJavaNewEmptyArray : JKExpression {
|
||||
|
||||
interface JKJavaNewArray : JKExpression {
|
||||
val initializer: List<JKExpression>
|
||||
}
|
||||
}
|
||||
|
||||
interface JKJavaExternalReference : JKExternalReference {
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||
|
||||
@@ -75,39 +76,47 @@ interface JKFieldAccessExpression : JKExpression {
|
||||
}
|
||||
|
||||
interface JKArrayAccessExpression : JKExpression {
|
||||
val expression : JKExpression
|
||||
val indexExpression : JKExpression?
|
||||
val expression: JKExpression
|
||||
val indexExpression: JKExpression?
|
||||
}
|
||||
|
||||
interface JKParenthesizedExpression : JKExpression {
|
||||
val expression : JKExpression?
|
||||
val expression: JKExpression?
|
||||
}
|
||||
|
||||
interface JKTypeCastExpression : JKExpression {
|
||||
val expression : JKExpression?
|
||||
val type : JKTypeReference?
|
||||
val expression: JKExpression?
|
||||
val type: JKTypeReference?
|
||||
}
|
||||
|
||||
interface JKExpressionList : JKElement {
|
||||
val expressions: Array<JKExpression>
|
||||
}
|
||||
|
||||
interface JKMethodReference : JKElement {
|
||||
|
||||
}
|
||||
|
||||
interface JKFieldReference : JKElement {
|
||||
interface JKReference : JKElement {
|
||||
|
||||
}
|
||||
|
||||
interface JKClassReference : JKElement {
|
||||
interface JKExternalReference {
|
||||
fun resolve(): PsiElement
|
||||
}
|
||||
|
||||
interface JKMethodReference : JKReference {
|
||||
|
||||
}
|
||||
|
||||
interface JKTypeReference : JKElement {
|
||||
interface JKFieldReference : JKReference {
|
||||
|
||||
}
|
||||
|
||||
interface JKClassReference : JKReference {
|
||||
|
||||
}
|
||||
|
||||
interface JKTypeReference : JKReference {
|
||||
val parameters: List<JKTypeReference>
|
||||
}
|
||||
|
||||
interface JKOperatorIdentifier : JKIdentifier
|
||||
|
||||
interface JKQualificationIdentifier : JKIdentifier
|
||||
|
||||
@@ -27,9 +27,25 @@ interface JKKtAssignmentStatement : JKStatement
|
||||
interface JKKtCall : JKMethodCallExpression
|
||||
|
||||
interface JKKtProperty : JKDeclaration, JKModifierListOwner {
|
||||
var type: JKTypeIdentifier
|
||||
var name: JKNameIdentifier
|
||||
var initializer: JKExpression?
|
||||
var getter: JKBlock?
|
||||
var setter: JKBlock?
|
||||
val type: JKTypeIdentifier
|
||||
val name: JKNameIdentifier
|
||||
val initializer: JKExpression?
|
||||
val getter: JKBlock?
|
||||
val setter: JKBlock?
|
||||
}
|
||||
|
||||
interface JKKtFunction : JKDeclaration, JKModifierListOwner {
|
||||
val returnType: JKTypeIdentifier
|
||||
val name: JKNameIdentifier
|
||||
val valueArguments: List<JKValueArgument>
|
||||
val block: JKBlock?
|
||||
}
|
||||
|
||||
interface JKKtModifier : JKModifier {
|
||||
val type: KtModifierType
|
||||
|
||||
enum class KtModifierType {
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user