New J2K: Add kotlin declarations to IR (#9)

This commit is contained in:
Kirill Knize
2018-02-19 15:58:06 +03:00
committed by Ilya Kirillov
parent c662813b09
commit 70c291f222
8 changed files with 73 additions and 22 deletions
@@ -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()
}
@@ -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 {
}
+21 -12
View File
@@ -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
+21 -5
View File
@@ -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
}
}