diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index b7ef75dce08..0a62c1bbc0a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -241,9 +241,9 @@ class JavaToJKTreeBuilder { val modifierList = JKModifierListImpl() if (this == null) return modifierList - PsiModifier.MODIFIERS + modifierList.modifiers = PsiModifier.MODIFIERS .filter { hasExplicitModifier(it) } - .mapTo(modifierList.modifiers) { modifierToJK(it) } + .map { modifierToJK(it) } return modifierList } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index 4b50b58e593..6f57e3e3dc5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -62,6 +62,12 @@ class JKJavaMethodImpl(override var modifierList: JKModifierList, override var block: JKBlock?) : JKJavaMethod, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethod(this, data) + override fun transformChildren(transformer: JKTransformer, data: D) { + modifierList = modifierList.transform(transformer, data) + name = name.transform(transformer, data) + valueArguments = valueArguments.map { it.transform(transformer, data) } + block = block?.transform(transformer, data) + } } sealed class JKJavaOperatorIdentifierImpl : JKJavaOperatorIdentifier, JKElementBase() { @@ -77,31 +83,45 @@ sealed class JKJavaQualificationIdentifierImpl : JKJavaQualificationIdentifier, object DOT : JKJavaQualificationIdentifierImpl() } -class JKJavaMethodCallExpressionImpl(override val identifier: JKMethodReference, - override val arguments: JKExpressionList) : JKJavaMethodCallExpression, JKElementBase() { +class JKJavaMethodCallExpressionImpl(override var identifier: JKMethodReference, + override var arguments: JKExpressionList) : JKJavaMethodCallExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethodCallExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { identifier.accept(visitor, data) arguments.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + identifier = identifier.transform(transformer, data) + arguments = arguments.transform(transformer, data) + } } -class JKJavaFieldAccessExpressionImpl(override val identifier: JKFieldReference) : JKJavaFieldAccessExpression, JKElementBase() { +class JKJavaFieldAccessExpressionImpl(override var identifier: JKFieldReference) : JKJavaFieldAccessExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaFieldAccessExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { identifier.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + identifier = identifier.transform(transformer, data) + } } -class JKJavaNewExpressionImpl(override val identifier: JKClassReference, - override val arguments: JKExpressionList) : JKJavaNewExpression, JKElementBase() { +class JKJavaNewExpressionImpl(override var identifier: JKClassReference, + override var arguments: JKExpressionList) : JKJavaNewExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaNewExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { identifier.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + identifier = identifier.transform(transformer, data) + arguments = arguments.transform(transformer, data) + } } class JKJavaMethodReferenceImpl() : JKJavaMethodReference, JKElementBase() { @@ -128,18 +148,26 @@ class JKJavaClassReferenceImpl() : JKJavaClassReference, JKElementBase() { } } -class JKJavaNewEmptyArrayImpl(override val initializer: List) : JKJavaNewEmptyArray, JKElementBase() { +class JKJavaNewEmptyArrayImpl(override var initializer: List) : JKJavaNewEmptyArray, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaNewEmptyArray(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { } + + override fun transformChildren(transformer: JKTransformer, data: D) { + initializer = initializer.map { it?.transform(transformer, data) } + } } -class JKJavaNewArrayImpl(override val initializer: List) : JKJavaNewArray, JKElementBase() { +class JKJavaNewArrayImpl(override var initializer: List) : JKJavaNewArray, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaNewArray(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { } + + override fun transformChildren(transformer: JKTransformer, data: D) { + initializer = initializer.map { it.transform(transformer, data) } + } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index 2c97572c11e..83a634da3b1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -49,104 +49,153 @@ class JKClassImpl(override var modifierList: JKModifierList, override var name: } -class JKNameIdentifierImpl(override val name: String) : JKNameIdentifier, JKElementBase() { +class JKNameIdentifierImpl(override var name: String) : JKNameIdentifier, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitNameIdentifier(this, data) } - class JKModifierListImpl : JKModifierList, JKElementBase() { - override val modifiers = mutableListOf() + override var modifiers = listOf() override fun accept(visitor: JKVisitor, data: D): R = visitor.visitModifierList(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { modifiers.forEach { it.accept(visitor, data) } } + + override fun transformChildren(transformer: JKTransformer, data: D) { + modifiers = modifiers.map { it.transform(transformer, data) } + } } -class JKValueArgumentImpl(override val type: JKTypeIdentifier, +class JKValueArgumentImpl(override var type: JKTypeIdentifier, override val name: String) : JKValueArgument, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitValueArgument(this, data) + override fun transformChildren(transformer: JKTransformer, data: D) { + type = type.transform(transformer, data) + } } class JKBlockImpl(override var statements: List) : JKBlock, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitBlock(this, data) + override fun transformChildren(transformer: JKTransformer, data: D) { + statements = statements.map { it.transform(transformer, data) } + } } class JKStringLiteralExpressionImpl(override val text: String) : JKStringLiteralExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitStringLiteralExpression(this, data) } -class JKBinaryExpressionImpl(override val left: JKExpression, override val right: JKExpression?, - override val operator: JKOperatorIdentifier) : JKBinaryExpression, JKElementBase() { +class JKBinaryExpressionImpl(override var left: JKExpression, override var right: JKExpression?, + override var operator: JKOperatorIdentifier) : JKBinaryExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitBinaryExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { left.accept(visitor, data) operator.accept(visitor, data) right?.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + left = left.transform(transformer, data) + right = right?.transform(transformer, data) + operator = operator.transform(transformer, data) + } } -class JKPrefixExpressionImpl(override val expression: JKExpression?, - override val operator: JKOperatorIdentifier) : JKPrefixExpression, JKElementBase() { +class JKPrefixExpressionImpl(override var expression: JKExpression, + override var operator: JKOperatorIdentifier) : JKPrefixExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitPrefixExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { expression?.accept(visitor, data) operator.accept(visitor, data) } -} -class JKPostfixExpressionImpl(override val expression: JKExpression, - override val operator: JKOperatorIdentifier) : JKPostfixExpression, JKElementBase() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitPostfixExpression(this, data) - override fun acceptChildren(visitor: JKVisitor, data: D) { - expression.accept(visitor, data) - operator.accept(visitor, data) + override fun transformChildren(transformer: JKTransformer, data: D) { + expression = expression?.transform(transformer, data) + operator = operator.transform(transformer, data) } } -class JKExpressionListImpl(override val expressions: Array) : JKExpressionList, JKElementBase() { +class JKPostfixExpressionImpl(override var expression: JKExpression, + override var operator: JKOperatorIdentifier) : JKPostfixExpression, JKElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitPostfixExpression(this, data) + override fun acceptChildren(visitor: JKVisitor, data: D) { + expression?.accept(visitor, data) + operator.accept(visitor, data) + } + + override fun transformChildren(transformer: JKTransformer, data: D) { + expression = expression?.transform(transformer, data) + operator = operator.transform(transformer, data) + } +} + +class JKExpressionListImpl(override var expressions: Array) : JKExpressionList, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitExpressionList(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { expressions.forEach { it.accept(visitor, data) } } + + override fun transformChildren(transformer: JKTransformer, data: D) { + expressions = expressions.map { it.transform(transformer, data) }.toTypedArray() + } } -class JKQualifiedExpressionImpl(override val receiver: JKExpression, override val operator: JKQualificationIdentifier, - override val selector: JKStatement) : JKQualifiedExpression, JKElementBase() { +class JKQualifiedExpressionImpl(override var receiver: JKExpression, override var operator: JKQualificationIdentifier, + override var selector: JKStatement) : JKQualifiedExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitQualifiedExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { receiver.accept(visitor, data) operator.accept(visitor, data) selector.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + receiver = receiver.transform(transformer, data) + operator = operator.transform(transformer, data) + selector = selector.transform(transformer, data) + } } -class JKArrayAccessExpressionImpl(override val expression: JKExpression, override val indexExpression: JKExpression?) : JKArrayAccessExpression, JKElementBase() { +class JKArrayAccessExpressionImpl(override var expression: JKExpression, override var indexExpression: JKExpression?) : JKArrayAccessExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitArrayAccessExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { expression.accept(visitor, data) indexExpression?.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + expression = expression.transform(transformer, data) + indexExpression = expression.transform(transformer, data) + } } -class JKParenthesizedExpressionImpl(override val expression: JKExpression?) : JKParenthesizedExpression, JKElementBase() { +class JKParenthesizedExpressionImpl(override var expression: JKExpression?) : JKParenthesizedExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitParenthesizedExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { expression?.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + expression = expression?.transform(transformer, data) + } } -class JKTypeCastExpressionImpl(override val expression: JKExpression?, override val type: JKTypeReference?) : JKTypeCastExpression, JKElementBase() { +class JKTypeCastExpressionImpl(override var expression: JKExpression?, override var type: JKTypeReference?) : JKTypeCastExpression, JKElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitTypeCastExpression(this, data) override fun acceptChildren(visitor: JKVisitor, data: D) { expression?.accept(visitor, data) type?.accept(visitor, data) } + + override fun transformChildren(transformer: JKTransformer, data: D) { + expression = expression?.transform(transformer, data) + type = type?.transform(transformer, data) + } } class JKTypeReferenceImpl() : JKTypeReference, JKElementBase() { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index 195a913d886..4e98ba73fcf 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.j2k.tree.impl import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer +import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor class JKKtPropertyImpl(override var modifierList: JKModifierList, override var type: JKTypeIdentifier, @@ -24,6 +26,22 @@ class JKKtPropertyImpl(override var modifierList: JKModifierList, override var initializer: JKExpression? = null, override var getter: JKBlock? = null, override var setter: JKBlock? = null) : JKElementBase(), JKKtProperty { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtProperty(this, data) + override fun acceptChildren(visitor: JKVisitor, data: D) { + modifierList.accept(visitor, data) + type.accept(visitor, data) + name.accept(visitor, data) + initializer?.accept(visitor, data) + getter?.accept(visitor, data) + setter?.accept(visitor, data) + } - + override fun transformChildren(transformer: JKTransformer, data: D) { + modifierList = modifierList.transform(transformer, data) + type = type.transform(transformer, data) + name = name.transform(transformer, data) + initializer = initializer?.transform(transformer, data) + getter = getter?.transform(transformer, data) + setter = setter?.transform(transformer, data) + } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 0f291d6ffe3..7d008286b54 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -17,16 +17,16 @@ package org.jetbrains.kotlin.j2k.tree interface JKJavaField : JKDeclaration, JKModifierListOwner { - var type: JKTypeIdentifier - var name: JKNameIdentifier - var initializer: JKExpression? + val type: JKTypeIdentifier + val name: JKNameIdentifier + val initializer: JKExpression? } interface JKJavaMethod : JKDeclaration { - var modifierList: JKModifierList - var name: JKNameIdentifier - var valueArguments: List - var block: JKBlock? + val modifierList: JKModifierList + val name: JKNameIdentifier + val valueArguments: List + val block: JKBlock? } interface JKJavaForLoop : JKLoop diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 8554ebcce1a..c8dd7ca724f 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -29,9 +29,9 @@ interface JKElement { } interface JKClass : JKDeclaration, JKModifierListOwner { - var name: JKNameIdentifier - var declarations: List - var classKind: ClassKind + val name: JKNameIdentifier + val declarations: List + val classKind: ClassKind enum class ClassKind { ABSTRACT, ANNOTATION, CLASS, ENUM, INTERFACE @@ -117,7 +117,7 @@ interface JKLoop : JKStatement interface JKDeclaration : JKElement interface JKBlock : JKElement { - var statements: List + val statements: List } interface JKIdentifier : JKElement @@ -131,7 +131,7 @@ interface JKNameIdentifier : JKIdentifier { interface JKLiteralExpression : JKExpression interface JKModifierList : JKElement { - val modifiers: MutableList + val modifiers: List } interface JKModifier : JKElement