From bcb8742120b92c8bfc025dfe6f7974ca97bf2d05 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 13 Feb 2019 12:24:36 +0300 Subject: [PATCH] New J2K: Add support of named parameters --- .../kotlin/nj2k/JavaToJKTreeBuilder.kt | 8 ++-- .../jetbrains/kotlin/nj2k/NewCodeBuilder.kt | 17 +++++++- .../conversions/ArrayInitializerConversion.kt | 13 +++--- .../nj2k/conversions/BlockToRunConversion.kt | 4 +- .../BoxedTypeOperationsConversion.kt | 9 ++--- .../conversions/BuiltinMembersConversion.kt | 16 ++++---- .../conversions/DefaultArgumentsConversion.kt | 5 ++- .../conversions/EqualsOperatorConversion.kt | 11 ++--- .../kotlin/nj2k/conversions/ForConversion.kt | 8 ++-- .../conversions/ImplicitCastsConversion.kt | 20 +++++----- ...sertDefaultPrimaryConstructorConversion.kt | 2 +- .../conversions/LabeledStatementConversion.kt | 13 ++++-- .../OperatorExpressionConversion.kt | 11 +++-- .../SynchronizedStatementConversion.kt | 7 ++-- .../org/jetbrains/kotlin/nj2k/expressions.kt | 32 ++++++++++----- .../org/jetbrains/kotlin/nj2k/tree/impl/j.kt | 10 ++--- .../org/jetbrains/kotlin/nj2k/tree/impl/jk.kt | 40 ++++++++++++++----- .../org/jetbrains/kotlin/nj2k/tree/impl/k.kt | 20 ++++------ nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt | 5 +-- nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt | 19 +++++++-- .../kotlin/nj2k/tree/visitors/JKVisitor.kt | 6 ++- .../nj2k/tree/visitors/JKVisitorVoid.kt | 10 ++++- 22 files changed, 182 insertions(+), 104 deletions(-) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt index 3474ed9529d..1ab4aeaa4af 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/JavaToJKTreeBuilder.kt @@ -236,13 +236,13 @@ class JavaToJKTreeBuilder( val receiver = arguments.expressions.firstOrNull()?.toJK()?.parenthesizeIfBinaryExpression() JKJavaMethodCallExpressionImpl( symbolProvider.provideDirectSymbol(origin) as JKMethodSymbol, - arguments.expressions.drop(1).map { it.toJK() }.toExpressionList(), + arguments.expressions.drop(1).map { it.toJK() }.toArgumentList(), typeArguments ).qualified(receiver) } else { JKJavaMethodCallExpressionImpl( symbolProvider.provideDirectSymbol(origin) as JKMethodSymbol, - arguments.expressions.map { it.toJK() }.toExpressionList(), + arguments.toJK(), typeArguments ).qualified(qualifier) } @@ -359,7 +359,7 @@ class JavaToJKTreeBuilder( } ?: JKTypeArgumentListImpl() JKJavaNewExpressionImpl( classSymbol, - argumentList.toJK(), + argumentList?.toJK() ?: JKArgumentListImpl(), typeArgumentList, with(declarationMapper) { anonymousClass?.createClassBody() } ?: JKEmptyClassBodyImpl() ) @@ -447,7 +447,7 @@ class JavaToJKTreeBuilder( fun PsiEnumConstant.toJK(): JKEnumConstant = JKEnumConstantImpl( JKNameIdentifierImpl(name), - with(expressionTreeMapper) { argumentList.toJK() }, + with(expressionTreeMapper) { argumentList?.toJK() ?: JKArgumentListImpl() }, initializingClass?.createClassBody() ?: JKEmptyClassBodyImpl(), JKTypeElementImpl(JKClassTypeImpl(symbolProvider.provideDirectSymbol(containingClass!!) as JKClassSymbol, emptyList())) ).also { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt index 83fce3bb4dd..3cc4c41d6e7 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/NewCodeBuilder.kt @@ -273,7 +273,7 @@ class NewCodeBuilder { override fun visitEnumConstant(enumConstant: JKEnumConstant) { enumConstant.name.accept(this) - if (enumConstant.arguments.expressions.isNotEmpty()) { + if (enumConstant.arguments.arguments.isNotEmpty()) { printer.par { enumConstant.arguments.accept(this) } @@ -513,6 +513,21 @@ class NewCodeBuilder { renderList(expressionList.expressions) { it.accept(this) } } + + override fun visitArgumentList(argumentList: JKArgumentList) { + renderList(argumentList.arguments) { it.accept(this) } + } + + override fun visitArgument(argument: JKArgument) { + argument.value.accept(this) + } + + override fun visitNamedArgument(namedArgument: JKNamedArgument) { + namedArgument.name.accept(this) + printer.printWithNoIndent(" = ") + namedArgument.value.accept(this) + } + override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) { printer.printWithNoIndent(FqName(methodCallExpression.identifier.fqName).shortName().asString().escaped()) methodCallExpression.typeArgumentList.accept(this) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt index a6ea7af10e2..a0ec0f6b2fd 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt @@ -7,8 +7,9 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.PrimitiveType -import org.jetbrains.kotlin.nj2k.ConversionContext import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.nj2k.ConversionContext +import org.jetbrains.kotlin.nj2k.toArgumentList import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.resolve.CollectionLiteralResolver @@ -26,7 +27,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur CollectionLiteralResolver.ARRAY_OF_FUNCTION.asString() newElement = JKJavaMethodCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin.$arrayConstructorName"), - JKExpressionListImpl(element.initializer.also { element.initializer = emptyList() }) + element.initializer.also { element.initializer = emptyList() }.toArgumentList() ) } else if (element is JKJavaNewEmptyArray) { newElement = buildArrayInitializer( @@ -42,13 +43,13 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur return if (type !is JKJavaPrimitiveType) { JKJavaMethodCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin/arrayOfNulls"), - JKExpressionListImpl(dimensions[0]), + JKArgumentListImpl(dimensions[0]), JKTypeArgumentListImpl(listOf(JKTypeElementImpl(type.updateNullability(Nullability.NotNull)))) ) } else { JKJavaNewExpressionImpl( context.symbolProvider.provideByFqName(type.arrayFqName()), - JKExpressionListImpl(dimensions[0]), + JKArgumentListImpl(dimensions[0]), JKTypeArgumentListImpl(emptyList()) ) } @@ -56,7 +57,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur if (dimensions[1] !is JKStubExpression) { return JKJavaMethodCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin.Array"), - JKExpressionListImpl( + JKArgumentListImpl( dimensions[0], JKLambdaExpressionImpl( JKExpressionStatementImpl(buildArrayInitializer(dimensions.subList(1, dimensions.size), type)), @@ -79,7 +80,7 @@ class ArrayInitializerConversion(private val context: ConversionContext) : Recur } return JKJavaMethodCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin/arrayOfNulls"), - JKExpressionListImpl(dimensions[0]), + JKArgumentListImpl(dimensions[0]), JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType))) ) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt index 4985ffd83ce..72024a3619d 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BlockToRunConversion.kt @@ -5,14 +5,12 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.nj2k.ConversionContext import org.jetbrains.kotlin.nj2k.tree.JKBlock import org.jetbrains.kotlin.nj2k.tree.JKBlockStatement import org.jetbrains.kotlin.nj2k.tree.JKDeclaration import org.jetbrains.kotlin.nj2k.tree.JKTreeElement import org.jetbrains.kotlin.nj2k.tree.impl.* -import org.jetbrains.kotlin.name.ClassId class BlockToRunConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -29,7 +27,7 @@ class BlockToRunConversion(private val context: ConversionContext) : RecursiveAp JKBlockStatementImpl(element.block), emptyList() ) - val call = JKKtCallExpressionImpl(context.symbolProvider.provideByFqName("kotlin.run", true), JKExpressionListImpl(listOf(lambda))) + val call = JKKtCallExpressionImpl(context.symbolProvider.provideByFqName("kotlin.run", true), JKArgumentListImpl(lambda)) return recurse(JKExpressionStatementImpl(call)) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt index 00b81ec2e83..672204f5816 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BoxedTypeOperationsConversion.kt @@ -7,9 +7,8 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.ConversionContext import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.JKExpressionListImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKArgumentListImpl import org.jetbrains.kotlin.nj2k.tree.impl.JKKtCallExpressionImpl -import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType class BoxedTypeOperationsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -26,8 +25,8 @@ class BoxedTypeOperationsConversion(private val context: ConversionContext) : Re private fun convertCreationOfBoxedType(newExpression: JKJavaNewExpression): JKExpression? { if (newExpression.classSymbol.fqName !in boxedTypeFqNames) return null - val singleArgument = newExpression.arguments.expressions.singleOrNull() ?: return null - return singleArgument.detached(newExpression.arguments) + val singleArgument = newExpression.arguments.arguments.singleOrNull() ?: return null + return singleArgument::value.detached() } private fun convertBoxedTypeUnwrapping(methodCallExpression: JKMethodCallExpression): JKExpression? { @@ -43,7 +42,7 @@ class BoxedTypeOperationsConversion(private val context: ConversionContext) : Re context.symbolProvider.provideByFqName( "kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}" ), - JKExpressionListImpl() + JKArgumentListImpl() ) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt index 8c5f589bcfa..f33855e2f7a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt @@ -33,13 +33,15 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi } else newSelector } ReplaceType.FULL_REPLACE -> newSelector + }.let { expression -> + conversion.actionAfter?.invoke(expression.copyTreeAndDetach()) ?: expression } } private fun JKExpression.getConversion(): Conversion? = when (this) { is JKMethodCallExpression -> - conversions[identifier.deepestFqName()]?.firstOrNull() { conversion -> - conversion.from is Method && conversion.byArgumentsFilter?.invoke(arguments.expressions) ?: true + conversions[identifier.deepestFqName()]?.firstOrNull { conversion -> + conversion.from is Method && conversion.byArgumentsFilter?.invoke(arguments.arguments.map { it.value }) ?: true } is JKFieldAccessExpression -> conversions[identifier.deepestFqName()]?.firstOrNull { conversion -> conversion.from is Field } @@ -53,7 +55,7 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi private inner class MethodBuilder( private val fqName: String, - private val argumentsProvider: (JKExpressionList) -> JKExpressionList + private val argumentsProvider: (JKArgumentList) -> JKArgumentList ) : ResultBuilder { override fun build(from: JKExpression): JKExpression = when (from) { @@ -66,7 +68,7 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi is JKFieldAccessExpression -> JKKtCallExpressionImpl( context.symbolProvider.provideByFqNameMulti(fqName), - JKExpressionListImpl(), + JKArgumentListImpl(), JKTypeArgumentListImpl() ) else -> error("Bad conversion") @@ -96,13 +98,13 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi override fun build(from: JKExpression): JKExpression = when (from) { is JKMethodCallExpression -> { - val arguments = from.arguments::expressions.detached() + val arguments = from.arguments::arguments.detached() JKQualifiedExpressionImpl( - arguments.first().parenthesizeIfBinaryExpression(), + arguments.first()::value.detached().parenthesizeIfBinaryExpression(), JKKtQualifierImpl.DOT, JKKtCallExpressionImpl( context.symbolProvider.provideByFqNameMulti(fqName), - JKExpressionListImpl(arguments.drop(1)), + JKArgumentListImpl(arguments.drop(1)), from::typeArgumentList.detached() ) ) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt index 57b54b75325..07641919ff0 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/DefaultArgumentsConversion.kt @@ -52,7 +52,7 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur for (i in method.parameters.indices) { val parameter = method.parameters[i] val targetParameter = calledMethod.parameters[i] - val argument = call.arguments.expressions[i] + val argument = call.arguments.arguments[i].value if (parameter.name.value != targetParameter.name.value) continue@checkMethod // if (parameter.type.type != targetParameter.type.type) continue@checkMethod // if (argument !is JKFieldAccessExpression || argument.identifier.target != parameter) continue@checkMethod @@ -60,7 +60,8 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur call.arguments.invalidate() - val defaults = call.arguments.expressions + val defaults = call.arguments.arguments + .map { it::value.detached() } .zip(calledMethod.parameters) .drop(method.parameters.size) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt index 689b04c84a7..83ab249c8d9 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/EqualsOperatorConversion.kt @@ -5,27 +5,24 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.nj2k.ConversionContext -import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.nj2k.equalsExpression import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* -import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl +import org.jetbrains.kotlin.nj2k.tree.impl.deepestFqName class EqualsOperatorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { if (element !is JKQualifiedExpression) return recurse(element) if (element.receiver is JKSuperExpression) return recurse(element) val selector = element.selector as? JKMethodCallExpression ?: return (element) - val argument = selector.arguments.expressions.singleOrNull() ?: return recurse(element) + val argument = selector.arguments.arguments.singleOrNull() ?: return recurse(element) if (selector.identifier.deepestFqName() == "java.lang.Object.equals") { return recurse( JKParenthesizedExpressionImpl( equalsExpression( element::receiver.detached(), - argument.detached(selector.arguments), + argument::value.detached(), context.symbolProvider ) ) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt index 16ca8b69939..ecc02d70293 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ForConversion.kt @@ -9,11 +9,11 @@ import com.intellij.psi.* import com.intellij.util.IncorrectOperationException import org.jetbrains.kotlin.j2k.ReferenceSearcher import org.jetbrains.kotlin.j2k.hasWriteAccesses +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.nj2k.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.ClassId class ForConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -242,7 +242,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl JKQualifiedExpressionImpl( indices, JKKtQualifierImpl.DOT, - JKJavaMethodCallExpressionImpl(reversedSymbol, JKExpressionListImpl()) + JKJavaMethodCallExpressionImpl(reversedSymbol, JKArgumentListImpl()) ) } else indices } @@ -251,7 +251,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl private fun indicesByCollectionSize(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? { val methodCall = javaSizeCall.selector as? JKMethodCallExpression ?: return null return if (methodCall.identifier.deepestFqName() == "java.util.Collection.size" - && methodCall.arguments.expressions.isEmpty() + && methodCall.arguments.arguments.isEmpty() ) toIndicesCall(javaSizeCall) else null } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt index d54ad626faa..8969541a856 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt @@ -5,11 +5,12 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.nj2k.* import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.nj2k.* import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType +import org.jetbrains.kotlin.utils.addToStdlib.safeAs class ImplicitCastsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -108,18 +109,17 @@ class ImplicitCastsConversion(private val context: ConversionContext) : Recursiv if (expression.identifier.isUnresolved()) return val parameterTypes = expression.identifier.parameterTypesWithUnfoldedVarargs() ?: return val newArguments = - (expression.arguments.expressions.asSequence() zip parameterTypes) + (expression.arguments.arguments.asSequence() zip parameterTypes) .map { (expression, toType) -> - expression.castTo(toType) + expression.value.castTo(toType) }.toList() val needUpdate = newArguments.any { it != null } if (needUpdate) { - expression.arguments = JKExpressionListImpl( - (newArguments zip expression.arguments.expressions) - .map { (newArgument, oldArgument) -> - (newArgument ?: oldArgument).copyTreeAndDetach() - } - ) + for ((newArgument, oldArgument) in newArguments zip expression.arguments.arguments) { + if (newArgument != null) { + oldArgument.value = newArgument.copyTreeAndDetach() + } + } } } @@ -171,7 +171,7 @@ class ImplicitCastsConversion(private val context: ConversionContext) : Recursiv JKKtQualifierImpl.DOT, JKJavaMethodCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin.$initialTypeName.$conversionFunctionName"), - JKExpressionListImpl() + JKArgumentListImpl() ) ) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt index 08d2a0f0f4b..c66da72fe7f 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/InsertDefaultPrimaryConstructorConversion.kt @@ -39,7 +39,7 @@ class InsertDefaultPrimaryConstructorConversion(private val context: ConversionC element ) ) - constructor.delegationCall = JKDelegationConstructorCallImpl(superConstructor, JKSuperExpressionImpl(), JKExpressionListImpl()) + constructor.delegationCall = JKDelegationConstructorCallImpl(superConstructor, JKSuperExpressionImpl(), JKArgumentListImpl()) } return recurse(element) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt index 927bbd812be..60c592067ed 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/LabeledStatementConversion.kt @@ -5,9 +5,14 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.nj2k.blockStatement -import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.asStatement +import org.jetbrains.kotlin.nj2k.tree.JKLabeledStatement +import org.jetbrains.kotlin.nj2k.tree.JKTreeElement +import org.jetbrains.kotlin.nj2k.tree.detached +import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementWithoutBracketsImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConvertedFromForLoopSyntheticWhileStatementImpl +import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl class LabeledStatementConversion : RecursiveApplicableConversionBase() { @@ -19,7 +24,7 @@ class LabeledStatementConversion : RecursiveApplicableConversionBase() { JKBlockStatementWithoutBracketsImpl( JKBlockImpl( statement::variableDeclaration.detached(), - JKLabeledStatementImpl(statement::whileStatement.detached(), element::labels.detached()) + JKLabeledStatementImpl(statement::whileStatement.detached(), element::labels.detached()).asStatement() ) ) ) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/OperatorExpressionConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/OperatorExpressionConversion.kt index 38a86694e05..03c0d14e461 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/OperatorExpressionConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/OperatorExpressionConversion.kt @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.nj2k.conversions import com.intellij.psi.JavaTokenType -import org.jetbrains.kotlin.nj2k.* +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.nj2k.ConversionContext +import org.jetbrains.kotlin.nj2k.kotlinBinaryExpression +import org.jetbrains.kotlin.nj2k.kotlinPostfixExpression +import org.jetbrains.kotlin.nj2k.kotlinPrefixExpression import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.impl.* -import org.jetbrains.kotlin.lexer.KtTokens class OperatorExpressionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -47,7 +50,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec val invCall = JKKtCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin.Int.inv"),//TODO check if Long - JKExpressionListImpl() + JKArgumentListImpl() ) JKQualifiedExpressionImpl( JKParenthesizedExpressionImpl(operand), @@ -70,7 +73,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec val toStringCall = JKKtCallExpressionImpl( context.symbolProvider.provideByFqName("kotlin.Any.toString"), - JKExpressionListImpl() + JKArgumentListImpl() ) val qualifiedCall = JKQualifiedExpressionImpl(left, JKKtQualifierImpl.DOT, toStringCall) kotlinBinaryExpression(qualifiedCall, right, KtTokens.PLUS, context.symbolProvider) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SynchronizedStatementConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SynchronizedStatementConversion.kt index 07421524445..f605dbd147b 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SynchronizedStatementConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SynchronizedStatementConversion.kt @@ -5,8 +5,9 @@ package org.jetbrains.kotlin.nj2k.conversions -import org.jetbrains.kotlin.nj2k.* -import org.jetbrains.kotlin.nj2k.tree.* +import org.jetbrains.kotlin.nj2k.ConversionContext +import org.jetbrains.kotlin.nj2k.tree.JKJavaSynchronizedStatement +import org.jetbrains.kotlin.nj2k.tree.JKTreeElement import org.jetbrains.kotlin.nj2k.tree.impl.* @@ -21,7 +22,7 @@ class SynchronizedStatementConversion(private val context: ConversionContext) : val synchronizedCall = JKKtCallExpressionImpl( context.symbolProvider.provideByFqNameMulti("kotlin.synchronized"), - JKExpressionListImpl( + JKArgumentListImpl( element.lockExpression, lambdaBody ) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt index e69cd257daa..9a1d0f3a4cc 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt @@ -10,16 +10,17 @@ import com.intellij.psi.PsiElement import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.j2k.ast.Nullability -import org.jetbrains.kotlin.nj2k.conversions.RecursiveApplicableConversionBase -import org.jetbrains.kotlin.nj2k.conversions.multiResolveFqName -import org.jetbrains.kotlin.nj2k.conversions.resolveFqName -import org.jetbrains.kotlin.nj2k.tree.* -import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.nj2k.conversions.RecursiveApplicableConversionBase +import org.jetbrains.kotlin.nj2k.conversions.multiResolveFqName +import org.jetbrains.kotlin.nj2k.tree.* +import org.jetbrains.kotlin.nj2k.tree.impl.* import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.utils.addToStdlib.safeAs import java.math.BigInteger fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider, nullability: Nullability = Nullability.Nullable): JKClassType = @@ -289,7 +290,7 @@ fun useExpression( val methodCall = JKJavaMethodCallExpressionImpl( useSymbol, - JKExpressionListImpl(listOf(lambda)) + listOf(lambda).toArgumentList() ) return JKQualifiedExpressionImpl(receiver, JKKtQualifierImpl.DOT, methodCall) } @@ -300,7 +301,7 @@ fun kotlinAssert(assertion: JKExpression, message: JKExpression?, symbolProvider "assert", kotlinTypeByName(KotlinBuiltIns.FQ_NAMES.unit.asString(), symbolProvider) ), - JKExpressionListImpl(listOfNotNull(assertion, message)) + (listOfNotNull(assertion, message)).toArgumentList() ) fun jvmAnnotation(name: String, symbolProvider: JKSymbolProvider) = @@ -502,7 +503,7 @@ fun runExpression(body: JKStatement, symbolProvider: JKSymbolProvider): JKExpres ) return JKKtCallExpressionImpl( symbolProvider.provideByFqNameMulti("kotlin.run"), - JKExpressionListImpl(listOf(lambda)) + (listOf(lambda)).toArgumentList() ) } @@ -525,7 +526,17 @@ fun JKAnnotationMemberValue.toExpression(symbolProvider: JKSymbolProvider): JKEx this is JKAnnotation -> JKJavaNewExpressionImpl( classSymbol, - JKExpressionListImpl(arguments.map { it.value.detached(this).toExpression(symbolProvider) }), + JKArgumentListImpl( + arguments.map { argument -> + val value = argument.value.copyTreeAndDetach().toExpression(symbolProvider) + when (argument) { + is JKAnnotationNameParameter -> + JKNamedArgumentImpl(value, JKNameIdentifierImpl(argument.name.value)) + else -> JKArgumentImpl(value) + } + + } + ), JKTypeArgumentListImpl() ) this is JKKtAnnotationArrayInitializerExpression -> @@ -539,6 +550,9 @@ fun JKAnnotationMemberValue.toExpression(symbolProvider: JKSymbolProvider): JKEx inline fun JKClass.primaryConstructor(): JKKtPrimaryConstructor? = classBody.declarations.firstIsInstanceOrNull() +fun List.toArgumentList(): JKArgumentList = + JKArgumentListImpl(map { JKArgumentImpl(it) }) + fun JKAnnotation.isVarargsArgument(index: Int): Boolean { val target = classSymbol.target return when (target) { diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt index 4b0dc66a17b..8c326436ca6 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/j.kt @@ -20,10 +20,10 @@ import com.intellij.psi.JavaTokenType import com.intellij.psi.impl.source.tree.ElementType.OPERATION_BIT_SET import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor -import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType class JKJavaFieldImpl( @@ -197,12 +197,12 @@ sealed class JKJavaQualifierImpl : JKQualifier { class JKJavaMethodCallExpressionImpl( override var identifier: JKMethodSymbol, - arguments: JKExpressionList, + arguments: JKArgumentList, typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl() ) : JKJavaMethodCallExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethodCallExpression(this, data) - override var arguments: JKExpressionList by child(arguments) + override var arguments: JKArgumentList by child(arguments) override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList) } @@ -219,11 +219,11 @@ class JKEmptyClassBodyImpl : JKEmptyClassBody, JKBranchElementBase() { class JKJavaNewExpressionImpl( override var classSymbol: JKClassSymbol, - arguments: JKExpressionList, + arguments: JKArgumentList, typeArgumentList: JKTypeArgumentList, classBody: JKClassBody = JKEmptyClassBodyImpl() ) : JKJavaNewExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { - override var arguments: JKExpressionList by child(arguments) + override var arguments: JKArgumentList by child(arguments) override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList) override var classBody: JKClassBody by child(classBody) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt index e8003abf91a..d15fc0f62ca 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/jk.kt @@ -19,17 +19,15 @@ package org.jetbrains.kotlin.nj2k.tree.impl import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.nj2k.JKSymbolProvider import org.jetbrains.kotlin.j2k.ast.Nullability -import org.jetbrains.kotlin.nj2k.conversions.resolveFqName +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.nj2k.JKSymbolProvider import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.BOOLEAN import org.jetbrains.kotlin.nj2k.tree.JKLiteralExpression.LiteralType.NULL import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtNamedFunction class JKFileImpl( @@ -380,11 +378,11 @@ class JKInheritanceInfoImpl( class JKDelegationConstructorCallImpl( override val identifier: JKMethodSymbol, expression: JKExpression, - arguments: JKExpressionList + arguments: JKArgumentList ) : JKBranchElementBase(), JKDelegationConstructorCall, PsiOwner by PsiOwnerImpl() { override var typeArgumentList: JKTypeArgumentList by child(JKTypeArgumentListImpl()) override val expression: JKExpression by child(expression) - override var arguments: JKExpressionList by child(arguments) + override var arguments: JKArgumentList by child(arguments) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitDelegationConstructorCall(this, data) } @@ -453,12 +451,12 @@ class JKTypeParameterTypeImpl( class JKEnumConstantImpl( name: JKNameIdentifier, - arguments: JKExpressionList, + arguments: JKArgumentList, body: JKClassBody, type: JKTypeElement ) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override var name: JKNameIdentifier by child(name) - override val arguments: JKExpressionList by child(arguments) + override val arguments: JKArgumentList by child(arguments) override val body: JKClassBody by child(body) override var type: JKTypeElement by child(type) override var initializer: JKExpression by child(JKStubExpressionImpl()) @@ -539,4 +537,28 @@ class JKAnnotationNameParameterImpl( override val name: JKNameIdentifier by child(name) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitAnnotationNameParameter(this, data) -} \ No newline at end of file +} + +class JKNamedArgumentImpl( + value: JKExpression, + name: JKNameIdentifier +) : JKNamedArgument, JKBranchElementBase() { + override var value by child(value) + override val name by child(name) + + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitNamedArgument(this, data) +} + +class JKArgumentImpl(value: JKExpression) : JKArgument, JKBranchElementBase() { + override var value by child(value) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitArgument(this, data) +} + +class JKArgumentListImpl(arguments: List = emptyList()) : JKArgumentList, JKBranchElementBase() { + constructor(vararg arguments: JKArgument) : this(arguments.toList()) + constructor(vararg values: JKExpression) : this(values.map { JKArgumentImpl(it) }) + + override var arguments by children(arguments) + + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitArgumentList(this, data) +} diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt index d0016d4f978..4fcf519c6ad 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/impl/k.kt @@ -16,12 +16,10 @@ package org.jetbrains.kotlin.nj2k.tree.impl -import com.intellij.psi.JavaTokenType import org.jetbrains.kotlin.j2k.ast.Nullability -import com.intellij.psi.tree.IElementType +import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.nj2k.tree.* import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor -import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.utils.addToStdlib.cast @@ -75,12 +73,12 @@ sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() { class JKKtCallExpressionImpl( override val identifier: JKMethodSymbol, - arguments: JKExpressionList, + arguments: JKArgumentList, typeArgumentList: JKTypeArgumentList = JKTypeArgumentListImpl() ) : JKKtMethodCallExpression, JKBranchElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtMethodCallExpression(this, data) - override var arguments: JKExpressionList by child(arguments) + override var arguments: JKArgumentList by child(arguments) override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList) } @@ -122,15 +120,13 @@ class JKKtAlsoCallExpressionImpl( ) : JKKtAlsoCallExpression, JKBranchElementBase() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtAlsoCallExpression(this, data) override var statement - get() = arguments.expressions.first().cast().statement + get() = arguments.arguments.first().value.cast().statement set(it) { - arguments.expressions.first().cast().statement = it + arguments.arguments.first().value.cast().statement = it } - override var arguments: JKExpressionList by child( - JKExpressionListImpl( - listOf( - JKLambdaExpressionImpl(statement, emptyList()) - ) + override var arguments: JKArgumentList by child( + JKArgumentListImpl( + JKLambdaExpressionImpl(statement, emptyList()) ) ) override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt index 35072d2593f..925a596dc0e 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/j.kt @@ -16,8 +16,7 @@ package org.jetbrains.kotlin.nj2k.tree -import org.jetbrains.kotlin.idea.search.usagesSearch.constructor -import org.jetbrains.kotlin.nj2k.tree.impl.* +import org.jetbrains.kotlin.nj2k.tree.impl.JKClassSymbol interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKAnnotationListOwner @@ -37,7 +36,7 @@ interface JKEmptyClassBody : JKClassBody interface JKJavaNewExpression : JKExpression, JKTypeArgumentListOwner, PsiOwner { val classSymbol: JKClassSymbol - var arguments: JKExpressionList + var arguments: JKArgumentList var classBody: JKClassBody } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt index 16a5d69f5a1..9f0c4df4b16 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/jk.kt @@ -259,7 +259,7 @@ interface JKTypeArgumentListOwner : JKTreeElement { interface JKMethodCallExpression : JKExpression, JKTypeArgumentListOwner, JKBranchElement { val identifier: JKMethodSymbol - var arguments: JKExpressionList + var arguments: JKArgumentList } interface JKFieldAccessExpression : JKAssignableExpression { @@ -288,6 +288,19 @@ interface JKExpressionList : JKTreeElement, JKBranchElement { var expressions: List } +interface JKArgument : JKTreeElement, JKBranchElement { + var value: JKExpression +} + +interface JKNamedArgument : JKArgument { + val name: JKNameIdentifier +} + +interface JKArgumentList : JKTreeElement, JKBranchElement { + var arguments: List +} + + interface JKLiteralExpression : JKExpression { val literal: String val type: LiteralType @@ -367,7 +380,7 @@ interface JKLambdaExpression : JKExpression { interface JKDelegationConstructorCall : JKMethodCallExpression { override val identifier: JKMethodSymbol val expression: JKExpression - override var arguments: JKExpressionList + override var arguments: JKArgumentList } interface JKLabel : JKTreeElement @@ -403,7 +416,7 @@ interface JKTypeParameterListOwner : JKTreeElement { } interface JKEnumConstant : JKVariable { - val arguments: JKExpressionList + val arguments: JKArgumentList val body: JKClassBody } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitor.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitor.kt index aed61a044b3..b35c0dccb5a 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitor.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitor.kt @@ -46,6 +46,9 @@ interface JKVisitor { fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): R = visitExpression(parenthesizedExpression, data) fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data) fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitTreeElement(expressionList, data) + fun visitArgument(argument: JKArgument, data: D): R = visitTreeElement(argument, data) + fun visitNamedArgument(namedArgument: JKNamedArgument, data: D): R = visitArgument(namedArgument, data) + fun visitArgumentList(argumentList: JKArgumentList, data: D): R = visitTreeElement(argumentList, data) fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data) fun visitParameter(parameter: JKParameter, data: D): R = visitVariable(parameter, data) fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data) @@ -69,7 +72,7 @@ interface JKVisitor { fun visitLabelEmpty(labelEmpty: JKLabelEmpty, data: D): R = visitLabel(labelEmpty, data) fun visitLabelText(labelText: JKLabelText, data: D): R = visitLabel(labelText, data) fun visitContinueStatement(continueStatement: JKContinueStatement, data: D): R = visitStatement(continueStatement, data) - fun visitLabeledStatement(labeledStatement: JKLabeledStatement, data: D): R = visitStatement(labeledStatement, data) + fun visitLabeledStatement(labeledStatement: JKLabeledStatement, data: D): R = visitExpression(labeledStatement, data) fun visitEmptyStatement(emptyStatement: JKEmptyStatement, data: D): R = visitStatement(emptyStatement, data) fun visitTypeParameterList(typeParameterList: JKTypeParameterList, data: D): R = visitTreeElement(typeParameterList, data) fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data) @@ -105,6 +108,7 @@ interface JKVisitor { fun visitJavaContinueStatement(javaContinueStatement: JKJavaContinueStatement, data: D): R = visitStatement(javaContinueStatement, data) fun visitJavaSynchronizedStatement(javaSynchronizedStatement: JKJavaSynchronizedStatement, data: D): R = visitStatement(javaSynchronizedStatement, data) fun visitJavaAnnotationMethod(javaAnnotationMethod: JKJavaAnnotationMethod, data: D): R = visitMethod(javaAnnotationMethod, data) + fun visitJavaStaticInitDeclaration(javaStaticInitDeclaration: JKJavaStaticInitDeclaration, data: D): R = visitDeclaration(javaStaticInitDeclaration, data) fun visitKtGetterOrSetter(ktGetterOrSetter: JKKtGetterOrSetter, data: D): R = visitTreeElement(ktGetterOrSetter, data) fun visitKtEmptyGetterOrSetter(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter, data: D): R = visitKtGetterOrSetter(ktEmptyGetterOrSetter, data) fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, data) diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitorVoid.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitorVoid.kt index 4e735325fb5..4756110b229 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitorVoid.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/tree/visitors/JKVisitorVoid.kt @@ -89,6 +89,12 @@ interface JKVisitorVoid : JKVisitor { override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: Nothing?) = visitTypeCastExpression(typeCastExpression) fun visitExpressionList(expressionList: JKExpressionList) = visitTreeElement(expressionList, null) override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList) + fun visitArgument(argument: JKArgument) = visitTreeElement(argument, null) + override fun visitArgument(argument: JKArgument, data: Nothing?) = visitArgument(argument) + fun visitNamedArgument(namedArgument: JKNamedArgument) = visitArgument(namedArgument, null) + override fun visitNamedArgument(namedArgument: JKNamedArgument, data: Nothing?) = visitNamedArgument(namedArgument) + fun visitArgumentList(argumentList: JKArgumentList) = visitTreeElement(argumentList, null) + override fun visitArgumentList(argumentList: JKArgumentList, data: Nothing?) = visitArgumentList(argumentList) fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null) override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?) = visitLiteralExpression(literalExpression) fun visitParameter(parameter: JKParameter) = visitVariable(parameter, null) @@ -135,7 +141,7 @@ interface JKVisitorVoid : JKVisitor { override fun visitLabelText(labelText: JKLabelText, data: Nothing?) = visitLabelText(labelText) fun visitContinueStatement(continueStatement: JKContinueStatement) = visitStatement(continueStatement, null) override fun visitContinueStatement(continueStatement: JKContinueStatement, data: Nothing?) = visitContinueStatement(continueStatement) - fun visitLabeledStatement(labeledStatement: JKLabeledStatement) = visitStatement(labeledStatement, null) + fun visitLabeledStatement(labeledStatement: JKLabeledStatement) = visitExpression(labeledStatement, null) override fun visitLabeledStatement(labeledStatement: JKLabeledStatement, data: Nothing?) = visitLabeledStatement(labeledStatement) fun visitEmptyStatement(emptyStatement: JKEmptyStatement) = visitStatement(emptyStatement, null) override fun visitEmptyStatement(emptyStatement: JKEmptyStatement, data: Nothing?) = visitEmptyStatement(emptyStatement) @@ -207,6 +213,8 @@ interface JKVisitorVoid : JKVisitor { override fun visitJavaSynchronizedStatement(javaSynchronizedStatement: JKJavaSynchronizedStatement, data: Nothing?) = visitJavaSynchronizedStatement(javaSynchronizedStatement) fun visitJavaAnnotationMethod(javaAnnotationMethod: JKJavaAnnotationMethod) = visitMethod(javaAnnotationMethod, null) override fun visitJavaAnnotationMethod(javaAnnotationMethod: JKJavaAnnotationMethod, data: Nothing?) = visitJavaAnnotationMethod(javaAnnotationMethod) + fun visitJavaStaticInitDeclaration(javaStaticInitDeclaration: JKJavaStaticInitDeclaration) = visitDeclaration(javaStaticInitDeclaration, null) + override fun visitJavaStaticInitDeclaration(javaStaticInitDeclaration: JKJavaStaticInitDeclaration, data: Nothing?) = visitJavaStaticInitDeclaration(javaStaticInitDeclaration) fun visitKtGetterOrSetter(ktGetterOrSetter: JKKtGetterOrSetter) = visitTreeElement(ktGetterOrSetter, null) override fun visitKtGetterOrSetter(ktGetterOrSetter: JKKtGetterOrSetter, data: Nothing?) = visitKtGetterOrSetter(ktGetterOrSetter) fun visitKtEmptyGetterOrSetter(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter) = visitKtGetterOrSetter(ktEmptyGetterOrSetter, null)