diff --git a/nj2k/GenerateJKTreeVisitorAndTransformer.kts b/nj2k/GenerateJKTreeVisitorAndTransformer.kts deleted file mode 100644 index 9240268affd..00000000000 --- a/nj2k/GenerateJKTreeVisitorAndTransformer.kts +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -import java.io.File - - -private val JK_ROOT = File("./nj2k/src/org/jetbrains/kotlin/nj2k/tree") - -private val JK_OUT_ROOT = File(JK_ROOT, "visitors") - -private val JK_KT_FILE = File(JK_ROOT, "k.kt") -private val JK_JAVA_FILE = File(JK_ROOT, "j.kt") -private val JK_COMMON_FILE = File(JK_ROOT, "jk.kt") - - -val interfaceRegex = "(interface|abstract class)\\s+(JK[a-zA-Z]+)\\s+?:?\\s+(JK[a-zA-Z]+)?".toRegex() - - -data class InterfaceData(val name: String, val extends: String?) - -fun File.interfaceNames() = - sequenceOf(this) - .map { it.readText() } - .flatMap { interfaceRegex.findAll(it) } - .map { match -> InterfaceData(match.groupValues[2], match.groupValues.getOrNull(3)) } - .toList() - - -fun String.safeVarName() = when (this) { - "class" -> "klass" - else -> this -} - -fun genVisitors(commonData: List, uncommonData: List, visitorName: String, transformerName: String) { - - val interfaceData = commonData + uncommonData - - val pkg = "package org.jetbrains.kotlin.nj2k.tree.visitors" - - File(JK_OUT_ROOT, "$visitorName.kt").writeText(buildString { - appendln(pkg) - appendln() - appendln("import org.jetbrains.kotlin.nj2k.tree.*") - appendln() - appendln("abstract class $visitorName {") - interfaceData.joinTo(this, separator = "\n") { (name, ext) -> - val nameWithoutPrefix = name.removePrefix("JK") - val argName = nameWithoutPrefix.decapitalize().safeVarName() - val generifyCall = if (name != "JKTreeElement") "= visit${ext!!.removePrefix("JK")}($argName)" else "" - val modifier = if (name == "JKTreeElement") "abstract" else "open" - """ - | $modifier fun visit$nameWithoutPrefix($argName: $name) $generifyCall - """.trimMargin() - } - appendln() - appendln("}") - }) - - - File(JK_OUT_ROOT, "${visitorName}WithCommentsPrinting.kt").writeText(buildString { - appendln(pkg) - appendln() - appendln("import org.jetbrains.kotlin.nj2k.tree.*") - appendln() - - appendln("abstract class ${visitorName}WithCommentsPrinting : $visitorName() {") - appendln( - """ - | abstract fun printLeftNonCodeElements(element: JKNonCodeElementsListOwner) - | abstract fun printRightNonCodeElements(element: JKNonCodeElementsListOwner) - | - """.trimMargin() - ) - - interfaceData.joinTo(this, separator = "\n\n") { (name, ext) -> - val nameWithoutPrefix = name.removePrefix("JK") - val argName = nameWithoutPrefix.decapitalize().safeVarName() - val arg = "$argName: $name" - val rawVisitSuffix = "Raw" - val generifyCall = if (name != "JKTreeElement") "= visit${ext!!.removePrefix("JK")}$rawVisitSuffix($argName)" else "" - val modifier = if (name == "JKTreeElement") "abstract" else "open" - """ - | override fun visit$nameWithoutPrefix($arg) { - | printLeftNonCodeElements($argName) - | visit$nameWithoutPrefix$rawVisitSuffix($argName) - | printRightNonCodeElements($argName) - | } - | - | $modifier fun visit$nameWithoutPrefix$rawVisitSuffix($arg) $generifyCall - """.trimMargin() - } - appendln() - appendln("}") - }) -} - -genVisitors(JK_COMMON_FILE.interfaceNames(), JK_JAVA_FILE.interfaceNames() + JK_KT_FILE.interfaceNames(), "JKVisitor", "JKTransformer") diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt index 9fa56db5453..1362bbf589a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt @@ -22,7 +22,6 @@ import com.intellij.psi.JavaTokenType.SUPER_KEYWORD import com.intellij.psi.JavaTokenType.THIS_KEYWORD import com.intellij.psi.impl.source.tree.ChildRole import com.intellij.psi.impl.source.tree.CompositeElement -import com.intellij.psi.impl.source.tree.ElementType import com.intellij.psi.impl.source.tree.java.PsiClassObjectAccessExpressionImpl import com.intellij.psi.impl.source.tree.java.PsiLabeledStatementImpl import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl @@ -1038,8 +1037,8 @@ class JavaToJKTreeBuilder constructor( private fun JKNonCodeElementsListOwner.assignNonCodeElements(psi: PsiElement?) { if (psi == null) return val (leftTokens, rightTokens) = psi.collectNonCodeElements() - this.leftNonCodeElements = leftTokens - this.rightNonCodeElements = rightTokens + this.leftNonCodeElements += leftTokens + this.rightNonCodeElements += rightTokens } private inline fun T.withAssignedNonCodeElements(psi: PsiElement?): T = diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AnnotationClassConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AnnotationClassConversion.kt index 3a5b8ef55f5..1ca37cb884a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AnnotationClassConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/AnnotationClassConversion.kt @@ -55,10 +55,10 @@ class AnnotationClassConversion(context: NewJ2kConverterContext) : RecursiveAppl } else initializer ).also { parameter -> if (leftNonCodeElements.any { it is JKCommentElement }) { - parameter.leftNonCodeElements = leftNonCodeElements + parameter.leftNonCodeElements += leftNonCodeElements } if (rightNonCodeElements.any { it is JKCommentElement }) { - parameter.rightNonCodeElements = rightNonCodeElements + parameter.rightNonCodeElements += rightNonCodeElements } } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt index 3850f6a18c4..1a70f9e1c1d 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.* import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.symbols.JKUnresolvedField @@ -32,11 +31,11 @@ class BuiltinMembersConversion(context: NewJ2kConverterContext) : RecursiveAppli val newSelector = conversion.createBuilder().build(selector) if (this is JKQualifiedExpression && conversion.replaceType == ReplaceType.REPLACE_WITH_QUALIFIER) { - newSelector.rightNonCodeElements = - (receiver.leftNonCodeElements + - receiver.rightNonCodeElements + - selector.leftNonCodeElements + - selector.rightNonCodeElements).dropSpacesAtBegining() + newSelector.rightNonCodeElements += receiver.leftNonCodeElements + newSelector.rightNonCodeElements += receiver.leftNonCodeElements + newSelector.rightNonCodeElements += receiver.rightNonCodeElements + newSelector.rightNonCodeElements += selector.leftNonCodeElements + newSelector.rightNonCodeElements += selector.rightNonCodeElements } return when (conversion.replaceType) { @@ -469,7 +468,7 @@ class BuiltinMembersConversion(context: NewJ2kConverterContext) : RecursiveAppli ).groupBy { it.from.fqName } - private fun JKExpression. callOn(symbol: JKMethodSymbol, arguments: List = emptyList()) = + private fun JKExpression.callOn(symbol: JKMethodSymbol, arguments: List = emptyList()) = JKQualifiedExpressionImpl( this, JKKtQualifierImpl.DOT, diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt index ba26e872ef2..7d05683d358 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt @@ -107,7 +107,7 @@ class DefaultArgumentsConversion(context: NewJ2kConverterContext) : RecursiveApp parameter.initializer = remapParameterSymbol(defaultValue) as JKExpression } element.declarations -= method - calledMethod.appendNonCodeElementsFrom(method) + calledMethod.withNonCodeElementsFrom(method) } for (method in element.declarations) { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/NonCodeElementsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/NonCodeElementsConversion.kt index 2f5500b7ccc..a027d91ebc9 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/NonCodeElementsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/NonCodeElementsConversion.kt @@ -14,7 +14,7 @@ class NonCodeElementsConversion(context : NewJ2kConverterContext) : RecursiveApp when (element) { is JKClass -> { element.name.rightNonCodeElements += element.inheritance.leftNonCodeElements - element.inheritance.leftNonCodeElements = emptyList() + element.inheritance.leftNonCodeElements.clear() } } return recurse(element) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/base.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/base.kt index 7e62717f0ae..663ae9b84e2 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/base.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/base.kt @@ -43,8 +43,8 @@ private class JKListChild(val value: Int) : ReadWriteProperty = emptyList() - override var rightNonCodeElements: List = emptyList() + override val leftNonCodeElements: MutableList = mutableListOf() + override val rightNonCodeElements: MutableList = mutableListOf() override var parent: JKElement? = null diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/javaAndKotlinElements.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/javaAndKotlinElements.kt index 099e810deb9..9cb17737bf9 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/javaAndKotlinElements.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/javaAndKotlinElements.kt @@ -17,10 +17,7 @@ package org.jetbrains.kotlin.nj2k.tree.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.j2k.ast.Nullability -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.nj2k.JKSymbolProvider import org.jetbrains.kotlin.nj2k.symbols.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType @@ -168,7 +165,7 @@ class JKDeclarationStatementImpl(declaredStatements: List) : JKDe override fun accept(visitor: JKVisitor) = visitor.visitDeclarationStatement(this) - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } class JKArrayAccessExpressionImpl( @@ -270,8 +267,8 @@ class JKStubExpressionImpl : JKStubExpression, JKElementBase(), PsiOwner by PsiO } object JKBodyStubImpl : JKBodyStub() { - override var leftNonCodeElements: List = emptyList()//TODO fix - override var rightNonCodeElements: List = emptyList()//TODO fix + override val leftNonCodeElements: MutableList = mutableListOf() + override val rightNonCodeElements: MutableList = mutableListOf() override fun copy(): JKTreeElement = this @@ -538,7 +535,7 @@ class JKAnnotationImpl( override var arguments: List by children(arguments) override fun accept(visitor: JKVisitor) = visitor.visitAnnotation(this) - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } class JKTypeArgumentListImpl(typeArguments: List = emptyList()) : JKTypeArgumentList, JKBranchElementBase(), @@ -562,7 +559,7 @@ class JKImportStatementImpl(name: JKNameIdentifier) : JKImportStatement, JKBranc override fun accept(visitor: JKVisitor) = visitor.visitImportStatement(this) - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } class JKImportListImpl(imports: List) : JKImportList, JKBranchElementBase() { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/kotlinElements.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/kotlinElements.kt index 841741a341f..afd256cbaee 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/kotlinElements.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/kotlinElements.kt @@ -21,8 +21,6 @@ import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.nj2k.symbols.JKMethodSymbol import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor -import org.jetbrains.kotlin.types.expressions.OperatorConventions -import org.jetbrains.kotlin.utils.addToStdlib.cast class JKKtPropertyImpl( type: JKTypeElement, @@ -50,7 +48,7 @@ class JKKtPropertyImpl( override var modalityElement by child(modalityElement) override var mutabilityElement by child(mutabilityElement) - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } class JKKtFunctionImpl( @@ -152,7 +150,7 @@ class JKKtAssignmentStatementImpl( override var expression by child(expression) override fun accept(visitor: JKVisitor) = visitor.visitKtAssignmentStatement(this) - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } object JKContextType : JKType { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/tokenElements.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/tokenElements.kt index 9d8c3f724e2..f94dae82b99 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/tokenElements.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/tokenElements.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.nj2k.tree.JKCommentElement import org.jetbrains.kotlin.nj2k.tree.JKNonCodeElement import org.jetbrains.kotlin.nj2k.tree.JKSpaceElement import org.jetbrains.kotlin.nj2k.tree.JKTokenElement +import org.jetbrains.kotlin.utils.SmartList class JKSpaceElementImpl(override val text: String) : JKSpaceElement @@ -16,6 +17,6 @@ class JKSpaceElementImpl(override val text: String) : JKSpaceElement class JKCommentElementImpl(override val text: String) : JKCommentElement class JKTokenElementImpl(override val text: String) : JKTokenElement { - override var leftNonCodeElements: List = emptyList() - override var rightNonCodeElements: List = emptyList() + override val leftNonCodeElements: MutableList = SmartList() + override val rightNonCodeElements: MutableList = SmartList() } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/javaAndKotlinElements.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/javaAndKotlinElements.kt index bbcd2d8f366..5762651f62c 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/javaAndKotlinElements.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/javaAndKotlinElements.kt @@ -38,7 +38,7 @@ interface PsiOwner { } abstract class JKDeclaration : JKTreeElement, JKBranchElementBase() { - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override val rightNonCodeElements = mutableListOf(JKSpaceElementImpl("\n")) abstract val name: JKNameIdentifier } @@ -260,7 +260,7 @@ interface JKTypeElement : JKTreeElement { } abstract class JKStatement : JKTreeElement, JKBranchElementBase() { - override var rightNonCodeElements: List = listOf(JKSpaceElementImpl("\n")) + override var rightNonCodeElements: MutableList = mutableListOf(JKSpaceElementImpl("\n")) } abstract class JKBlock : JKTreeElement, JKBranchElementBase() { @@ -389,7 +389,7 @@ interface JKLiteralExpression : JKExpression { abstract class JKParameter : JKVariable(), JKModifiersListOwner { abstract var isVarArgs: Boolean - override var rightNonCodeElements: List = emptyList() + override val rightNonCodeElements: MutableList = mutableListOf() } interface JKStringLiteralExpression : JKLiteralExpression { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/tokensElements.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/tokensElements.kt index 99eb2091dab..be631a2909a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/tokensElements.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/tokensElements.kt @@ -22,22 +22,17 @@ fun JKCommentElement.isSingleline() = interface JKNonCodeElementsListOwner { - var leftNonCodeElements: List - var rightNonCodeElements: List + val leftNonCodeElements: MutableList + val rightNonCodeElements: MutableList } fun JKNonCodeElementsListOwner.takeNonCodeElementsFrom(other: JKNonCodeElementsListOwner) { - leftNonCodeElements = other.leftNonCodeElements - rightNonCodeElements = other.rightNonCodeElements + leftNonCodeElements += other.leftNonCodeElements + rightNonCodeElements += other.rightNonCodeElements } -fun JKNonCodeElementsListOwner.appendNonCodeElementsFrom(other: JKNonCodeElementsListOwner) { - leftNonCodeElements = other.leftNonCodeElements + leftNonCodeElements - rightNonCodeElements = rightNonCodeElements + other.rightNonCodeElements -} - -fun List.dropSpacesAtBegining() = +fun List.dropSpacesAtBeginning() = dropWhile { it is JKSpaceElement } fun JKTreeElement.commentsFromInside(): List { @@ -62,8 +57,8 @@ inline fun List.withNonCodeElementsF } fun JKNonCodeElementsListOwner.clearNonCodeElements() { - leftNonCodeElements = emptyList() - rightNonCodeElements = emptyList() + leftNonCodeElements.clear() + rightNonCodeElements.clear() } interface JKTokenElement : JKNonCodeElementsListOwner { diff --git a/nj2k/testData/newJ2k/comments/commentsForConstructors.kt b/nj2k/testData/newJ2k/comments/commentsForConstructors.kt index 9cd98939e52..ec51aff9b9d 100644 --- a/nj2k/testData/newJ2k/comments/commentsForConstructors.kt +++ b/nj2k/testData/newJ2k/comments/commentsForConstructors.kt @@ -5,10 +5,11 @@ internal class A // end of primary constructor body // this is a secondary constructor 2 constructor(s: String) : this(s.length) {} // end of secondary constructor 2 body -// this is a secondary constructor 1 + +// this is a primary constructor - // this is a primary constructor + // this is a secondary constructor 1 // end of secondary constructor 1 body diff --git a/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt b/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt index a8d1cdcb438..25eb466efb4 100644 --- a/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt +++ b/nj2k/testData/newJ2k/javaStreamsApi/formatting.kt @@ -3,7 +3,7 @@ import java.util.stream.Collectors internal class Test { fun main(lst: List) { - val newLst = /*before list*/lst/*after list*/.stream/*before stream*/()/* after stream*/ + val newLst = /*before list*/ lst/*after list*/.stream/*before stream*/()/* after stream*/ .filter { x: Int -> x > 10 } .map { x: Int -> x + 2 }/*some comment*/.distinct/*another comment*/()/* one more comment */.sorted()/*another one comment*/ .sorted(Comparator.naturalOrder())