New J2K: Split ModifiersList to visibilityModifier, modalityModifier, mutabilityModifier and extraModifiers & introduce JKVariable which may have any subset of modifiers
This commit is contained in:
committed by
Ilya Kirillov
parent
5c6092c98c
commit
69633e7a0f
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 <T> renderList(list: List<T>, 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)
|
||||
}
|
||||
|
||||
+6
-6
@@ -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))
|
||||
}
|
||||
|
||||
+18
-8
@@ -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()!!)
|
||||
}
|
||||
@@ -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? {
|
||||
|
||||
+3
-3
@@ -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) {
|
||||
|
||||
@@ -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() =
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
+10
-8
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
+27
-16
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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<PsiMethod>()!!
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<JKModifier>): List<JKModifier> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
+5
-3
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
+8
-12
@@ -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 }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<KtDotQualifiedExpression>()
|
||||
?.selectorExpression
|
||||
|
||||
@@ -157,7 +157,7 @@ fun useExpression(
|
||||
)!!
|
||||
) as JKMethodSymbol
|
||||
val lambdaParameter =
|
||||
JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier, JKModifierListImpl())
|
||||
JKParameterImpl(JKTypeElementImpl(JKNoTypeImpl), variableIdentifier)
|
||||
|
||||
val lambda = JKLambdaExpressionImpl(
|
||||
listOf(lambdaParameter),
|
||||
|
||||
@@ -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("]")
|
||||
|
||||
@@ -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<ExtraModifier>,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality,
|
||||
override var mutability: Mutability
|
||||
) : JKJavaField,
|
||||
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, 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<JKParameter>,
|
||||
block: JKBlock,
|
||||
typeParameterList: JKTypeParameterList,
|
||||
annotationList: JKAnnotationList
|
||||
annotationList: JKAnnotationList,
|
||||
throwsList: List<JKTypeElement>,
|
||||
override var extraModifiers: List<ExtraModifier>,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality
|
||||
) : JKJavaMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, 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<JKParameter> by children(parameters)
|
||||
@@ -68,9 +75,6 @@ class JKJavaLiteralExpressionImpl(
|
||||
}
|
||||
}
|
||||
|
||||
class JKJavaModifierImpl(override val type: JKJavaModifier.JavaModifierType) : JKJavaModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaModifier(this, data)
|
||||
}
|
||||
|
||||
class JKJavaOperatorToken(val psiToken: IElementType) : JKOperatorToken {
|
||||
override val text: String
|
||||
|
||||
@@ -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<ExtraModifier>,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality
|
||||
) : JKClass, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitNameIdentifier(this, data)
|
||||
}
|
||||
|
||||
class JKModifierListImpl(
|
||||
modifiers: List<JKModifier> = 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitModifierList(this, data)
|
||||
|
||||
override var modifiers: List<JKModifier> by children(modifiers)
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitForLoopVariable(this, data)
|
||||
}
|
||||
|
||||
|
||||
var JKModifierList.modality
|
||||
get() = modifiers.filterIsInstance<JKModalityModifier>().first().modality
|
||||
set(value) {
|
||||
modifiers = modifiers.filterNot { it is JKModalityModifier } + JKModalityModifierImpl(value)
|
||||
}
|
||||
|
||||
var JKModifierList.visibility
|
||||
get() = modifiers.filterIsInstance<JKAccessModifier>().first().visibility
|
||||
set(value) {
|
||||
modifiers = modifiers.filterNot { it is JKAccessModifier } + JKAccessModifierImpl(value)
|
||||
}
|
||||
|
||||
var JKModifierList.mutability
|
||||
get() = modifiers.filterIsInstance<JKMutabilityModifier>().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 <R, D> accept(visitor: JKVisitor<R, D>, 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassAccessExpression(this, data)
|
||||
}
|
||||
|
||||
class JKModalityModifierImpl(override val modality: JKModalityModifier.Modality) : JKModalityModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitModalityModifier(this, data)
|
||||
}
|
||||
|
||||
class JKAccessModifierImpl(override val visibility: JKAccessModifier.Visibility) : JKAccessModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAccessModifier(this, data)
|
||||
}
|
||||
|
||||
class JKMutabilityModifierImpl(override val mutability: Mutability) : JKMutabilityModifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitMutabilityModifier(this, data)
|
||||
}
|
||||
|
||||
class JKLambdaExpressionImpl(
|
||||
parameters: List<JKParameter> = 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEnumConstant(this, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ExtraModifier>,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality,
|
||||
override var mutability: Mutability
|
||||
) : JKBranchElementBase(), JKKtProperty {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, 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<JKParameter>,
|
||||
block: JKBlock,
|
||||
modifierList: JKModifierList,
|
||||
typeParameterList: JKTypeParameterList,
|
||||
annotationList: JKAnnotationList
|
||||
annotationList: JKAnnotationList,
|
||||
override var extraModifiers: List<ExtraModifier>,
|
||||
override var visibility: Visibility,
|
||||
override var modality: Modality
|
||||
) : JKBranchElementBase(), JKKtFunction {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFunction(this, data)
|
||||
|
||||
@@ -58,7 +62,6 @@ class JKKtFunctionImpl(
|
||||
override var name: JKNameIdentifier by child(name)
|
||||
override var parameters: List<JKParameter> 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 <R, D> accept(visitor: JKVisitor<R, D>, 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<JKParameter>,
|
||||
block: JKBlock,
|
||||
modifierList: JKModifierList,
|
||||
delegationCall: JKExpression
|
||||
delegationCall: JKExpression,
|
||||
override var extraModifiers: List<ExtraModifier>,
|
||||
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<JKParameter> 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<JKParameter>,
|
||||
block: JKBlock,
|
||||
modifierList: JKModifierList,
|
||||
delegationCall: JKExpression
|
||||
delegationCall: JKExpression,
|
||||
override var extraModifiers: List<ExtraModifier>,
|
||||
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<JKParameter> 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 <R, D> accept(visitor: JKVisitor<R, D>, 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 <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtEmptyGetterOrSetter(this, data)
|
||||
}
|
||||
@@ -129,12 +129,12 @@ class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private v
|
||||
get() = target.name!! // TODO("Fix this")
|
||||
}
|
||||
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKField> {
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKVariable> {
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<JKDeclaration>
|
||||
}
|
||||
|
||||
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<JKParameter>
|
||||
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<JKModifier>
|
||||
interface JKExtraModifiersOwner : JKModifiersListOwner {
|
||||
var extraModifiers: List<ExtraModifier>
|
||||
}
|
||||
|
||||
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<Modifier> =
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -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<JKParameter>
|
||||
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 {
|
||||
|
||||
@@ -52,10 +52,6 @@ interface JKBranchElement : JKElement {
|
||||
fun invalidate()
|
||||
}
|
||||
|
||||
interface JKModifierListOwner {
|
||||
var modifierList: JKModifierList
|
||||
}
|
||||
|
||||
interface JKType {
|
||||
val nullability: Nullability
|
||||
}
|
||||
|
||||
@@ -12,13 +12,14 @@ interface JKVisitor<out R, in D> {
|
||||
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<out R, in D> {
|
||||
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<out R, in D> {
|
||||
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<out R, in D> {
|
||||
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<out R, in D> {
|
||||
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)
|
||||
|
||||
@@ -21,20 +21,22 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
||||
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<Unit, Nothing?> {
|
||||
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<Unit, Nothing?> {
|
||||
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<Unit, Nothing?> {
|
||||
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<Unit, Nothing?> {
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user