diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index 99ba5cd243c..f4c6a299b8c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -23,15 +23,17 @@ object ConversionsRunner { private fun createRootConversion(context: ConversionContext) = batchPipe { + +JavaModifiersConversion() + +InternalClassConversion(context) + +ModalityConversion(context) +OperatorExpressionConversion(context) +ThrowStatementConversion() +ArrayInitializerConversion(context) +TryStatementConversion(context) - +ModalityConversion(context) +ImplicitInitializerConversion() +DefaultArgumentsConversion(context) +TypeMappingConversion(context) - +FieldToPropertyConversion() + +FieldToPropertyConversion(context) +PrintlnConversion(context) +BlockToRunConversion(context) +AssignmentAsExpressionToAlsoConversion(context) @@ -43,12 +45,11 @@ object ConversionsRunner { +PrimaryConstructorDetectConversion(context) +InsertDefaultPrimaryConstructorConversion(context) +FieldInitializersInPrimaryFromParamsConversion(context) - +JavaMethodToKotlinFunctionConversion() - +MainFunctionConversion() + +JavaMethodToKotlinFunctionConversion(context) + +MainFunctionConversion(context) +LiteralConversion() +AssertStatementConversion(context) +InnerClassConversion() - +ModifiersConversion(context) +StaticsToCompanionExtractConversion() +ClassToObjectPromotionConversion(context) +PolyadicExpressionConversion() diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt index 78a396ba085..8d5cb302d34 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JKSymbolProvider.kt @@ -7,10 +7,7 @@ package org.jetbrains.kotlin.j2k import com.intellij.psi.* import org.jetbrains.kotlin.j2k.conversions.resolveFqName -import org.jetbrains.kotlin.j2k.tree.JKClass -import org.jetbrains.kotlin.j2k.tree.JKDeclaration -import org.jetbrains.kotlin.j2k.tree.JKField -import org.jetbrains.kotlin.j2k.tree.JKMethod +import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtClassOrObject @@ -53,7 +50,7 @@ class JKSymbolProvider { fun provideUniverseSymbol(psi: PsiElement, jk: JKDeclaration): JKSymbol = provideUniverseSymbol(psi).also { when (it) { is JKUniverseClassSymbol -> it.target = jk as JKClass - is JKUniverseFieldSymbol -> it.target = jk as JKField + is JKUniverseFieldSymbol -> it.target = jk as JKVariable is JKUniverseMethodSymbol -> it.target = jk as JKMethod } symbolsByJK[jk] = it @@ -78,7 +75,7 @@ class JKSymbolProvider { JKUniverseClassSymbol().also { it.target = jk } } as JKClassSymbol - fun provideUniverseSymbol(jk: JKField): JKFieldSymbol = symbolsByJK.getOrPut(jk) { + fun provideUniverseSymbol(jk: JKVariable): JKFieldSymbol = symbolsByJK.getOrPut(jk) { JKUniverseFieldSymbol().also { it.target = jk } } as JKFieldSymbol diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 3cfb78f2d43..649216f09f3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -21,11 +21,7 @@ import com.intellij.psi.* 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.java.PsiLabeledStatementImpl -import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl -import com.intellij.psi.impl.source.tree.java.PsiNewExpressionImpl -import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl -import org.jetbrains.kotlin.j2k.ast.Mutability +import com.intellij.psi.impl.source.tree.java.* import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.* @@ -39,8 +35,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { private val declarationMapper = DeclarationMapper(expressionTreeMapper) - private val modifierMapper = ModifierMapper() - private inner class ExpressionTreeMapper { fun PsiExpression?.toJK(): JKExpression { return when (this) { @@ -264,12 +258,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { val implTypes = this.implementsList?.mapTypes().orEmpty() val extTypes = this.extendsList?.mapTypes().orEmpty() return JKClassImpl( - with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name!!), JKInheritanceInfoImpl(extTypes + implTypes), classKind, typeParameterList?.toJK() ?: JKTypeParameterListImpl(), - createClassBody() + createClassBody(), + modifiers(), + visibility(), + modality() ).also { jkClassImpl -> jkClassImpl.psi = this symbolProvider.provideUniverseSymbol(this, jkClassImpl) @@ -292,12 +288,58 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { with(modifierMapper) { modifierList.toJK() } ) + fun PsiMember.modality() = + when { + modifierList == null -> Modality.OPEN + hasModifierProperty(PsiModifier.FINAL) -> Modality.FINAL + hasModifierProperty(PsiModifier.ABSTRACT) -> Modality.ABSTRACT + else -> Modality.OPEN + } + + fun PsiMember.visibility() = + when { + modifierList == null -> Visibility.PACKAGE_PRIVATE + hasModifierProperty(PsiModifier.PACKAGE_LOCAL) -> Visibility.PACKAGE_PRIVATE + hasModifierProperty(PsiModifier.PRIVATE) -> Visibility.PRIVATE + hasModifierProperty(PsiModifier.PROTECTED) -> Visibility.PROTECTED + hasModifierProperty(PsiModifier.PUBLIC) -> Visibility.PUBLIC + else -> Visibility.PACKAGE_PRIVATE + } + + fun PsiMember.modifiers() = + if (modifierList == null) emptyList() + else + PsiModifier.MODIFIERS + .filter { this.modifierList!!.hasExplicitModifier(it) } + .mapNotNull { + when (it) { + PsiModifier.NATIVE -> ExtraModifier.NATIVE + PsiModifier.STATIC -> ExtraModifier.STATIC + PsiModifier.STRICTFP -> ExtraModifier.STRICTFP + PsiModifier.SYNCHRONIZED -> ExtraModifier.SYNCHRONIZED + PsiModifier.TRANSIENT -> ExtraModifier.TRANSIENT + PsiModifier.VOLATILE -> ExtraModifier.VOLATILE + + PsiModifier.PROTECTED -> null + PsiModifier.PUBLIC -> null + PsiModifier.PRIVATE -> null + PsiModifier.FINAL -> null + PsiModifier.ABSTRACT -> null + + else -> TODO("Not yet supported") + } + } + + fun PsiField.toJK(): JKJavaField { return JKJavaFieldImpl( - with(modifierMapper) { modifierList.toJK(finalAsMutability = true) }, with(expressionTreeMapper) { typeElement?.toJK() } ?: JKTypeElementImpl(JKNoTypeImpl), JKNameIdentifierImpl(name), - with(expressionTreeMapper) { initializer.toJK() } + with(expressionTreeMapper) { initializer.toJK() }, + modifiers(), + visibility(), + modality(), + Mutability.UNKNOWN ).also { symbolProvider.provideUniverseSymbol(this, it) it.psi = this @@ -306,7 +348,6 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { fun PsiMethod.toJK(): JKJavaMethod { return JKJavaMethodImpl( - with(modifierMapper) { modifierList.toJK() }, with(expressionTreeMapper) { returnTypeElement?.toJK() ?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor } @@ -316,7 +357,11 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { parameterList.parameters.map { it.toJK() }, body?.toJK() ?: JKBodyStub, typeParameterList?.toJK() ?: JKTypeParameterListImpl(), - JKAnnotationListImpl()//TODO get real annotations + JKAnnotationListImpl(),//TODO get real annotations + throwsList.referencedTypes.map { JKTypeElementImpl(it.toJK(symbolProvider)) }, + modifiers(), + visibility(), + modality() ).also { it.psi = this symbolProvider.provideUniverseSymbol(this, it) @@ -331,9 +376,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { } fun PsiParameter.toJK(): JKParameter { - return JKParameterImpl(with(expressionTreeMapper) { typeElement?.toJK() } ?: TODO(), - JKNameIdentifierImpl(name!!), - with(modifierMapper) { modifierList.toJK() }).also { + return JKParameterImpl( + with(expressionTreeMapper) { typeElement?.toJK() } ?: TODO(), + JKNameIdentifierImpl(name!!) + ).also { symbolProvider.provideUniverseSymbol(this, it) it.psi = this } @@ -353,10 +399,10 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { fun PsiLocalVariable.toJK(): JKLocalVariable = JKLocalVariableImpl( - with(modifierMapper) { modifierList.toJK() }, with(expressionTreeMapper) { typeElement.toJK() }, JKNameIdentifierImpl(this.name ?: TODO()), - with(expressionTreeMapper) { initializer.toJK() } + with(expressionTreeMapper) { initializer.toJK() }, + Mutability.UNKNOWN ).also { i -> symbolProvider.provideUniverseSymbol(this, i) i.psi = this @@ -456,64 +502,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { }.last() - private inner class ModifierMapper { - fun PsiModifierList?.toJK(finalAsMutability: Boolean = false): JKModifierList { - - val modifiers = if (this == null) mutableListOf() - else PsiModifier.MODIFIERS.filter { hasExplicitModifier(it) }.mapNotNull { modifierToJK(it, finalAsMutability) }.toMutableList() - - modifiers += extractAccess() - modifiers += extractModality() - - return JKModifierListImpl( - modifiers - ) - } - - fun PsiModifierList?.extractModality(): JKModalityModifier { - val modality = when { - this == null -> JKModalityModifier.Modality.OPEN - hasModifierProperty(PsiModifier.FINAL) -> JKModalityModifier.Modality.FINAL - hasModifierProperty(PsiModifier.ABSTRACT) -> JKModalityModifier.Modality.ABSTRACT - else -> JKModalityModifier.Modality.OPEN - } - return JKModalityModifierImpl(modality) - } - - - fun PsiModifierList?.extractAccess(): JKAccessModifier { - val visibility = when { - this == null -> JKAccessModifier.Visibility.PACKAGE_PRIVATE - hasModifierProperty(PsiModifier.PACKAGE_LOCAL) -> JKAccessModifier.Visibility.PACKAGE_PRIVATE - hasModifierProperty(PsiModifier.PRIVATE) -> JKAccessModifier.Visibility.PRIVATE - hasModifierProperty(PsiModifier.PROTECTED) -> JKAccessModifier.Visibility.PROTECTED - hasModifierProperty(PsiModifier.PUBLIC) -> JKAccessModifier.Visibility.PUBLIC - else -> JKAccessModifier.Visibility.PACKAGE_PRIVATE - } - return JKAccessModifierImpl(visibility) - } - - fun modifierToJK(name: String, finalAsMutability: Boolean): JKModifier? = when (name) { - PsiModifier.NATIVE -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.NATIVE) - PsiModifier.STATIC -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.STATIC) - PsiModifier.STRICTFP -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.STRICTFP) - PsiModifier.SYNCHRONIZED -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.SYNCHRONIZED) - PsiModifier.TRANSIENT -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.TRANSIENT) - PsiModifier.VOLATILE -> JKJavaModifierImpl(JKJavaModifier.JavaModifierType.VOLATILE) - - PsiModifier.PROTECTED -> null - PsiModifier.PUBLIC -> null - PsiModifier.PRIVATE -> null - - PsiModifier.FINAL -> if (finalAsMutability) JKMutabilityModifierImpl(Mutability.NonMutable) else null - PsiModifier.ABSTRACT -> null - - else -> TODO("Not yet supported") - } - - } - - private inner class ElementVisitor : JavaElementVisitor() { + private inner class ElementVisitor : JavaElementVisitor() { var resultElement: JKTreeElement? = null diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index dde5e6a0a54..5f1e8300f9d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -149,62 +149,12 @@ class NewCodeBuilder { breakWithLabelStatement.label.accept(this) } - override fun visitModifierList(modifierList: JKModifierList) { - modifierList.modifiers.firstOrNull()?.accept(this) - for (i in 1..modifierList.modifiers.lastIndex) { - printer.printWithNoIndent(" ") - modifierList.modifiers[i].accept(this) + private fun renderModifiersList(modifiersList: JKModifiersListOwner) { + renderList(modifiersList.modifiers(), " ") { + printer.printWithNoIndent(it.text) } } - override fun visitAccessModifier(accessModifier: JKAccessModifier) { - printer.printWithNoIndent( - when (accessModifier.visibility) { - JKAccessModifier.Visibility.PUBLIC -> "public" - JKAccessModifier.Visibility.INTERNAL -> "internal" - JKAccessModifier.Visibility.PACKAGE_PRIVATE -> "" -// JKAccessModifier.Visibility.PACKAGE_PRIVATE -> "internal /* package_local! */" - JKAccessModifier.Visibility.PROTECTED -> "protected" - JKAccessModifier.Visibility.PRIVATE -> "private" - } - ) - } - - override fun visitModalityModifier(modalityModifier: JKModalityModifier) { - val containingDeclaration = modalityModifier.parent?.parent - //TODO: merge with bottom one - if (modalityModifier.modality == JKModalityModifier.Modality.ABSTRACT && containingDeclaration is JKClass) { - if (containingDeclaration.classKind != JKClass.ClassKind.CLASS) return - } - - printer.printWithNoIndent( - when (modalityModifier.modality) { - JKModalityModifier.Modality.OPEN -> "open" - JKModalityModifier.Modality.FINAL -> "final" - JKModalityModifier.Modality.ABSTRACT -> "abstract" - JKModalityModifier.Modality.OVERRIDE -> "override" - } - ) - } - - override fun visitMutabilityModifier(mutabilityModifier: JKMutabilityModifier) { - if (mutabilityModifier.mutability == Mutability.NonMutable) printer.print("val") - else printer.print("var") - } - - override fun visitKtModifier(ktModifier: JKKtModifier) { - printer.printWithNoIndent( - when (ktModifier.type) { - JKKtModifier.KtModifierType.ABSTRACT -> "abstract" - JKKtModifier.KtModifierType.INNER -> "inner" - JKKtModifier.KtModifierType.OPEN -> "open" - JKKtModifier.KtModifierType.PRIVATE -> "private" - JKKtModifier.KtModifierType.PROTECTED -> "protected" - else -> ktModifier.type.toString() - } - ) - } - private inline fun renderList(list: List, separator: String = ", ", renderElement: (T) -> Unit) = renderList(list, { printer.printWithNoIndent(separator) }, renderElement) @@ -218,7 +168,7 @@ class NewCodeBuilder { } override fun visitClass(klass: JKClass) { - klass.modifierList.accept(this) + renderModifiersList(klass) builder.append(" ") printer.print(classKindString(klass.classKind)) builder.append(" ") @@ -264,7 +214,7 @@ class NewCodeBuilder { override fun visitKtProperty(ktProperty: JKKtProperty) { - ktProperty.modifierList.accept(this) + renderModifiersList(ktProperty) printer.printWithNoIndent(" ") ktProperty.name.accept(this) @@ -310,9 +260,8 @@ class NewCodeBuilder { ktIsExpression.type.accept(this) } - override fun visitParameter(parameter: JKParameter) { - parameter.modifierList.accept(this) + renderModifiersList(parameter) printer.printWithNoIndent(" ") parameter.name.accept(this) if (parameter.type.present() && parameter.type.type !is JKContextType) { @@ -325,13 +274,21 @@ class NewCodeBuilder { } } + override fun visitForLoopVariable(forLoopVariable: JKForLoopVariable) { + forLoopVariable.name.accept(this) + if (forLoopVariable.type.present() && forLoopVariable.type.type !is JKContextType) { + printer.printWithNoIndent(": ") + forLoopVariable.type.accept(this) + } + } + override fun visitKtFunction(ktFunction: JKKtFunction) { printer.printIndent() if (ktFunction.annotationList.annotations.isNotEmpty()) { ktFunction.annotationList.accept(this) printer.printlnWithNoIndent(" ") } - ktFunction.modifierList.accept(this) + renderModifiersList(ktFunction) printer.printWithNoIndent(" fun ") ktFunction.typeParameterList.accept(this) ktFunction.name.accept(this) @@ -391,7 +348,7 @@ class NewCodeBuilder { override fun visitKtGetterOrSetter(ktGetterOrSetter: JKKtGetterOrSetter) { printer.indented { - ktGetterOrSetter.modifierList.accept(this) + renderModifiersList(ktGetterOrSetter) printer.printWithNoIndent(" ") when (ktGetterOrSetter.kind) { JKKtGetterOrSetter.Kind.GETTER -> printer.printWithNoIndent("get") @@ -554,14 +511,14 @@ class NewCodeBuilder { } override fun visitLocalVariable(localVariable: JKLocalVariable) { - if (localVariable.parent !is JKForInStatement) { - if (localVariable.modifierList.modality == JKModalityModifier.Modality.FINAL) { - printer.print("val") - } else { - printer.print("var") - } - } - +// if (localVariable.parent !is JKForInStatement) { +// if (localVariable.modifierList.modality == JKModifierTokens.FINAL) { +// printer.print("val") +// } else { +// printer.print("var") +// } +// } + renderModifiersList(localVariable) printer.printWithNoIndent(" ") localVariable.name.accept(this) if (localVariable.type.present() && localVariable.type.type != JKContextType) { @@ -692,7 +649,7 @@ class NewCodeBuilder { } override fun visitKtConstructor(ktConstructor: JKKtConstructor) { - ktConstructor.modifierList.accept(this) + renderModifiersList(ktConstructor) printer.print(" constructor") renderParameterList(ktConstructor.parameters) if (ktConstructor.delegationCall !is JKStubExpression) { @@ -707,14 +664,8 @@ class NewCodeBuilder { } override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) { - val hasInitDeclaration = - (ktPrimaryConstructor.parent as JKClassBody).declarations.any { it is JKKtInitDeclaration } - val hasAccessModifier = - ktPrimaryConstructor.modifierList.modifiers.any { it is JKAccessModifier } - if (hasAccessModifier && hasInitDeclaration && ktPrimaryConstructor.parameters.isNotEmpty()) { - ktPrimaryConstructor.modifierList.accept(this) - printer.printWithNoIndent(" constructor ") - } + renderModifiersList(ktPrimaryConstructor) + printer.printWithNoIndent(" constructor ") if (ktPrimaryConstructor.parameters.isNotEmpty()) { renderParameterList(ktPrimaryConstructor.parameters) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentStatementValCreationConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentStatementValCreationConversion.kt index 3a05450afdb..ef9099fbcf2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentStatementValCreationConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/AssignmentStatementValCreationConversion.kt @@ -24,17 +24,17 @@ class AssignmentStatementValCreationConversion(val context: ConversionContext) : JKDeclarationStatementImpl( listOf( JKLocalVariableImpl( - JKModifierListImpl(JKModalityModifierImpl(JKModalityModifier.Modality.FINAL)), JKTypeElementImpl(JKJavaVoidType/*TODO*/), JKNameIdentifierImpl("arr"), - ex1 + ex1, + Mutability.IMMUTABLE ).also { assignableExpr.expression = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it)) }, JKLocalVariableImpl( - JKModifierListImpl(JKModalityModifierImpl(JKModalityModifier.Modality.FINAL)), JKTypeElementImpl(JKJavaVoidType/*TODO*/), JKNameIdentifierImpl("i"), - ex2 + ex2, + Mutability.UNKNOWN ).also { assignableExpr.indexExpression = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it)) @@ -50,10 +50,10 @@ class AssignmentStatementValCreationConversion(val context: ConversionContext) : JKDeclarationStatementImpl( listOf( JKLocalVariableImpl( - JKModifierListImpl(JKModalityModifierImpl(JKModalityModifier.Modality.FINAL)), JKTypeElementImpl(JKJavaVoidType/*TODO*/), JKNameIdentifierImpl("arg"), - ex + ex, + Mutability.UNKNOWN ).also { assignableExpr.receiver = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it)) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt index 7a2105b7d83..3814923cb2b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt @@ -6,12 +6,8 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.ConversionContext -import org.jetbrains.kotlin.j2k.tree.JKClass -import org.jetbrains.kotlin.j2k.tree.JKKtPrimaryConstructor -import org.jetbrains.kotlin.j2k.tree.JKTreeElement -import org.jetbrains.kotlin.j2k.tree.declarationList -import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl -import org.jetbrains.kotlin.j2k.tree.impl.psi +import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull class ClassToObjectPromotionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -35,12 +31,16 @@ class ClassToObjectPromotionConversion(private val context: ConversionContext) : element.invalidate() return recurse( JKClassImpl( - element.modifierList, element.name, element.inheritance, JKClass.ClassKind.OBJECT, element.typeParameterList, - companion.classBody + companion.classBody.also { + it.handleDeclarationsModifiers() + }, + element.extraModifiers, + element.visibility, + Modality.FINAL ) ) } @@ -49,6 +49,16 @@ class ClassToObjectPromotionConversion(private val context: ConversionContext) : return recurse(element) } + private fun JKClassBody.handleDeclarationsModifiers() { + for (declaration in declarations) { + if (declaration !is JKVisibilityOwner) continue + if (declaration.visibility == Visibility.PROTECTED) { + //in old j2k it is internal. should it be private instead? + declaration.visibility = Visibility.INTERNAL + } + } + } + private fun JKClass.hasInheritors() = context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(psi()!!) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt index df3e44df1b2..ead5b9a2ff7 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt @@ -18,10 +18,17 @@ class ConstructorConversion(private val context: ConversionContext) : RecursiveA element.invalidate() val delegationCall = lookupDelegationCall(element.block) ?: JKStubExpressionImpl() - return JKKtConstructorImpl(element.name, element.parameters, element.block, element.modifierList, delegationCall) - .also { - context.symbolProvider.transferSymbol(it, element) - } + return JKKtConstructorImpl( + element.name, + element.parameters, + element.block, + delegationCall, + element.extraModifiers, + element.visibility, + element.modality + ).also { + context.symbolProvider.transferSymbol(it, element) + } } private fun lookupDelegationCall(block: JKBlock): JKDelegationConstructorCall? { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldInitializersInPrimaryFromParamsConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldInitializersInPrimaryFromParamsConversion.kt index 53bf9d03909..0f9517d660c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldInitializersInPrimaryFromParamsConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldInitializersInPrimaryFromParamsConversion.kt @@ -40,10 +40,10 @@ class FieldInitializersInPrimaryFromParamsConversion(private val context: Conver (assignmentExpression.expression as? JKFieldAccessExpression)?.identifier?.target as? JKParameter ?: continue if (element.parameters.contains(parameter)) { val fieldDeclaration = containingClass.declarationList.find { - (it as? JKField)?.name?.value == fieldTarget.name.value - } as? JKField ?: continue + (it as? JKVariable)?.name?.value == fieldTarget.name.value + } as? JKVariable ?: continue if (!fieldDeclaration.type.type.equalsByName(parameter.type.type)) continue//TODO better way to compare types?? - parameter.modifierList = fieldDeclaration::modifierList.detached() +// parameter.modifierList = fieldDeclaration::modifierList.detached() declarationsToRemove += fieldDeclaration if (parameter.name.value != fieldTarget.name.value) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldToPropertyConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldToPropertyConversion.kt index 470dd34702d..9586e7345c5 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldToPropertyConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/FieldToPropertyConversion.kt @@ -6,8 +6,6 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.ConversionContext -import org.jetbrains.kotlin.j2k.ast.Mutability -import org.jetbrains.kotlin.j2k.copyTreeAndDetach import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.* import org.jetbrains.kotlin.load.java.JvmAbi @@ -44,10 +42,13 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs ?.takeIf { propertyNameFromGet(it) != null } ?.let { JKJavaFieldImpl( - JKModifierListImpl(), JKTypeElementImpl(it.returnType.type), JKNameIdentifierImpl(propertyNameFromGet(it)!!), - JKStubExpressionImpl() + JKStubExpressionImpl(), + emptyList(), + Visibility.PRIVATE, + Modality.OPEN, + Mutability.UNKNOWN ) } ?: return null @@ -58,13 +59,13 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs JKKtGetterOrSetterImpl( JKBlockStatementImpl(block) .renamed(propertyField.name.value, "field", propertyField.type.type, RenameType.RENAME_FIELD_ACCESS), - JKModifierListImpl(JKAccessModifierImpl(method.modifierList.visibility)), - JKKtGetterOrSetter.Kind.GETTER + JKKtGetterOrSetter.Kind.GETTER, + method.visibility ) } ?: JKKtGetterOrSetterImpl( JKBlockStatementImpl(JKBodyStub), - JKModifierListImpl(JKAccessModifierImpl(propertyField.modifierList.visibility)), - JKKtGetterOrSetter.Kind.GETTER + JKKtGetterOrSetter.Kind.GETTER, + propertyField.visibility ) val ktSetter = setter?.let { @@ -79,32 +80,35 @@ class FieldToPropertyConversion(private val context: ConversionContext) : Recurs RenameType.RENAME_PARAMETER_ACCESS ) .renamed(propertyField.name.value, "field", propertyField.type.type, RenameType.RENAME_FIELD_ACCESS), - JKModifierListImpl(JKAccessModifierImpl(method.modifierList.visibility)), - JKKtGetterOrSetter.Kind.SETTER + JKKtGetterOrSetter.Kind.SETTER, + method.visibility ) } ?: JKKtEmptyGetterOrSetterImpl() propertyField.invalidate() + val mutability = + if (propertyField.modality == Modality.FINAL) Mutability.IMMUTABLE + else if (propertyField.visibility == Visibility.PRIVATE && ktSetter is JKKtEmptyGetterOrSetter) + Mutability.IMMUTABLE + else Mutability.MUTABLE + + val visibility = + listOf( + ktGetter.visibility, + ktGetter.visibility + ).min() ?: Visibility.PUBLIC + return JKKtPropertyImpl( - propertyField.modifierList, propertyField.type, propertyField.name, propertyField.initializer, ktGetter, - ktSetter - ).also { - it.modifierList.mutability = - if (it.modifierList.isFinal()) Mutability.NonMutable - else if (it.modifierList.visibilityOrNull() == JKAccessModifier.Visibility.PRIVATE && ktSetter is JKKtEmptyGetterOrSetter) - Mutability.NonMutable - else Mutability.Mutable - - it.modifierList.visibility = - listOf( - ktGetter.modifierList.visibility, - ktGetter.modifierList.visibility - ).min() ?: JKAccessModifier.Visibility.PUBLIC - } + ktSetter, + propertyField.extraModifiers, + visibility, + propertyField.modality, + mutability + ) } private fun JKJavaMethod.isGetterOrSetter() = diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt index f93e6b26c9c..7039bd275e3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt @@ -120,8 +120,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl // JKJavaPrimitiveTypeImpl.INT // else null val loopVarDeclaration = - JKLocalVariableImpl( - JKModifierListImpl(JKModalityModifierImpl(JKModalityModifier.Modality.FINAL)), + JKForLoopVariableImpl( JKTypeElementImpl(JKNoTypeImpl), loopVar::name.detached(), JKStubExpressionImpl() diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InnerClassConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InnerClassConversion.kt index 5ed97cd68c8..8da66f5f44d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InnerClassConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InnerClassConversion.kt @@ -6,8 +6,6 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.JKKtModifier.KtModifierType.INNER -import org.jetbrains.kotlin.j2k.tree.impl.JKKtModifierImpl class InnerClassConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { @@ -22,13 +20,15 @@ class InnerClassConversion : RecursiveApplicableConversionBase() { private fun applyArmed(element: JKTreeElement, outer: JKClass): JKTreeElement { if (element !is JKClass) return recurseArmed(element, outer) - val static = element.modifierList.modifiers.find { it is JKJavaModifier && it.type == JKJavaModifier.JavaModifierType.STATIC } + val static = element.extraModifiers.find { it == ExtraModifier.STATIC } if (static != null) { - element.modifierList.modifiers -= static - } else if (element.classKind != JKClass.ClassKind.INTERFACE && outer.classKind != JKClass.ClassKind.INTERFACE) { - element.modifierList.modifiers += JKKtModifierImpl(INNER) + element.extraModifiers -= static + } else if (element.classKind != JKClass.ClassKind.INTERFACE && + outer.classKind != JKClass.ClassKind.INTERFACE && + element.classKind != JKClass.ClassKind.ENUM + ) { + element.extraModifiers += ExtraModifier.INNER } return recurseArmed(element, element) } - } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt index 1bef5d3d509..40de8b2c87e 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt @@ -7,22 +7,24 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.JKModalityModifier.Modality.* import org.jetbrains.kotlin.j2k.tree.impl.* class InsertDefaultPrimaryConstructorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { if (element !is JKClass) return recurse(element) - if (element.classKind != JKClass.ClassKind.CLASS && element.declarationList.any { it is JKKtConstructor }) return recurse(element) + if (element.classKind != JKClass.ClassKind.CLASS) return recurse(element) + if (element.declarationList.any { it is JKKtConstructor }) return recurse(element) val constructor = JKKtPrimaryConstructorImpl( - JKNameIdentifierImpl(element.name.value), emptyList(), JKBodyStub, - JKModifierListImpl().also { - it.modality = FINAL - it.visibility = JKAccessModifier.Visibility.PUBLIC - }, - JKStubExpressionImpl() + JKNameIdentifierImpl(element.name.value), + emptyList(), + JKBodyStub, + JKStubExpressionImpl(), + emptyList(), + Visibility.PUBLIC, + Modality.FINAL + ) element.classBody.declarations += constructor diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InternalClassConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InternalClassConversion.kt new file mode 100644 index 00000000000..5be09c399e7 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InternalClassConversion.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.j2k.conversions + +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.tree.* + +class InternalClassConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKClass) return recurse(element) + return recurseArmed(element, element.visibility == Visibility.INTERNAL) + } + + private fun recurseArmed(element: JKTreeElement, parentIsInternal: Boolean): JKTreeElement { + return applyRecursive(element, parentIsInternal, ::applyArmed) + } + + private fun applyArmed(element: JKTreeElement, parentIsInternal: Boolean): JKTreeElement { + if (element is JKClass) return recurseArmed(element, parentIsInternal) + if (element !is JKVisibilityOwner) return recurseArmed(element, parentIsInternal) + val isInternal = element.visibility == Visibility.INTERNAL + if (isInternal && parentIsInternal && context.converter.settings.noInternalForMembersOfInternal) { + element.visibility = Visibility.PUBLIC + } + return recurseArmed(element, isInternal) + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt index 44caf477d57..9b41c339484 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt @@ -16,33 +16,44 @@ package org.jetbrains.kotlin.j2k.conversions -import org.jetbrains.kotlin.j2k.tree.JKClass -import org.jetbrains.kotlin.j2k.tree.JKClassBody -import org.jetbrains.kotlin.j2k.tree.JKJavaMethod -import org.jetbrains.kotlin.j2k.tree.JKTreeElement +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.throwAnnotation +import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.JKKtFunctionImpl -class JavaMethodToKotlinFunctionConversion : TransformerBasedConversion() { +class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() { override fun visitTreeElement(element: JKTreeElement) { element.acceptChildren(this, null) } override fun visitClassBody(classBody: JKClassBody) { somethingChanged = true - classBody.declarations = classBody.declarations.map { - if (it is JKJavaMethod) { - it.invalidate() + + classBody.declarations = classBody.declarations.map { declaration -> + if (declaration is JKJavaMethod) { + declaration.invalidate() + JKKtFunctionImpl( - it.returnType, - it.name, - it.parameters, - it.block, - it.modifierList, - it.typeParameterList, - it.annotationList + declaration.returnType, + declaration.name, + declaration.parameters, + declaration.block, + declaration.typeParameterList, + declaration.annotationList.also { + if (declaration.throwsList.isNotEmpty()) { + it.annotations += + throwAnnotation( + declaration.throwsList.map { it.type }, + context.symbolProvider + ) + } + }, + declaration.extraModifiers, + declaration.visibility, + declaration.modality ) } else { - it + declaration } } classBody.acceptChildren(this) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaModifiersConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaModifiersConversion.kt new file mode 100644 index 00000000000..d00420decc5 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaModifiersConversion.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.j2k.conversions + +import org.jetbrains.kotlin.j2k.tree.* + +class JavaModifiersConversion: RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element is JKVisibilityOwner) { + if (element.visibility == Visibility.PACKAGE_PRIVATE) { + element.visibility = Visibility.INTERNAL + } + } + return recurse(element) + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MainFunctionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MainFunctionConversion.kt index 8629f823d5e..8916ddce8da 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MainFunctionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/MainFunctionConversion.kt @@ -5,16 +5,15 @@ package org.jetbrains.kotlin.j2k.conversions +import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.impl.JKAnnotationImpl -import org.jetbrains.kotlin.j2k.tree.impl.JKClassTypeImpl -import org.jetbrains.kotlin.j2k.tree.impl.JKNameIdentifierImpl -import org.jetbrains.kotlin.j2k.tree.impl.JKTypeElementImpl +import org.jetbrains.kotlin.j2k.tree.impl.* +import org.jetbrains.kotlin.util.collectionUtils.concatInOrder //TODO temporary -class MainFunctionConversion : RecursiveApplicableConversionBase() { +class MainFunctionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { if (element !is JKKtFunction) return recurse(element) if (element.isMainFunctionDeclaration()) { @@ -29,7 +28,11 @@ class MainFunctionConversion : RecursiveApplicableConversionBase() { ) type = JKTypeElementImpl(newType) } - element.annotationList.annotations += JKAnnotationImpl(JKNameIdentifierImpl("JvmStatic")) + element.annotationList.annotations += + JKAnnotationImpl( + context.symbolProvider.provideByFqName("kotlin.jvm.JvmStatic"), + JKExpressionListImpl() + ) } return recurse(element) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModalityConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModalityConversion.kt index d1a01574338..e92fa831307 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModalityConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModalityConversion.kt @@ -9,12 +9,9 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiMethod import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.impl.modality import org.jetbrains.kotlin.j2k.tree.impl.psi class ModalityConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { - - override fun applyToElement(element: JKTreeElement): JKTreeElement { when (element) { is JKClass -> processClass(element) @@ -25,16 +22,22 @@ class ModalityConversion(private val context: ConversionContext) : RecursiveAppl private fun processClass(klass: JKClass) { if (klass.classKind != JKClass.ClassKind.CLASS) return - if (klass.modifierList.modality != JKModalityModifier.Modality.OPEN) return + if (klass.modality != Modality.OPEN) return if (context.converter.settings.openByDefault) return if (!context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(klass.psi as PsiClass)) { - klass.modifierList.modality = JKModalityModifier.Modality.FINAL + klass.modality = Modality.FINAL } } private fun processMethod(method: JKJavaMethod) { + val psi = method.psi()!! + if (method.modality == Modality.OPEN + && !context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi) + ) { + method.modality = Modality.FINAL + } if ((method.psi!! as PsiMethod).findSuperMethods().isNotEmpty()) { - method.modifierList.modality = JKModalityModifier.Modality.OVERRIDE + method.modality = Modality.OVERRIDE } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt deleted file mode 100644 index 1666fadf87d..00000000000 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ModifiersConversion.kt +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.j2k.conversions - -import org.jetbrains.kotlin.j2k.ConversionContext -import org.jetbrains.kotlin.j2k.ast.Mutability -import org.jetbrains.kotlin.j2k.tree.* -import org.jetbrains.kotlin.j2k.tree.impl.* - -class ModifiersConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { - - override fun applyToElement(element: JKTreeElement): JKTreeElement { - if (element is JKModifierListOwner && element !is JKLocalVariable) { - var modifiers = element.modifierList.modifiers - if (element !is JKField) { - modifiers = mapOtherModifiers(modifiers) - } - element.modifierList.modifiers = modifiers - // Is declared inside some class - // TODO: Cleanup - if (context.converter.settings.noInternalForMembersOfInternal) { - relaxVisibility(element) - } - if (element is JKParameter) { - convertParameterModifiers(element) - } - if (element is JKKtConstructor) { - convertConstructorModifiers(element) - } - if (element is JKClass) { - convertClassModifiers(element) - } - element.sortModifiers() - } - return recurse(element) - } - - private fun convertClassModifiers(klass: JKClass) { - val isPackagePrivate = klass.modifierList.visibility == JKAccessModifier.Visibility.PACKAGE_PRIVATE - val parentClassIsInternal = - (klass.parent as? JKClass)?.modifierList?.visibility == JKAccessModifier.Visibility.INTERNAL - if (isPackagePrivate || parentClassIsInternal) { - klass.modifierList.visibility = JKAccessModifier.Visibility.INTERNAL - } - } - - private fun convertConstructorModifiers(constructor: JKKtConstructor) { - constructor.filterModifiers { it !is JKModalityModifier } - } - - private fun convertParameterModifiers(jkParameter: JKParameter) { - if (jkParameter.modifierList.mutability == Mutability.Default) { - jkParameter.modifierList.modifiers = emptyList() - } - } - - - private fun relaxVisibility(element: JKTreeElement) { - if (element is JKParameter) return - element as JKModifierListOwner // TODO: Assert - val modifierList = element.modifierList - val parent = element.parent as? JKClass - if (parent == null - || modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE - || parent.modifierList.visibility != JKAccessModifier.Visibility.PACKAGE_PRIVATE - ) return - modifierList.visibility = JKAccessModifier.Visibility.PUBLIC - } - - private fun mapOtherModifiers(modifiers: List): List { - return modifiers.map { - when (it) { - is JKJavaModifier -> when (it.type) { - JKJavaModifier.JavaModifierType.NATIVE -> JKKtModifierImpl(JKKtModifier.KtModifierType.EXTERNAL) - else -> it - } - else -> it - } - } - } - - private fun JKModifierListOwner.sortModifiers() { - modifierList.modifiers = modifierList.modifiers.sortedBy { it.priority } - } - - private val JKModifier.priority: Int - get() = - when (this) { - is JKAccessModifier -> 0 - is JKModalityModifier -> - when (this.modality) { - JKModalityModifier.Modality.FINAL, JKModalityModifier.Modality.OPEN, JKModalityModifier.Modality.ABSTRACT -> 1 - JKModalityModifier.Modality.OVERRIDE -> 2 - } - is JKJavaModifier -> 3 - is JKKtModifier -> 4 - is JKMutabilityModifier -> 5 - else -> 6 - } - - - private fun JKModifierListOwner.filterModifiers(filter: (JKModifier) -> Boolean) { - modifierList.modifiers = modifierList.modifiers.filter(filter) - } -} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt index c5a180a2d1b..8f60b0e4ba7 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.j2k.tree.impl.JKKtPrimaryConstructorImpl class PrimaryConstructorDetectConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { - if (element is JKClass) { + if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) { processClass(element) } return recurse(element) @@ -33,8 +33,10 @@ class PrimaryConstructorDetectConversion(private val context: ConversionContext) primaryConstructorCandidate.name, primaryConstructorCandidate.parameters, primaryConstructorCandidate.block, - primaryConstructorCandidate.modifierList, - primaryConstructorCandidate.delegationCall + primaryConstructorCandidate.delegationCall, + primaryConstructorCandidate.extraModifiers, + primaryConstructorCandidate.visibility, + primaryConstructorCandidate.modality ) context.symbolProvider.transferSymbol(primaryConstructor, primaryConstructorCandidate) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/SortClassMembersConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/SortClassMembersConversion.kt index e6b8098d2c7..00c61aa55af 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/SortClassMembersConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/SortClassMembersConversion.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.j2k.conversions -import org.jetbrains.kotlin.j2k.ast.EnumConstant import org.jetbrains.kotlin.j2k.tree.* //TODO temporary @@ -13,7 +12,7 @@ class SortClassMembersConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { if (element !is JKClass) return recurse(element) element.classBody.declarations = element.declarationList - .sortedByDescending { it is JKField } + .sortedByDescending { it is JKVariable } return recurse(element) } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/StaticsToCompanionExtractConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/StaticsToCompanionExtractConversion.kt index fd605afeb99..e6e9f31fda2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/StaticsToCompanionExtractConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/StaticsToCompanionExtractConversion.kt @@ -13,8 +13,8 @@ class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() if (element !is JKClass) return recurse(element) if (element.classKind == JKClass.ClassKind.COMPANION || element.classKind == JKClass.ClassKind.OBJECT) return element val statics = element.declarationList.filter { declaration -> - declaration is JKModifierListOwner && - declaration.modifierList.modifiers.any { it is JKJavaModifier && it.type == JKJavaModifier.JavaModifierType.STATIC } + declaration is JKExtraModifiersOwner && + declaration.extraModifiers.any { it == ExtraModifier.STATIC } } if (statics.isEmpty()) return recurse(element) @@ -23,9 +23,8 @@ class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() element.classBody.declarations -= statics companion.classBody.declarations += statics.onEach { declaration -> - (declaration as JKModifierListOwner) - declaration.modifierList.modifiers = - declaration.modifierList.modifiers.filterNot { it is JKJavaModifier && it.type == JKJavaModifier.JavaModifierType.STATIC } + (declaration as JKExtraModifiersOwner) + declaration.extraModifiers -= ExtraModifier.STATIC } return recurse(element) @@ -40,17 +39,14 @@ class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() if (companion != null) return companion return JKClassImpl( - JKModifierListImpl( - listOf( - JKAccessModifierImpl(JKAccessModifier.Visibility.PUBLIC), - JKModalityModifierImpl(JKModalityModifier.Modality.FINAL) - ) - ), JKNameIdentifierImpl(""), JKInheritanceInfoImpl(emptyList()), JKClass.ClassKind.COMPANION, JKTypeParameterListImpl(), - JKClassBodyImpl() + JKClassBodyImpl(), + emptyList(), + Visibility.PUBLIC, + Modality.FINAL ).also { element.classBody.declarations += it } } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TryStatementConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TryStatementConversion.kt index 9a4217491fd..3265f715aa2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TryStatementConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TryStatementConversion.kt @@ -5,13 +5,10 @@ package org.jetbrains.kotlin.j2k.conversions -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.j2k.* import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.* -import org.jetbrains.kotlin.name.ClassId -import java.util.* class TryStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { @@ -72,8 +69,7 @@ class TryStatementConversion(private val context: ConversionContext) : Recursive }.map { val parameter = JKParameterImpl( JKTypeElementImpl(it.updateNullability(Nullability.NotNull)), - javaCatchSection.parameter.name.copyTreeAndDetach(), - JKModifierListImpl() + javaCatchSection.parameter.name.copyTreeAndDetach() ) JKKtTryCatchSectionImpl( parameter, diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt index 13d1d5b6112..e639a876666 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/resolveUtil.kt @@ -24,7 +24,7 @@ internal fun resolveFqName(classId: ClassId, contextElement: JKTreeElement, cont return resolveFqName(classId, element) } -internal fun resolveFqName(classId: ClassId, element: PsiElement): PsiElement? { +fun resolveFqName(classId: ClassId, element: PsiElement): PsiElement? { return constructImportDirectiveWithContext(classId, element) .getChildOfType() ?.selectorExpression diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt index bc76ebb9b0f..600bebd13d6 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt @@ -157,7 +157,7 @@ fun useExpression( )!! ) as JKMethodSymbol val lambdaParameter = - JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier, JKModifierListImpl()) + JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier) val lambda = JKLambdaExpressionImpl( listOf(lambdaParameter), diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt index f20255ede42..f859c7f8914 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt @@ -36,15 +36,11 @@ private class DebugTreePrinter : JKVisitorVoid { printer.println(nameIdentifier.describe(), "(\"", nameIdentifier.value, "\")") } - override fun visitJavaModifier(javaModifier: JKJavaModifier) { - printer.println(javaModifier.describe(), "(", javaModifier.type, ")") - } - override fun visitJavaMethod(javaMethod: JKJavaMethod) { + printer.print(javaMethod.modifiers().joinToString(" ") { it.text }) printer.println(javaMethod.describe(), " [") printer.indented { javaMethod.block.accept(this, null) - javaMethod.modifierList.accept(this, null) javaMethod.parameters.forEach { it.accept(this, null) } } printer.println("]") 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 e7bbffe6801..c4f08418c38 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -27,28 +27,35 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType -class JKJavaFieldImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) : JKJavaField, +class JKJavaFieldImpl( + type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality, + override var mutability: Mutability +) : JKJavaField, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaField(this, data) override var initializer: JKExpression by child(initializer) - override var modifierList: JKModifierList by child(modifierList) override var type by child(type) override var name: JKNameIdentifier by child(name) } class JKJavaMethodImpl( - modifierList: JKModifierList, returnType: JKTypeElement, name: JKNameIdentifier, parameters: List, block: JKBlock, typeParameterList: JKTypeParameterList, - annotationList: JKAnnotationList + annotationList: JKAnnotationList, + throwsList: List, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality ) : JKJavaMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaMethod(this, data) - override var modifierList: JKModifierList by child(modifierList) override var returnType: JKTypeElement by child(returnType) override var name: JKNameIdentifier by child(name) override var parameters: List by children(parameters) @@ -68,9 +75,6 @@ class JKJavaLiteralExpressionImpl( } } -class JKJavaModifierImpl(override val type: JKJavaModifier.JavaModifierType) : JKJavaModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitJavaModifier(this, data) -} class JKJavaOperatorToken(val psiToken: IElementType) : JKOperatorToken { override val text: String 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 77f42fbbd8d..4b5d54ad885 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -19,9 +19,7 @@ package org.jetbrains.kotlin.j2k.tree.impl import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.JKSymbolProvider -import org.jetbrains.kotlin.j2k.ast.Mutability import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.conversions.resolveFqName import org.jetbrains.kotlin.j2k.tree.* @@ -40,17 +38,18 @@ class JKFileImpl : JKFile, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { } class JKClassImpl( - modifierList: JKModifierList, name: JKNameIdentifier, inheritance: JKInheritanceInfo, override var classKind: JKClass.ClassKind, typeParameterList: JKTypeParameterList, - classBody: JKClassBody + classBody: JKClassBody, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality ) : JKClass, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClass(this, data) override var name by child(name) - override var modifierList by child(modifierList) override val inheritance by child(inheritance) override var typeParameterList: JKTypeParameterList by child(typeParameterList) override var classBody: JKClassBody by child(classBody) @@ -60,46 +59,26 @@ class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKEle override fun accept(visitor: JKVisitor, data: D): R = visitor.visitNameIdentifier(this, data) } -class JKModifierListImpl( - modifiers: List = emptyList() -) : JKModifierList, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { - constructor(vararg modifiers: JKModifier) : this(modifiers.asList()) +class JKForLoopVariableImpl( + type: JKTypeElement, + name: JKNameIdentifier, + initializer: JKExpression +) : JKForLoopVariable, JKBranchElementBase() { + override var initializer by child(initializer) + override var name by child(name) + override var type by child(type) - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitModifierList(this, data) - - override var modifiers: List by children(modifiers) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitForLoopVariable(this, data) } -var JKModifierList.modality - get() = modifiers.filterIsInstance().first().modality - set(value) { - modifiers = modifiers.filterNot { it is JKModalityModifier } + JKModalityModifierImpl(value) - } - -var JKModifierList.visibility - get() = modifiers.filterIsInstance().first().visibility - set(value) { - modifiers = modifiers.filterNot { it is JKAccessModifier } + JKAccessModifierImpl(value) - } - -var JKModifierList.mutability - get() = modifiers.filterIsInstance().firstOrNull()?.mutability ?: Mutability.Default - set(value) { - modifiers = modifiers.filterNot { it is JKMutabilityModifier } + - listOfNotNull(if (value != Mutability.Default) JKMutabilityModifierImpl(value) else null) - } - class JKParameterImpl( type: JKTypeElement, name: JKNameIdentifier, - modifierList: JKModifierList, initializer: JKExpression = JKStubExpressionImpl() - ) : JKParameter, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitParameter(this, data) - override var modifierList by child(modifierList) override var initializer by child(initializer) override var name by child(name) override var type by child(type) @@ -269,9 +248,12 @@ fun JKLiteralExpression.LiteralType.toJkType(symbolProvider: JKSymbolProvider): } } -class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) : - JKLocalVariable, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { - override var modifierList by child(modifierList) +class JKLocalVariableImpl( + type: JKTypeElement, + name: JKNameIdentifier, + initializer: JKExpression, + override var mutability: Mutability +) : JKLocalVariable, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override var initializer by child(initializer) override var name by child(name) override var type by child(type) @@ -368,21 +350,9 @@ class JKClassAccessExpressionImpl(override var identifier: JKClassSymbol) : JKCl override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClassAccessExpression(this, data) } -class JKModalityModifierImpl(override val modality: JKModalityModifier.Modality) : JKModalityModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitModalityModifier(this, data) -} - -class JKAccessModifierImpl(override val visibility: JKAccessModifier.Visibility) : JKAccessModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitAccessModifier(this, data) -} - -class JKMutabilityModifierImpl(override val mutability: Mutability) : JKMutabilityModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitMutabilityModifier(this, data) -} - class JKLambdaExpressionImpl( parameters: List = listOf( - JKParameterImpl(JKTypeElementImpl(JKJavaVoidType), JKNameIdentifierImpl("it"), JKModifierListImpl()) + JKParameterImpl(JKTypeElementImpl(JKJavaVoidType), JKNameIdentifierImpl("it")) ), statement: JKStatement, returnType: JKTypeElement = JKTypeElementImpl(JKContextType) ) : JKLambdaExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override var statement by child(statement) @@ -475,14 +445,13 @@ class JKTypeParameterTypeImpl( class JKEnumConstantImpl( name: JKNameIdentifier, arguments: JKExpressionList, - type: JKTypeElement, - modifierList: JKModifierList + type: JKTypeElement ) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() { override var name: JKNameIdentifier by child(name) override val arguments: JKExpressionList by child(arguments) override var type: JKTypeElement by child(type) override var initializer: JKExpression by child(JKStubExpressionImpl()) - override var modifierList: JKModifierList by child(modifierList) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitEnumConstant(this, data) } 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 63a3ec80e60..2b04d01a188 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -26,16 +26,18 @@ import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.utils.addToStdlib.cast class JKKtPropertyImpl( - modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression, getter: JKKtGetterOrSetter, - setter: JKKtGetterOrSetter + setter: JKKtGetterOrSetter, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality, + override var mutability: Mutability ) : JKBranchElementBase(), JKKtProperty { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtProperty(this, data) - override var modifierList: JKModifierList by child(modifierList) override var type by child(type) override var name: JKNameIdentifier by child(name) override var initializer: JKExpression by child(initializer) @@ -48,9 +50,11 @@ class JKKtFunctionImpl( name: JKNameIdentifier, parameters: List, block: JKBlock, - modifierList: JKModifierList, typeParameterList: JKTypeParameterList, - annotationList: JKAnnotationList + annotationList: JKAnnotationList, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality ) : JKBranchElementBase(), JKKtFunction { override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtFunction(this, data) @@ -58,7 +62,6 @@ class JKKtFunctionImpl( override var name: JKNameIdentifier by child(name) override var parameters: List by children(parameters) override var block: JKBlock by child(block) - override var modifierList: JKModifierList by child(modifierList) override var typeParameterList: JKTypeParameterList by child(typeParameterList) override var annotationList: JKAnnotationList by child(annotationList) } @@ -110,10 +113,6 @@ class JKKtOperatorImpl(override val token: JKKtOperatorToken, val methodSymbol: } -class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() { - override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtModifier(this, data) -} - class JKKtAlsoCallExpressionImpl( statement: JKStatement, override val identifier: JKMethodSymbol, @@ -135,8 +134,7 @@ class JKKtAlsoCallExpressionImpl( listOf( JKParameterImpl( JKTypeElementImpl(JKJavaVoidType), - JKNameIdentifierImpl(parameterName), - JKModifierListImpl() + JKNameIdentifierImpl(parameterName) ) ), statement ) @@ -163,15 +161,16 @@ class JKKtConstructorImpl( name: JKNameIdentifier, parameters: List, block: JKBlock, - modifierList: JKModifierList, - delegationCall: JKExpression + delegationCall: JKExpression, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality ) : JKBranchElementBase(), JKKtConstructor { override val returnType: JKTypeElement get() = TODO("!") override var name: JKNameIdentifier by child(name) override var parameters: List by children(parameters) override var block: JKBlock by child(block) - override var modifierList: JKModifierList by child(modifierList) override var delegationCall: JKExpression by child(delegationCall) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) @@ -182,16 +181,16 @@ class JKKtConstructorImpl( class JKKtPrimaryConstructorImpl( name: JKNameIdentifier, parameters: List, - block: JKBlock, - modifierList: JKModifierList, - delegationCall: JKExpression + delegationCall: JKExpression, + override var extraModifiers: List, + override var visibility: Visibility, + override var modality: Modality ) : JKBranchElementBase(), JKKtPrimaryConstructor { override val returnType: JKTypeElement get() = TODO("!") override var name: JKNameIdentifier by child(name) override var parameters: List by children(parameters) override var block: JKBlock by child(block) - override var modifierList: JKModifierList by child(modifierList) override var delegationCall: JKExpression by child(delegationCall) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) @@ -292,18 +291,18 @@ class JKKtTryCatchSectionImpl( class JKKtGetterOrSetterImpl( body: JKStatement, - modifierList: JKModifierList, - override val kind: JKKtGetterOrSetter.Kind + override val kind: JKKtGetterOrSetter.Kind, + override var visibility: Visibility ) : JKKtGetterOrSetter, JKBranchElementBase() { override var body: JKStatement by child(body) - override var modifierList: JKModifierList by child(modifierList) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtGetterOrSetter(this, data) } class JKKtEmptyGetterOrSetterImpl : JKKtEmptyGetterOrSetter, JKBranchElementBase() { + override var visibility: Visibility = Visibility.PUBLIC override var body: JKStatement by child(JKEmptyStatementImpl()) - override var modifierList: JKModifierList by child(JKModifierListImpl()) override val kind: JKKtGetterOrSetter.Kind get() = error("Cannot get kind of JKKtEmptyGetterOrSetter") + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtEmptyGetterOrSetter(this, data) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt index 52f7239cbc2..0a6d184cf68 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt @@ -129,12 +129,12 @@ class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private v get() = target.name!! // TODO("Fix this") } -class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol { +class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol { override val fieldType: JKType get() = target.type.type override val name: String get() = target.name.value - override lateinit var target: JKField + override lateinit var target: JKVariable override val declaredIn: JKSymbol get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates. override val fqName: String diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 80b97641d3d..430dee5929a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -18,7 +18,8 @@ package org.jetbrains.kotlin.j2k.tree import org.jetbrains.kotlin.idea.search.usagesSearch.constructor import org.jetbrains.kotlin.j2k.tree.impl.* -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance + +interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner interface JKJavaField : JKField, JKBranchElement @@ -58,13 +59,6 @@ interface JKJavaDefaultNewExpression : JKExpression { val classSymbol: JKClassSymbol } -interface JKJavaModifier : JKModifier { - val type: JavaModifierType - - enum class JavaModifierType { - NATIVE, STATIC, STRICTFP, SYNCHRONIZED, TRANSIENT, VOLATILE - } -} interface JKJavaNewEmptyArray : JKExpression { val type: JKTypeElement diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index a4c84b5beb1..ec8f59c0bfe 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.j2k.tree import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.j2k.ast.Mutability import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol @@ -45,7 +44,7 @@ interface JKFile : JKTreeElement, JKBranchElement { var declarationList: List } -interface JKClass : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwner, JKBranchElement { +interface JKClass : JKDeclaration, JKVisibilityOwner, JKExtraModifiersOwner, JKModalityOwner, JKTypeParameterListOwner, JKBranchElement { val name: JKNameIdentifier val inheritance: JKInheritanceInfo @@ -78,47 +77,105 @@ interface JKAnnotationListOwner : JKTreeElement { var annotationList: JKAnnotationList } -interface JKMethod : JKDeclaration, JKModifierListOwner, JKTypeParameterListOwner, JKAnnotationListOwner { +interface JKMethod : JKDeclaration, JKVisibilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKTypeParameterListOwner, + JKAnnotationListOwner { val name: JKNameIdentifier var parameters: List val returnType: JKTypeElement var block: JKBlock } -interface JKField : JKDeclaration, JKModifierListOwner { +interface JKVariable : JKDeclaration { var type: JKTypeElement var name: JKNameIdentifier var initializer: JKExpression } -interface JKLocalVariable : JKField +interface JKForLoopVariable : JKVariable -interface JKModifier : JKTreeElement +interface JKLocalVariable : JKVariable, JKMutabilityOwner -interface JKModifierList : JKTreeElement { - var modifiers: List +interface JKExtraModifiersOwner : JKModifiersListOwner { + var extraModifiers: List } -interface JKAccessModifier : JKModifier { - enum class Visibility { - PUBLIC, INTERNAL, PACKAGE_PRIVATE, PROTECTED, PRIVATE - } - - val visibility: Visibility +interface Modifier { + val text: String } -interface JKModalityModifier : JKModifier { - enum class Modality { - OPEN, FINAL, ABSTRACT, OVERRIDE - } +enum class ExtraModifier(override val text: String) : Modifier { + ACTUAL("actual"), + ANNOTATION("annotation"), + COMPANION("companion"), + CONST("const"), + CROSSINLINE("crossinline"), + DATA("data"), + EXPECT("expect"), + EXTERNAL("external"), + INFIX("infix"), + INLINE("inline"), + INNER("inner"), + LATEINIT("lateinit"), + NOINLINE("noinline"), + OPERATOR("operator"), + OUT("out"), + REIFIED("reified"), + SEALED("sealed"), + SUSPEND("suspend"), + TAILREC("tailrec"), + VARARG("vararg"), - val modality: Modality + NATIVE("native"), + STATIC("static"), + STRICTFP("strictfp"), + SYNCHRONIZED("synchronized"), + TRANSIENT("transient"), + VOLATILE("volatile") } -interface JKMutabilityModifier : JKModifier { - val mutability: Mutability +interface JKVisibilityOwner : JKModifiersListOwner{ + var visibility: Visibility } +enum class Visibility(override val text: String) : Modifier { + PUBLIC("public"), + INTERNAL("internal"), + PACKAGE_PRIVATE(""), + PROTECTED("protected"), + PRIVATE("private") +} + +interface JKModalityOwner : JKModifiersListOwner { + var modality: Modality +} + + +enum class Modality(override val text: String) : Modifier { + OPEN("open"), + FINAL("final"), + ABSTRACT("abstract"), + OVERRIDE("override") +} + +interface JKMutabilityOwner : JKModifiersListOwner { + var mutability: Mutability +} + +enum class Mutability(override val text: String) : Modifier { + MUTABLE("var"), + IMMUTABLE("val"), + UNKNOWN("var")//TODO ??? +} + +interface JKModifiersListOwner : JKTreeElement + +fun JKModifiersListOwner.modifiers(): List = + listOfNotNull((this as? JKVisibilityOwner)?.visibility) + + (this as? JKExtraModifiersOwner)?.extraModifiers.orEmpty() + + listOfNotNull((this as? JKModalityOwner)?.modality) + + listOfNotNull((this as? JKMutabilityOwner)?.mutability) + + interface JKTypeElement : JKTreeElement { val type: JKType } @@ -216,9 +273,7 @@ interface JKLiteralExpression : JKExpression { } } -interface JKParameter : JKField { - -} +interface JKParameter : JKVariable, JKModifiersListOwner interface JKStringLiteralExpression : JKLiteralExpression { val text: String @@ -315,7 +370,7 @@ interface JKTypeParameterListOwner : JKTreeElement { var typeParameterList: JKTypeParameterList } -interface JKEnumConstant : JKField { +interface JKEnumConstant : JKVariable { val arguments: JKExpressionList } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt index 0cd8d5a9101..740952f0cc3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.j2k.tree import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol -interface JKKtGetterOrSetter : JKTreeElement, JKModifierListOwner, JKBranchElement { +interface JKKtGetterOrSetter : JKTreeElement, JKVisibilityOwner, JKBranchElement { var body: JKStatement val kind: Kind @@ -34,10 +34,12 @@ interface JKKtProperty : JKField { var setter: JKKtGetterOrSetter } + + interface JKKtFunction : JKMethod { } -interface JKKtConstructor : JKDeclaration, JKModifierListOwner, JKMethod, JKBranchElement { +interface JKKtConstructor : JKDeclaration, JKExtraModifiersOwner, JKMethod, JKBranchElement { override var name: JKNameIdentifier override var parameters: List var delegationCall: JKExpression @@ -53,15 +55,6 @@ interface JKKtAssignmentStatement : JKStatement { interface JKKtCall : JKMethodCallExpression -interface JKKtModifier : JKModifier { - val type: KtModifierType - - enum class KtModifierType { - ACTUAL, ABSTRACT, ANNOTATION, COMPANION, CONST, CROSSINLINE, DATA, ENUM, EXPECT, EXTERNAL, FINAL, INFIX, INLINE, INNER, - LATEINIT, NOINLINE, OPEN, OPERATOR, OUT, OVERRIDE, REIFIED, SEALED, SUSPEND, TAILREC, VARARG, PRIVATE, PROTECTED - } -} - interface JKKtMethodCallExpression : JKMethodCallExpression interface JKKtAlsoCallExpression : JKKtMethodCallExpression { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt index de76260a6ed..07680bff16f 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt @@ -52,10 +52,6 @@ interface JKBranchElement : JKElement { fun invalidate() } -interface JKModifierListOwner { - var modifierList: JKModifierList -} - interface JKType { val nullability: Nullability } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index 37a7b559b34..4ed6d1bf96d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -12,13 +12,14 @@ interface JKVisitor { fun visitAnnotation(annotation: JKAnnotation, data: D): R = visitTreeElement(annotation, data) fun visitAnnotationListOwner(annotationListOwner: JKAnnotationListOwner, data: D): R = visitTreeElement(annotationListOwner, data) fun visitMethod(method: JKMethod, data: D): R = visitDeclaration(method, data) - fun visitField(field: JKField, data: D): R = visitDeclaration(field, data) - fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitField(localVariable, data) - fun visitModifier(modifier: JKModifier, data: D): R = visitTreeElement(modifier, data) - fun visitModifierList(modifierList: JKModifierList, data: D): R = visitTreeElement(modifierList, data) - fun visitAccessModifier(accessModifier: JKAccessModifier, data: D): R = visitModifier(accessModifier, data) - fun visitModalityModifier(modalityModifier: JKModalityModifier, data: D): R = visitModifier(modalityModifier, data) - fun visitMutabilityModifier(mutabilityModifier: JKMutabilityModifier, data: D): R = visitModifier(mutabilityModifier, data) + fun visitVariable(variable: JKVariable, data: D): R = visitDeclaration(variable, data) + fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: D): R = visitVariable(forLoopVariable, data) + fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitVariable(localVariable, data) + fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: D): R = visitModifiersListOwner(extraModifiersOwner, data) + fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner, data: D): R = visitModifiersListOwner(visibilityOwner, data) + fun visitModalityOwner(modalityOwner: JKModalityOwner, data: D): R = visitModifiersListOwner(modalityOwner, data) + fun visitMutabilityOwner(mutabilityOwner: JKMutabilityOwner, data: D): R = visitModifiersListOwner(mutabilityOwner, data) + fun visitModifiersListOwner(modifiersListOwner: JKModifiersListOwner, data: D): R = visitTreeElement(modifiersListOwner, data) fun visitTypeElement(typeElement: JKTypeElement, data: D): R = visitTreeElement(typeElement, data) fun visitStatement(statement: JKStatement, data: D): R = visitTreeElement(statement, data) fun visitBlock(block: JKBlock, data: D): R = visitTreeElement(block, data) @@ -43,7 +44,7 @@ interface JKVisitor { fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data) fun visitExpressionList(expressionList: JKExpressionList, data: D): R = visitTreeElement(expressionList, data) fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data) - fun visitParameter(parameter: JKParameter, data: D): R = visitField(parameter, data) + fun visitParameter(parameter: JKParameter, data: D): R = visitVariable(parameter, data) fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: D): R = visitLiteralExpression(stringLiteralExpression, data) fun visitStubExpression(stubExpression: JKStubExpression, data: D): R = visitExpression(stubExpression, data) fun visitLoopStatement(loopStatement: JKLoopStatement, data: D): R = visitStatement(loopStatement, data) @@ -69,9 +70,11 @@ interface JKVisitor { fun visitTypeParameterList(typeParameterList: JKTypeParameterList, data: D): R = visitTreeElement(typeParameterList, data) fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data) fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: D): R = visitTreeElement(typeParameterListOwner, data) - fun visitEnumConstant(enumConstant: JKEnumConstant, data: D): R = visitField(enumConstant, data) + fun visitEnumConstant(enumConstant: JKEnumConstant, data: D): R = visitVariable(enumConstant, data) fun visitForInStatement(forInStatement: JKForInStatement, data: D): R = visitStatement(forInStatement, data) fun visitPackageDeclaration(packageDeclaration: JKPackageDeclaration, data: D): R = visitDeclaration(packageDeclaration, data) + fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression, data: D): R = visitExpression(classLiteralExpression, data) + fun visitField(field: JKField, data: D): R = visitVariable(field, data) fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data) fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data) fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data) @@ -79,7 +82,6 @@ interface JKVisitor { fun visitEmptyClassBody(emptyClassBody: JKEmptyClassBody, data: D): R = visitClassBody(emptyClassBody, data) fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: D): R = visitExpression(javaNewExpression, data) fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: D): R = visitExpression(javaDefaultNewExpression, data) - fun visitJavaModifier(javaModifier: JKJavaModifier, data: D): R = visitModifier(javaModifier, data) fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: D): R = visitExpression(javaNewEmptyArray, data) fun visitJavaNewArray(javaNewArray: JKJavaNewArray, data: D): R = visitExpression(javaNewArray, data) fun visitJavaLiteralExpression(javaLiteralExpression: JKJavaLiteralExpression, data: D): R = visitLiteralExpression(javaLiteralExpression, data) @@ -105,7 +107,6 @@ interface JKVisitor { fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data) fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): R = visitStatement(ktAssignmentStatement, data) fun visitKtCall(ktCall: JKKtCall, data: D): R = visitMethodCallExpression(ktCall, data) - fun visitKtModifier(ktModifier: JKKtModifier, data: D): R = visitModifier(ktModifier, data) fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: D): R = visitMethodCallExpression(ktMethodCallExpression, data) fun visitKtAlsoCallExpression(ktAlsoCallExpression: JKKtAlsoCallExpression, data: D): R = visitKtMethodCallExpression(ktAlsoCallExpression, data) fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression, data: D): R = visitLiteralExpression(ktLiteralExpression, data) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 6af78bfe87b..282bb8ad62d 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -21,20 +21,22 @@ interface JKVisitorVoid : JKVisitor { override fun visitAnnotationListOwner(annotationListOwner: JKAnnotationListOwner, data: Nothing?) = visitAnnotationListOwner(annotationListOwner) fun visitMethod(method: JKMethod) = visitDeclaration(method, null) override fun visitMethod(method: JKMethod, data: Nothing?) = visitMethod(method) - fun visitField(field: JKField) = visitDeclaration(field, null) - override fun visitField(field: JKField, data: Nothing?) = visitField(field) - fun visitLocalVariable(localVariable: JKLocalVariable) = visitField(localVariable, null) + fun visitVariable(variable: JKVariable) = visitDeclaration(variable, null) + override fun visitVariable(variable: JKVariable, data: Nothing?) = visitVariable(variable) + fun visitForLoopVariable(forLoopVariable: JKForLoopVariable) = visitVariable(forLoopVariable, null) + override fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: Nothing?) = visitForLoopVariable(forLoopVariable) + fun visitLocalVariable(localVariable: JKLocalVariable) = visitVariable(localVariable, null) override fun visitLocalVariable(localVariable: JKLocalVariable, data: Nothing?) = visitLocalVariable(localVariable) - fun visitModifier(modifier: JKModifier) = visitTreeElement(modifier, null) - override fun visitModifier(modifier: JKModifier, data: Nothing?) = visitModifier(modifier) - fun visitModifierList(modifierList: JKModifierList) = visitTreeElement(modifierList, null) - override fun visitModifierList(modifierList: JKModifierList, data: Nothing?) = visitModifierList(modifierList) - fun visitAccessModifier(accessModifier: JKAccessModifier) = visitModifier(accessModifier, null) - override fun visitAccessModifier(accessModifier: JKAccessModifier, data: Nothing?) = visitAccessModifier(accessModifier) - fun visitModalityModifier(modalityModifier: JKModalityModifier) = visitModifier(modalityModifier, null) - override fun visitModalityModifier(modalityModifier: JKModalityModifier, data: Nothing?) = visitModalityModifier(modalityModifier) - fun visitMutabilityModifier(mutabilityModifier: JKMutabilityModifier) = visitModifier(mutabilityModifier, null) - override fun visitMutabilityModifier(mutabilityModifier: JKMutabilityModifier, data: Nothing?) = visitMutabilityModifier(mutabilityModifier) + fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner) = visitModifiersListOwner(extraModifiersOwner, null) + override fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: Nothing?) = visitExtraModifiersOwner(extraModifiersOwner) + fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner) = visitModifiersListOwner(visibilityOwner, null) + override fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner, data: Nothing?) = visitVisibilityOwner(visibilityOwner) + fun visitModalityOwner(modalityOwner: JKModalityOwner) = visitModifiersListOwner(modalityOwner, null) + override fun visitModalityOwner(modalityOwner: JKModalityOwner, data: Nothing?) = visitModalityOwner(modalityOwner) + fun visitMutabilityOwner(mutabilityOwner: JKMutabilityOwner) = visitModifiersListOwner(mutabilityOwner, null) + override fun visitMutabilityOwner(mutabilityOwner: JKMutabilityOwner, data: Nothing?) = visitMutabilityOwner(mutabilityOwner) + fun visitModifiersListOwner(modifiersListOwner: JKModifiersListOwner) = visitTreeElement(modifiersListOwner, null) + override fun visitModifiersListOwner(modifiersListOwner: JKModifiersListOwner, data: Nothing?) = visitModifiersListOwner(modifiersListOwner) fun visitTypeElement(typeElement: JKTypeElement) = visitTreeElement(typeElement, null) override fun visitTypeElement(typeElement: JKTypeElement, data: Nothing?) = visitTypeElement(typeElement) fun visitStatement(statement: JKStatement) = visitTreeElement(statement, null) @@ -83,7 +85,7 @@ interface JKVisitorVoid : JKVisitor { override fun visitExpressionList(expressionList: JKExpressionList, data: Nothing?) = visitExpressionList(expressionList) fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null) override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: Nothing?) = visitLiteralExpression(literalExpression) - fun visitParameter(parameter: JKParameter) = visitField(parameter, null) + fun visitParameter(parameter: JKParameter) = visitVariable(parameter, null) override fun visitParameter(parameter: JKParameter, data: Nothing?) = visitParameter(parameter) fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression) = visitLiteralExpression(stringLiteralExpression, null) override fun visitStringLiteralExpression(stringLiteralExpression: JKStringLiteralExpression, data: Nothing?) = visitStringLiteralExpression(stringLiteralExpression) @@ -135,12 +137,16 @@ interface JKVisitorVoid : JKVisitor { override fun visitTypeParameter(typeParameter: JKTypeParameter, data: Nothing?) = visitTypeParameter(typeParameter) fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner) = visitTreeElement(typeParameterListOwner, null) override fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: Nothing?) = visitTypeParameterListOwner(typeParameterListOwner) - fun visitEnumConstant(enumConstant: JKEnumConstant) = visitField(enumConstant, null) + fun visitEnumConstant(enumConstant: JKEnumConstant) = visitVariable(enumConstant, null) override fun visitEnumConstant(enumConstant: JKEnumConstant, data: Nothing?) = visitEnumConstant(enumConstant) fun visitForInStatement(forInStatement: JKForInStatement) = visitStatement(forInStatement, null) override fun visitForInStatement(forInStatement: JKForInStatement, data: Nothing?) = visitForInStatement(forInStatement) fun visitPackageDeclaration(packageDeclaration: JKPackageDeclaration) = visitDeclaration(packageDeclaration, null) override fun visitPackageDeclaration(packageDeclaration: JKPackageDeclaration, data: Nothing?) = visitPackageDeclaration(packageDeclaration) + fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression) = visitExpression(classLiteralExpression, null) + override fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression, data: Nothing?) = visitClassLiteralExpression(classLiteralExpression) + fun visitField(field: JKField) = visitVariable(field, null) + override fun visitField(field: JKField, data: Nothing?) = visitField(field) fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null) override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null) @@ -155,8 +161,6 @@ interface JKVisitorVoid : JKVisitor { override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression, data: Nothing?) = visitJavaNewExpression(javaNewExpression) fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression) = visitExpression(javaDefaultNewExpression, null) override fun visitJavaDefaultNewExpression(javaDefaultNewExpression: JKJavaDefaultNewExpression, data: Nothing?) = visitJavaDefaultNewExpression(javaDefaultNewExpression) - fun visitJavaModifier(javaModifier: JKJavaModifier) = visitModifier(javaModifier, null) - override fun visitJavaModifier(javaModifier: JKJavaModifier, data: Nothing?) = visitJavaModifier(javaModifier) fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray) = visitExpression(javaNewEmptyArray, null) override fun visitJavaNewEmptyArray(javaNewEmptyArray: JKJavaNewEmptyArray, data: Nothing?) = visitJavaNewEmptyArray(javaNewEmptyArray) fun visitJavaNewArray(javaNewArray: JKJavaNewArray) = visitExpression(javaNewArray, null) @@ -207,8 +211,6 @@ interface JKVisitorVoid : JKVisitor { override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: Nothing?) = visitKtAssignmentStatement(ktAssignmentStatement) fun visitKtCall(ktCall: JKKtCall) = visitMethodCallExpression(ktCall, null) override fun visitKtCall(ktCall: JKKtCall, data: Nothing?) = visitKtCall(ktCall) - fun visitKtModifier(ktModifier: JKKtModifier) = visitModifier(ktModifier, null) - override fun visitKtModifier(ktModifier: JKKtModifier, data: Nothing?) = visitKtModifier(ktModifier) fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression) = visitMethodCallExpression(ktMethodCallExpression, null) override fun visitKtMethodCallExpression(ktMethodCallExpression: JKKtMethodCallExpression, data: Nothing?) = visitKtMethodCallExpression(ktMethodCallExpression) fun visitKtAlsoCallExpression(ktAlsoCallExpression: JKKtAlsoCallExpression) = visitKtMethodCallExpression(ktAlsoCallExpression, null)