New J2K: Preserve comments and line breaks
This commit is contained in:
committed by
Ilya Kirillov
parent
b9f8ff9079
commit
c20e537b81
@@ -24,6 +24,7 @@ object ConversionsRunner {
|
|||||||
private fun createRootConversion(context: ConversionContext) =
|
private fun createRootConversion(context: ConversionContext) =
|
||||||
batchPipe {
|
batchPipe {
|
||||||
//Java --> Kotlin conversions
|
//Java --> Kotlin conversions
|
||||||
|
+NonCodeElementsConversion()
|
||||||
+JavaModifiersConversion(context)
|
+JavaModifiersConversion(context)
|
||||||
+JavaAnnotationsConversion(context)
|
+JavaAnnotationsConversion(context)
|
||||||
+AnnotationClassConversion(context)
|
+AnnotationClassConversion(context)
|
||||||
@@ -75,7 +76,7 @@ object ConversionsRunner {
|
|||||||
+ImplicitCastsConversion(context)
|
+ImplicitCastsConversion(context)
|
||||||
+DefaultNullabilityToNullableConversion()
|
+DefaultNullabilityToNullableConversion()
|
||||||
+NullableQualifierConversion(context)
|
+NullableQualifierConversion(context)
|
||||||
+InternalClassConversion()
|
+InternalDeclarationConversion()
|
||||||
|
|
||||||
//Kotlin --> Kotlin conversions
|
//Kotlin --> Kotlin conversions
|
||||||
+InnerClassConversion()
|
+InnerClassConversion()
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.intellij.psi.*
|
|||||||
import com.intellij.psi.JavaTokenType.SUPER_KEYWORD
|
import com.intellij.psi.JavaTokenType.SUPER_KEYWORD
|
||||||
import com.intellij.psi.JavaTokenType.THIS_KEYWORD
|
import com.intellij.psi.JavaTokenType.THIS_KEYWORD
|
||||||
import com.intellij.psi.impl.source.tree.ChildRole
|
import com.intellij.psi.impl.source.tree.ChildRole
|
||||||
|
import com.intellij.psi.impl.source.tree.CompositeElement
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiClassObjectAccessExpressionImpl
|
import com.intellij.psi.impl.source.tree.java.PsiClassObjectAccessExpressionImpl
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiLabeledStatementImpl
|
import com.intellij.psi.impl.source.tree.java.PsiLabeledStatementImpl
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
|
import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
|
||||||
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.idea.caches.lightClasses.KtLightClassForDecompiledDeclaration
|
import org.jetbrains.kotlin.idea.caches.lightClasses.KtLightClassForDecompiledDeclaration
|
||||||
|
import org.jetbrains.kotlin.idea.j2k.IdeaDocCommentConverter
|
||||||
import org.jetbrains.kotlin.idea.j2k.content
|
import org.jetbrains.kotlin.idea.j2k.content
|
||||||
import org.jetbrains.kotlin.j2k.ReferenceSearcher
|
import org.jetbrains.kotlin.j2k.ReferenceSearcher
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
@@ -69,6 +71,10 @@ class JavaToJKTreeBuilder(
|
|||||||
|
|
||||||
private fun PsiPackageStatement.toJK(): JKPackageDeclaration =
|
private fun PsiPackageStatement.toJK(): JKPackageDeclaration =
|
||||||
JKPackageDeclarationImpl(JKNameIdentifierImpl(packageName))
|
JKPackageDeclarationImpl(JKNameIdentifierImpl(packageName))
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun PsiImportStatement.toJK(): JKImportStatementImpl {
|
private fun PsiImportStatement.toJK(): JKImportStatementImpl {
|
||||||
val target = resolve()
|
val target = resolve()
|
||||||
@@ -77,8 +83,18 @@ class JavaToJKTreeBuilder(
|
|||||||
if (target is KtLightClassForFacade) rawName.replaceAfterLast('.', "*")
|
if (target is KtLightClassForFacade) rawName.replaceAfterLast('.', "*")
|
||||||
else rawName
|
else rawName
|
||||||
return JKImportStatementImpl(JKNameIdentifierImpl(name))
|
return JKImportStatementImpl(JKNameIdentifierImpl(name))
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun PsiIdentifier?.toJK(): JKNameIdentifier =
|
||||||
|
this?.let {
|
||||||
|
JKNameIdentifierImpl(it.text).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
} ?: JKNameIdentifierImpl("")
|
||||||
|
|
||||||
|
|
||||||
private inner class ExpressionTreeMapper {
|
private inner class ExpressionTreeMapper {
|
||||||
fun PsiExpression?.toJK(): JKExpression {
|
fun PsiExpression?.toJK(): JKExpression {
|
||||||
@@ -118,7 +134,10 @@ class JavaToJKTreeBuilder(
|
|||||||
throw RuntimeException("Not supported: ${this::class}")
|
throw RuntimeException("Not supported: ${this::class}")
|
||||||
}
|
}
|
||||||
}.also {
|
}.also {
|
||||||
if (this != null) (it as PsiOwner).psi = this
|
if (this != null) {
|
||||||
|
(it as PsiOwner).psi = this
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,19 +150,25 @@ class JavaToJKTreeBuilder(
|
|||||||
is JKJavaVoidType -> JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE
|
is JKJavaVoidType -> JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE
|
||||||
else -> JKClassLiteralExpression.LiteralType.JAVA_CLASS
|
else -> JKClassLiteralExpression.LiteralType.JAVA_CLASS
|
||||||
}
|
}
|
||||||
)
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiInstanceOfExpression.toJK(): JKKtIsExpression =
|
fun PsiInstanceOfExpression.toJK(): JKKtIsExpression =
|
||||||
JKKtIsExpressionImpl(operand.toJK(), JKTypeElementImpl(checkType?.type?.toJK(symbolProvider) ?: JKNoTypeImpl))
|
JKKtIsExpressionImpl(operand.toJK(), JKTypeElementImpl(checkType?.type?.toJK(symbolProvider) ?: JKNoTypeImpl))
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiAssignmentExpression.toJK(): JKJavaAssignmentExpression {
|
fun PsiAssignmentExpression.toJK(): JKJavaAssignmentExpression {
|
||||||
return JKJavaAssignmentExpressionImpl(
|
return JKJavaAssignmentExpressionImpl(
|
||||||
lExpression.toJK() as? JKAssignableExpression ?: error("Its possible? ${lExpression.toJK().prettyDebugPrintTree()}"),
|
lExpression.toJK() as? JKAssignableExpression ?: error("Its possible? ${lExpression.toJK().prettyDebugPrintTree()}"),
|
||||||
rExpression.toJK(),
|
rExpression.toJK(),
|
||||||
operationSign.tokenType.toJK()
|
operationSign.tokenType.toJK()
|
||||||
)
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiBinaryExpression.toJK(): JKExpression {
|
fun PsiBinaryExpression.toJK(): JKExpression {
|
||||||
@@ -157,6 +182,9 @@ class JavaToJKTreeBuilder(
|
|||||||
else -> operationSign.tokenType
|
else -> operationSign.tokenType
|
||||||
}
|
}
|
||||||
return JKBinaryExpressionImpl(lOperand.toJK(), rOperand.toJK(), token.toJK())
|
return JKBinaryExpressionImpl(lOperand.toJK(), rOperand.toJK(), token.toJK())
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiLiteralExpression.toJK(): JKLiteralExpression {
|
fun PsiLiteralExpression.toJK(): JKLiteralExpression {
|
||||||
@@ -173,6 +201,8 @@ class JavaToJKTreeBuilder(
|
|||||||
JavaTokenType.FLOAT_LITERAL -> JKJavaLiteralExpressionImpl(text, FLOAT)
|
JavaTokenType.FLOAT_LITERAL -> JKJavaLiteralExpressionImpl(text, FLOAT)
|
||||||
JavaTokenType.DOUBLE_LITERAL -> JKJavaLiteralExpressionImpl(text, DOUBLE)
|
JavaTokenType.DOUBLE_LITERAL -> JKJavaLiteralExpressionImpl(text, DOUBLE)
|
||||||
else -> error("Unknown literal element type: ${this.literalElementType}")
|
else -> error("Unknown literal element type: ${this.literalElementType}")
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,11 +218,15 @@ class JavaToJKTreeBuilder(
|
|||||||
(it.expression as JKLiteralExpression).type
|
(it.expression as JKLiteralExpression).type
|
||||||
)
|
)
|
||||||
} else it
|
} else it
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiPostfixExpression.toJK(): JKExpression {
|
fun PsiPostfixExpression.toJK(): JKExpression {
|
||||||
return JKPostfixExpressionImpl(operand.toJK(), operationSign.tokenType.toJK())
|
return JKPostfixExpressionImpl(operand.toJK(), operationSign.tokenType.toJK()).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiLambdaExpression.toJK(): JKExpression {
|
fun PsiLambdaExpression.toJK(): JKExpression {
|
||||||
@@ -201,11 +235,13 @@ class JavaToJKTreeBuilder(
|
|||||||
when (it) {
|
when (it) {
|
||||||
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
is PsiExpression -> JKExpressionStatementImpl(it.toJK())
|
||||||
is PsiCodeBlock -> JKBlockStatementImpl(with(declarationMapper) { it.toJK() })
|
is PsiCodeBlock -> JKBlockStatementImpl(with(declarationMapper) { it.toJK() })
|
||||||
else -> JKBlockStatementImpl(JKBodyStub)
|
else -> JKBlockStatementImpl(JKBodyStubImpl)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
with(declarationMapper) { parameterList.parameters.map { it.toJK() } }
|
with(declarationMapper) { parameterList.parameters.map { it.toJK() } }
|
||||||
)
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JKExpression.qualified(qualifier: JKExpression?) =
|
private fun JKExpression.qualified(qualifier: JKExpression?) =
|
||||||
@@ -296,6 +332,8 @@ class JavaToJKTreeBuilder(
|
|||||||
symbol is JKFieldSymbol ->
|
symbol is JKFieldSymbol ->
|
||||||
JKFieldAccessExpressionImpl(symbol).qualified(qualifier)
|
JKFieldAccessExpressionImpl(symbol).qualified(qualifier)
|
||||||
else -> TODO(text)
|
else -> TODO(text)
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,14 +354,18 @@ class JavaToJKTreeBuilder(
|
|||||||
is JKClassSymbol -> JKClassAccessExpressionImpl(symbol)
|
is JKClassSymbol -> JKClassAccessExpressionImpl(symbol)
|
||||||
is JKFieldSymbol -> JKFieldAccessExpressionImpl(symbol)
|
is JKFieldSymbol -> JKFieldAccessExpressionImpl(symbol)
|
||||||
else -> TODO()
|
else -> TODO()
|
||||||
}.qualified(qualifierExpression?.toJK())
|
}.qualified(qualifierExpression?.toJK()).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiArrayInitializerExpression.toJK(): JKExpression {
|
fun PsiArrayInitializerExpression.toJK(): JKExpression {
|
||||||
return JKJavaNewArrayImpl(
|
return JKJavaNewArrayImpl(
|
||||||
initializers.map { it.toJK() },
|
initializers.map { it.toJK() },
|
||||||
JKTypeElementImpl(type?.toJK(symbolProvider).safeAs<JKJavaArrayType>()?.type ?: JKContextType)
|
JKTypeElementImpl(type?.toJK(symbolProvider).safeAs<JKJavaArrayType>()?.type ?: JKContextType)
|
||||||
)
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiNewExpression.toJK(): JKExpression {
|
fun PsiNewExpression.toJK(): JKExpression {
|
||||||
@@ -371,23 +413,37 @@ class JavaToJKTreeBuilder(
|
|||||||
with(declarationMapper) { anonymousClass?.createClassBody() } ?: JKEmptyClassBodyImpl()
|
with(declarationMapper) { anonymousClass?.createClassBody() } ?: JKEmptyClassBodyImpl()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return qualifier?.let { JKQualifiedExpressionImpl(it.toJK(), JKJavaQualifierImpl.DOT, newExpression) } ?: newExpression
|
return qualifier?.let {
|
||||||
|
JKQualifiedExpressionImpl(it.toJK(), JKJavaQualifierImpl.DOT, newExpression)
|
||||||
|
} ?: newExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiReferenceParameterList.toJK(): JKTypeArgumentList =
|
fun PsiReferenceParameterList.toJK(): JKTypeArgumentList =
|
||||||
JKTypeArgumentListImpl(this.typeArguments.map { JKTypeElementImpl(it.toJK(symbolProvider)) })
|
JKTypeArgumentListImpl(this.typeArguments.map { JKTypeElementImpl(it.toJK(symbolProvider)) })
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun PsiArrayAccessExpression.toJK(): JKExpression {
|
fun PsiArrayAccessExpression.toJK(): JKExpression {
|
||||||
return JKArrayAccessExpressionImpl(arrayExpression.toJK(), indexExpression?.toJK() ?: TODO())
|
return JKArrayAccessExpressionImpl(arrayExpression.toJK(), indexExpression?.toJK() ?: TODO())
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiTypeCastExpression.toJK(): JKExpression {
|
fun PsiTypeCastExpression.toJK(): JKExpression {
|
||||||
return JKTypeCastExpressionImpl(operand?.toJK() ?: TODO(), castType?.type?.toJK(symbolProvider)?.asTypeElement() ?: TODO())
|
return JKTypeCastExpressionImpl(operand?.toJK() ?: TODO(), castType?.type?.toJK(symbolProvider)?.asTypeElement() ?: TODO())
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiParenthesizedExpression.toJK(): JKExpression {
|
fun PsiParenthesizedExpression.toJK(): JKExpression {
|
||||||
return JKParenthesizedExpressionImpl(expression?.toJK() ?: TODO())
|
return JKParenthesizedExpressionImpl(expression?.toJK() ?: TODO())
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiExpressionList.toJK(): JKArgumentList {
|
fun PsiExpressionList.toJK(): JKArgumentList {
|
||||||
@@ -402,10 +458,14 @@ class JavaToJKTreeBuilder(
|
|||||||
JKPrefixExpressionImpl(
|
JKPrefixExpressionImpl(
|
||||||
jkExpressions.last(),
|
jkExpressions.last(),
|
||||||
JKKtSpreadOperator
|
JKKtSpreadOperator
|
||||||
)
|
).withNonCodeElementsFrom(jkExpressions.last())
|
||||||
jkExpressions.dropLast(1) + staredExpression
|
jkExpressions.dropLast(1) + staredExpression
|
||||||
} else jkExpressions
|
} else jkExpressions
|
||||||
} ?: jkExpressions).let { it.toArgumentList() }
|
} ?: jkExpressions)
|
||||||
|
.toArgumentList()
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -413,10 +473,17 @@ class JavaToJKTreeBuilder(
|
|||||||
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
|
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
|
||||||
fun PsiTypeParameterList.toJK(): JKTypeParameterList =
|
fun PsiTypeParameterList.toJK(): JKTypeParameterList =
|
||||||
JKTypeParameterListImpl(typeParameters.map { it.toJK() })
|
JKTypeParameterListImpl(typeParameters.map { it.toJK() })
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiTypeParameter.toJK(): JKTypeParameter =
|
fun PsiTypeParameter.toJK(): JKTypeParameter =
|
||||||
JKTypeParameterImpl(JKNameIdentifierImpl(name!!),
|
JKTypeParameterImpl(
|
||||||
extendsListTypes.map { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) })
|
nameIdentifier.toJK(),
|
||||||
|
extendsListTypes.map { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) }
|
||||||
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiClass.toJK(): JKClass {
|
fun PsiClass.toJK(): JKClass {
|
||||||
val classKind: JKClass.ClassKind = when {
|
val classKind: JKClass.ClassKind = when {
|
||||||
@@ -427,26 +494,39 @@ class JavaToJKTreeBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun PsiReferenceList.mapTypes() =
|
fun PsiReferenceList.mapTypes() =
|
||||||
this.referencedTypes.map { with(expressionTreeMapper) { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) } }
|
this.referencedTypes.map { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) }
|
||||||
|
|
||||||
val implTypes = this.implementsList?.mapTypes().orEmpty()
|
|
||||||
val extensionType = this.extendsList?.mapTypes().orEmpty()
|
|
||||||
return JKClassImpl(
|
return JKClassImpl(
|
||||||
JKNameIdentifierImpl(name!!),
|
nameIdentifier.toJK(),
|
||||||
JKInheritanceInfoImpl(extensionType, implTypes),
|
inheritanceInfo(),
|
||||||
classKind,
|
classKind,
|
||||||
typeParameterList?.toJK() ?: JKTypeParameterListImpl(),
|
typeParameterList?.toJK() ?: JKTypeParameterListImpl(),
|
||||||
createClassBody(),
|
createClassBody(),
|
||||||
annotationList(this),
|
annotationList(this),
|
||||||
modifiers(),
|
extraModifiers(),
|
||||||
visibility(),
|
visibility(),
|
||||||
modality()
|
modality()
|
||||||
).also { jkClassImpl ->
|
).also { jkClassImpl ->
|
||||||
jkClassImpl.psi = this
|
jkClassImpl.psi = this
|
||||||
symbolProvider.provideUniverseSymbol(this, jkClassImpl)
|
symbolProvider.provideUniverseSymbol(this, jkClassImpl)
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun PsiClass.inheritanceInfo(): JKInheritanceInfo {
|
||||||
|
val implTypes =
|
||||||
|
implementsList?.referencedTypes?.map { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) }.orEmpty()
|
||||||
|
val extensionType =
|
||||||
|
extendsList?.referencedTypes?.map { JKTypeElementImpl(it.toJK(symbolProvider, Nullability.Default)) }.orEmpty()
|
||||||
|
return JKInheritanceInfoImpl(extensionType, implTypes)
|
||||||
|
.also {
|
||||||
|
if (implementsList != null) {
|
||||||
|
it.assignNonCodeElements(implementsList!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiClass.createClassBody() =
|
fun PsiClass.createClassBody() =
|
||||||
JKClassBodyImpl(
|
JKClassBodyImpl(
|
||||||
children.mapNotNull {
|
children.mapNotNull {
|
||||||
@@ -460,42 +540,80 @@ class JavaToJKTreeBuilder(
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
).also {
|
||||||
|
it.leftBrace.assignNonCodeElements(lBrace)
|
||||||
|
it.rightBrace.assignNonCodeElements(rBrace)
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiClassInitializer.toJK(): JKDeclaration =
|
fun PsiClassInitializer.toJK(): JKDeclaration =
|
||||||
if (hasModifier(JvmModifier.STATIC))
|
(if (hasModifier(JvmModifier.STATIC))
|
||||||
JKJavaStaticInitDeclarationImpl(body.toJK())
|
JKJavaStaticInitDeclarationImpl(body.toJK())
|
||||||
else JKKtInitDeclarationImpl(body.toJK())
|
else JKKtInitDeclarationImpl(body.toJK()))
|
||||||
|
.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun PsiEnumConstant.toJK(): JKEnumConstant =
|
fun PsiEnumConstant.toJK(): JKEnumConstant =
|
||||||
JKEnumConstantImpl(
|
JKEnumConstantImpl(
|
||||||
JKNameIdentifierImpl(name),
|
nameIdentifier.toJK(),
|
||||||
with(expressionTreeMapper) { argumentList?.toJK() ?: JKArgumentListImpl() },
|
with(expressionTreeMapper) { argumentList?.toJK() ?: JKArgumentListImpl() },
|
||||||
initializingClass?.createClassBody() ?: JKEmptyClassBodyImpl(),
|
initializingClass?.createClassBody() ?: JKEmptyClassBodyImpl(),
|
||||||
JKTypeElementImpl(JKClassTypeImpl(symbolProvider.provideDirectSymbol(containingClass!!) as JKClassSymbol, emptyList()))
|
JKTypeElementImpl(JKClassTypeImpl(symbolProvider.provideDirectSymbol(containingClass!!) as JKClassSymbol, emptyList()))
|
||||||
).also {
|
).also {
|
||||||
symbolProvider.provideUniverseSymbol(this, it)
|
symbolProvider.provideUniverseSymbol(this, it)
|
||||||
it.psi = this
|
it.psi = this
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun PsiMember.modality() =
|
fun PsiMember.modality() =
|
||||||
when {
|
modifierList?.children?.mapNotNull { child ->
|
||||||
modifierList == null -> Modality.OPEN
|
if (child !is PsiKeyword) return@mapNotNull null
|
||||||
hasModifierProperty(PsiModifier.FINAL) -> Modality.FINAL
|
when (child.text) {
|
||||||
hasModifierProperty(PsiModifier.ABSTRACT) -> Modality.ABSTRACT
|
PsiModifier.FINAL -> Modality.FINAL
|
||||||
else -> Modality.OPEN
|
PsiModifier.ABSTRACT -> Modality.ABSTRACT
|
||||||
}
|
|
||||||
|
else -> null
|
||||||
|
}?.let {
|
||||||
|
JKModalityModifierElementImpl(it).withAssignedNonCodeElements(child)
|
||||||
|
}
|
||||||
|
}?.firstOrNull() ?: JKModalityModifierElementImpl(Modality.OPEN)
|
||||||
|
|
||||||
|
|
||||||
|
fun PsiMember.extraModifiers() =
|
||||||
|
modifierList?.children?.mapNotNull { child ->
|
||||||
|
if (child !is PsiKeyword) return@mapNotNull null
|
||||||
|
when (child.text) {
|
||||||
|
PsiModifier.NATIVE -> ExtraModifier.NATIVE
|
||||||
|
PsiModifier.STATIC -> ExtraModifier.STATIC
|
||||||
|
PsiModifier.STRICTFP -> ExtraModifier.STRICTFP
|
||||||
|
PsiModifier.SYNCHRONIZED -> ExtraModifier.SYNCHRONIZED
|
||||||
|
PsiModifier.TRANSIENT -> ExtraModifier.TRANSIENT
|
||||||
|
PsiModifier.VOLATILE -> ExtraModifier.VOLATILE
|
||||||
|
|
||||||
|
else -> null
|
||||||
|
}?.let {
|
||||||
|
JKExtraModifierElementImpl(it).withAssignedNonCodeElements(child)
|
||||||
|
}
|
||||||
|
}.orEmpty()
|
||||||
|
|
||||||
fun PsiMember.visibility() =
|
fun PsiMember.visibility() =
|
||||||
when {
|
modifierList?.children?.mapNotNull { child ->
|
||||||
modifierList == null -> Visibility.PACKAGE_PRIVATE
|
if (child !is PsiKeyword) return@mapNotNull null
|
||||||
hasModifierProperty(PsiModifier.PACKAGE_LOCAL) -> Visibility.PACKAGE_PRIVATE
|
when (child.text) {
|
||||||
hasModifierProperty(PsiModifier.PRIVATE) -> Visibility.PRIVATE
|
PsiModifier.PACKAGE_LOCAL -> Visibility.PACKAGE_PRIVATE
|
||||||
hasModifierProperty(PsiModifier.PROTECTED) -> handleProtectedVisibility()
|
PsiModifier.PRIVATE -> Visibility.PRIVATE
|
||||||
hasModifierProperty(PsiModifier.PUBLIC) -> Visibility.PUBLIC
|
PsiModifier.PROTECTED -> handleProtectedVisibility()
|
||||||
else -> Visibility.PACKAGE_PRIVATE
|
PsiModifier.PUBLIC -> Visibility.PUBLIC
|
||||||
}
|
|
||||||
|
else -> null
|
||||||
|
}?.let {
|
||||||
|
JKVisibilityModifierElementImpl(it).withAssignedNonCodeElements(child)
|
||||||
|
}
|
||||||
|
}?.firstOrNull() ?: JKVisibilityModifierElementImpl(Visibility.PACKAGE_PRIVATE)
|
||||||
|
|
||||||
|
|
||||||
private fun PsiMember.handleProtectedVisibility(): Visibility {
|
private fun PsiMember.handleProtectedVisibility(): Visibility {
|
||||||
val originalClass = containingClass ?: return Visibility.PROTECTED
|
val originalClass = containingClass ?: return Visibility.PROTECTED
|
||||||
@@ -532,44 +650,21 @@ class JavaToJKTreeBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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 {
|
fun PsiField.toJK(): JKJavaField {
|
||||||
return JKJavaFieldImpl(
|
return JKJavaFieldImpl(
|
||||||
JKTypeElementImpl(type.toJK(symbolProvider)),
|
JKTypeElementImpl(type.toJK(symbolProvider)).withAssignedNonCodeElements(typeElement),
|
||||||
JKNameIdentifierImpl(name),
|
nameIdentifier.toJK(),
|
||||||
with(expressionTreeMapper) { initializer.toJK() },
|
with(expressionTreeMapper) { initializer.toJK() },
|
||||||
annotationList(this),
|
annotationList(this),
|
||||||
modifiers(),
|
extraModifiers(),
|
||||||
visibility(),
|
visibility(),
|
||||||
modality(),
|
modality(),
|
||||||
Mutability.UNKNOWN
|
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
||||||
).also {
|
).also {
|
||||||
symbolProvider.provideUniverseSymbol(this, it)
|
symbolProvider.provideUniverseSymbol(this, it)
|
||||||
it.psi = this
|
it.psi = this
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -598,7 +693,9 @@ class JavaToJKTreeBuilder(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
).also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
|
|
||||||
fun PsiDocComment.deprecatedAnnotation(): JKAnnotation? =
|
fun PsiDocComment.deprecatedAnnotation(): JKAnnotation? =
|
||||||
findTagByName("deprecated")?.let { tag ->
|
findTagByName("deprecated")?.let { tag ->
|
||||||
@@ -619,6 +716,8 @@ class JavaToJKTreeBuilder(
|
|||||||
initializers.map { it.toJK() }
|
initializers.map { it.toJK() }
|
||||||
)
|
)
|
||||||
else -> TODO(this::class.toString())
|
else -> TODO(this::class.toString())
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiAnnotationMethod.toJK(): JKJavaAnnotationMethod =
|
fun PsiAnnotationMethod.toJK(): JKJavaAnnotationMethod =
|
||||||
@@ -626,31 +725,40 @@ class JavaToJKTreeBuilder(
|
|||||||
returnType?.toJK(symbolProvider)?.asTypeElement()
|
returnType?.toJK(symbolProvider)?.asTypeElement()
|
||||||
?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor }
|
?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor }
|
||||||
?: TODO(),
|
?: TODO(),
|
||||||
JKNameIdentifierImpl(name),
|
nameIdentifier.toJK(),
|
||||||
defaultValue?.toJK() ?: JKStubExpressionImpl()
|
defaultValue?.toJK() ?: JKStubExpressionImpl()
|
||||||
).also {
|
).also {
|
||||||
it.psi = this
|
it.psi = this
|
||||||
symbolProvider.provideUniverseSymbol(this, it)
|
symbolProvider.provideUniverseSymbol(this, it)
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun PsiMethod.toJK(): JKJavaMethod {
|
fun PsiMethod.toJK(): JKJavaMethod {
|
||||||
return JKJavaMethodImpl(
|
return JKJavaMethodImpl(
|
||||||
returnType?.toJK(symbolProvider)?.asTypeElement()
|
returnType?.toJK(symbolProvider)?.asTypeElement()
|
||||||
?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor }
|
?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor }
|
||||||
?: TODO(),
|
?: TODO(),
|
||||||
JKNameIdentifierImpl(name),
|
nameIdentifier.toJK(),
|
||||||
parameterList.parameters.map { it.toJK() },
|
parameterList.parameters.map { it.toJK() },
|
||||||
body?.toJK() ?: JKBodyStub,
|
body?.toJK() ?: JKBodyStubImpl,
|
||||||
typeParameterList?.toJK() ?: JKTypeParameterListImpl(),
|
typeParameterList?.toJK() ?: JKTypeParameterListImpl(),
|
||||||
annotationList(this),
|
annotationList(this),
|
||||||
throwsList.referencedTypes.map { JKTypeElementImpl(it.toJK(symbolProvider)) },
|
throwsList.referencedTypes.map { JKTypeElementImpl(it.toJK(symbolProvider)) },
|
||||||
modifiers(),
|
extraModifiers(),
|
||||||
visibility(),
|
visibility(),
|
||||||
modality()
|
modality()
|
||||||
).also {
|
).also { jkMethod ->
|
||||||
it.psi = this
|
jkMethod.psi = this
|
||||||
symbolProvider.provideUniverseSymbol(this, it)
|
symbolProvider.provideUniverseSymbol(this, jkMethod)
|
||||||
}
|
parameterList.node
|
||||||
|
?.safeAs<CompositeElement>()
|
||||||
|
?.also {
|
||||||
|
jkMethod.leftParen.assignNonCodeElements(it.findChildByRoleAsPsiElement(ChildRole.LPARENTH))
|
||||||
|
jkMethod.rightParen.assignNonCodeElements(it.findChildByRoleAsPsiElement(ChildRole.RPARENTH))
|
||||||
|
}
|
||||||
|
}.withAssignedNonCodeElements(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiParameter.toJK(): JKParameter {
|
fun PsiParameter.toJK(): JKParameter {
|
||||||
@@ -660,28 +768,40 @@ class JavaToJKTreeBuilder(
|
|||||||
else rawType.asTypeElement()
|
else rawType.asTypeElement()
|
||||||
return JKParameterImpl(
|
return JKParameterImpl(
|
||||||
type,
|
type,
|
||||||
JKNameIdentifierImpl(name!!),
|
nameIdentifier.toJK(),
|
||||||
isVarArgs
|
isVarArgs
|
||||||
).also {
|
).also {
|
||||||
symbolProvider.provideUniverseSymbol(this, it)
|
symbolProvider.provideUniverseSymbol(this, it)
|
||||||
it.psi = this
|
it.psi = this
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiCodeBlock.toJK(): JKBlock {
|
fun PsiCodeBlock.toJK(): JKBlock =
|
||||||
return JKBlockImpl(statements.map { it.toJK() })
|
JKBlockImpl(statements.map { it.toJK() })
|
||||||
}
|
.withAssignedNonCodeElements(this)
|
||||||
|
.also {
|
||||||
|
it.leftBrace.assignNonCodeElements(lBrace)
|
||||||
|
it.rightBrace.assignNonCodeElements(rBrace)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun PsiLocalVariable.toJK(): JKLocalVariable =
|
fun PsiLocalVariable.toJK(): JKLocalVariable =
|
||||||
JKLocalVariableImpl(
|
JKLocalVariableImpl(
|
||||||
JKTypeElementImpl(type.toJK(symbolProvider)),
|
JKTypeElementImpl(type.toJK(symbolProvider)).withAssignedNonCodeElements(typeElement),
|
||||||
JKNameIdentifierImpl(this.name ?: TODO()),
|
nameIdentifier.toJK(),
|
||||||
with(expressionTreeMapper) { initializer.toJK() },
|
with(expressionTreeMapper) { initializer.toJK() },
|
||||||
if (hasModifierProperty(PsiModifier.FINAL)) Mutability.IMMUTABLE else Mutability.UNKNOWN,
|
JKMutabilityModifierElementImpl(
|
||||||
|
if (hasModifierProperty(PsiModifier.FINAL)) Mutability.IMMUTABLE
|
||||||
|
else Mutability.UNKNOWN
|
||||||
|
),
|
||||||
annotationList(null)
|
annotationList(null)
|
||||||
).also { i ->
|
).also { i ->
|
||||||
symbolProvider.provideUniverseSymbol(this, i)
|
symbolProvider.provideUniverseSymbol(this, i)
|
||||||
i.psi = this
|
i.psi = this
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiStatement?.toJK(): JKStatement {
|
fun PsiStatement?.toJK(): JKStatement {
|
||||||
@@ -735,12 +855,12 @@ class JavaToJKTreeBuilder(
|
|||||||
when (statement) {
|
when (statement) {
|
||||||
is PsiSwitchLabelStatement ->
|
is PsiSwitchLabelStatement ->
|
||||||
cases += if (statement.isDefaultCase)
|
cases += if (statement.isDefaultCase)
|
||||||
JKJavaDefaultSwitchCaseImpl(emptyList())
|
JKJavaDefaultSwitchCaseImpl(emptyList()).withAssignedNonCodeElements(statement)
|
||||||
else
|
else
|
||||||
JKJavaLabelSwitchCaseImpl(
|
JKJavaLabelSwitchCaseImpl(
|
||||||
with(expressionTreeMapper) { statement.caseValue.toJK() },
|
with(expressionTreeMapper) { statement.caseValue.toJK() },
|
||||||
emptyList()
|
emptyList()
|
||||||
)
|
).withAssignedNonCodeElements(statement)
|
||||||
else ->
|
else ->
|
||||||
//TODO Handle case then there is no last case
|
//TODO Handle case then there is no last case
|
||||||
cases.lastOrNull()?.also { it.statements = it.statements + statement.toJK() }
|
cases.lastOrNull()?.also { it.statements = it.statements + statement.toJK() }
|
||||||
@@ -762,7 +882,7 @@ class JavaToJKTreeBuilder(
|
|||||||
}
|
}
|
||||||
is PsiLabeledStatement -> {
|
is PsiLabeledStatement -> {
|
||||||
val (labels, statement) = collectLabels()
|
val (labels, statement) = collectLabels()
|
||||||
JKLabeledStatementImpl(statement.toJK(), labels.map { JKNameIdentifierImpl(it.text) })
|
JKLabeledStatementImpl(statement.toJK(), labels.map { JKNameIdentifierImpl(it.text) }).asStatement()
|
||||||
}
|
}
|
||||||
is PsiEmptyStatement -> JKEmptyStatementImpl()
|
is PsiEmptyStatement -> JKEmptyStatementImpl()
|
||||||
is PsiThrowStatement ->
|
is PsiThrowStatement ->
|
||||||
@@ -770,24 +890,31 @@ class JavaToJKTreeBuilder(
|
|||||||
is PsiTryStatement ->
|
is PsiTryStatement ->
|
||||||
JKJavaTryStatementImpl(
|
JKJavaTryStatementImpl(
|
||||||
resourceList?.toList()?.map { (it as PsiLocalVariable).toJK() }.orEmpty(),
|
resourceList?.toList()?.map { (it as PsiLocalVariable).toJK() }.orEmpty(),
|
||||||
tryBlock?.toJK() ?: JKBodyStub,
|
tryBlock?.toJK() ?: JKBodyStubImpl,
|
||||||
finallyBlock?.toJK() ?: JKBodyStub,
|
finallyBlock?.toJK() ?: JKBodyStubImpl,
|
||||||
catchSections.map { it.toJK() }
|
catchSections.map { it.toJK() }
|
||||||
)
|
)
|
||||||
is PsiSynchronizedStatement ->
|
is PsiSynchronizedStatement ->
|
||||||
JKJavaSynchronizedStatementImpl(
|
JKJavaSynchronizedStatementImpl(
|
||||||
with(expressionTreeMapper) { lockExpression?.toJK() } ?: JKStubExpressionImpl(),
|
with(expressionTreeMapper) { lockExpression?.toJK() } ?: JKStubExpressionImpl(),
|
||||||
body?.toJK() ?: JKBodyStub
|
body?.toJK() ?: JKBodyStubImpl
|
||||||
)
|
)
|
||||||
else -> TODO("for ${this::class}")
|
else -> TODO("for ${this::class}")
|
||||||
}.also {
|
}.also {
|
||||||
if (this != null) (it as PsiOwner).psi = this
|
if (this != null) {
|
||||||
|
(it as PsiOwner).psi = this
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiCatchSection.toJK(): JKJavaTryCatchSection =
|
fun PsiCatchSection.toJK(): JKJavaTryCatchSection =
|
||||||
JKJavaTryCatchSectionImpl(parameter?.toJK()!!, catchBlock?.toJK() ?: JKBodyStub)
|
JKJavaTryCatchSectionImpl(parameter?.toJK()!!, catchBlock?.toJK() ?: JKBodyStubImpl)
|
||||||
.also { it.psi = this }
|
.also {
|
||||||
|
it.psi = this
|
||||||
|
}.also {
|
||||||
|
it.assignNonCodeElements(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO better way than generateSequence.last??
|
//TODO better way than generateSequence.last??
|
||||||
@@ -804,5 +931,79 @@ class JavaToJKTreeBuilder(
|
|||||||
else -> error("Cannot convert non-java file")
|
else -> error("Cannot convert non-java file")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val tokenCache = mutableMapOf<PsiElement, JKNonCodeElement>()
|
||||||
|
|
||||||
|
private fun PsiElement.collectNonCodeElements(): Pair<List<JKNonCodeElement>, List<JKNonCodeElement>> {
|
||||||
|
fun PsiElement.toToken(): JKNonCodeElement? {
|
||||||
|
if (this in tokenCache) return tokenCache[this]!!
|
||||||
|
val token = when {
|
||||||
|
this is PsiDocComment ->
|
||||||
|
JKCommentElementImpl(IdeaDocCommentConverter.convertDocComment(this))
|
||||||
|
this is PsiComment -> JKCommentElementImpl(text)
|
||||||
|
this is PsiWhiteSpace -> JKSpaceElementImpl(text)
|
||||||
|
text == ";" -> null
|
||||||
|
text == "" -> null
|
||||||
|
else -> error("Token should be either token or whitespace")
|
||||||
|
} ?: return null
|
||||||
|
tokenCache[this] = token
|
||||||
|
return token
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Sequence<PsiElement>.toNonCodeElements(): List<JKNonCodeElement> =
|
||||||
|
takeWhile { it is PsiComment || it is PsiWhiteSpace || it.text == ";" }
|
||||||
|
.mapNotNull { it.toToken() }
|
||||||
|
.toList()
|
||||||
|
|
||||||
|
fun PsiElement.isNonCodeElement() =
|
||||||
|
this is PsiComment || this is PsiWhiteSpace || text == ";" || text == ""
|
||||||
|
|
||||||
|
fun PsiElement.nextNonCodeElements() =
|
||||||
|
generateSequence(nextSibling) { it.nextSibling }
|
||||||
|
.takeWhile { it.isNonCodeElement() }
|
||||||
|
|
||||||
|
fun PsiElement.prevNonCodeElements() =
|
||||||
|
generateSequence(prevSibling) { it.prevSibling }
|
||||||
|
.takeWhile { it.isNonCodeElement() }
|
||||||
|
|
||||||
|
|
||||||
|
fun PsiElement.nextNonCodeElementsWithParent(): Sequence<JKNonCodeElement> {
|
||||||
|
val innerElements = nextNonCodeElements()
|
||||||
|
return (if (innerElements.lastOrNull()?.nextSibling == null && this is PsiKeyword)
|
||||||
|
innerElements + parent?.nextNonCodeElements().orEmpty()
|
||||||
|
else innerElements).mapNotNull { it.toToken() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun PsiElement.prevNonCodeElementsWithParent(): Sequence<JKNonCodeElement> {
|
||||||
|
val innerElements = prevNonCodeElements()
|
||||||
|
return (if (innerElements.firstOrNull()?.prevSibling == null && this is PsiKeyword)
|
||||||
|
innerElements + parent?.prevNonCodeElements().orEmpty()
|
||||||
|
else innerElements).mapNotNull { it.toToken() }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val leftInnerTokens = children.asSequence().toNonCodeElements()
|
||||||
|
val rightInnerTokens =
|
||||||
|
if (children.isEmpty()) emptyList()
|
||||||
|
else generateSequence(children.last()) { it.prevSibling }
|
||||||
|
.toNonCodeElements()
|
||||||
|
.reversed()
|
||||||
|
|
||||||
|
|
||||||
|
val leftTokens = generateSequence(prevSibling) { it.prevSibling }
|
||||||
|
.toNonCodeElements()
|
||||||
|
.reversed()
|
||||||
|
|
||||||
|
return (leftInnerTokens + prevNonCodeElementsWithParent()) to (rightInnerTokens + nextNonCodeElementsWithParent())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun JKNonCodeElementsListOwner.assignNonCodeElements(psi: PsiElement?) {
|
||||||
|
if (psi == null) return
|
||||||
|
val (leftTokens, rightTokens) = psi.collectNonCodeElements()
|
||||||
|
this.leftNonCodeElements = leftTokens
|
||||||
|
this.rightNonCodeElements = rightTokens
|
||||||
|
}
|
||||||
|
|
||||||
|
private inline fun <reified T : JKNonCodeElementsListOwner> T.withAssignedNonCodeElements(psi: PsiElement?): T =
|
||||||
|
also { it.assignNonCodeElements(psi) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,9 @@ import org.jetbrains.kotlin.nj2k.NewCodeBuilder.ParenthesisKind.*
|
|||||||
import org.jetbrains.kotlin.nj2k.conversions.parentOfType
|
import org.jetbrains.kotlin.nj2k.conversions.parentOfType
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitorVoid
|
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitorWithCommentsPrinting
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class NewCodeBuilder {
|
class NewCodeBuilder {
|
||||||
|
|
||||||
@@ -41,7 +42,57 @@ class NewCodeBuilder {
|
|||||||
JKClass.ClassKind.COMPANION -> "companion object"
|
JKClass.ClassKind.COMPANION -> "companion object"
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class Visitor : JKVisitorVoid {
|
inner class Visitor : JKVisitorWithCommentsPrinting {
|
||||||
|
private val printedTokens = mutableSetOf<JKNonCodeElement>()
|
||||||
|
|
||||||
|
private fun JKNonCodeElement.createText() =
|
||||||
|
if (this !in printedTokens) {
|
||||||
|
printedTokens += this
|
||||||
|
text
|
||||||
|
} else ""
|
||||||
|
|
||||||
|
|
||||||
|
private fun List<JKNonCodeElement>.createText(): String {
|
||||||
|
val text = joinToString("") { token -> token.createText() }
|
||||||
|
val needNewLine = text.lastIndexOf('\n') < text.lastIndexOf("//")
|
||||||
|
return text +"\n".takeIf { needNewLine }.orEmpty()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun JKNonCodeElementsListOwner.needPreserveSpacesAfterLastCommit() =
|
||||||
|
this is JKArgument
|
||||||
|
|| this is JKParameter
|
||||||
|
|| safeAs<JKTreeElement>()?.parent is JKArgument
|
||||||
|
|| safeAs<JKTreeElement>()?.parent is JKBinaryExpression
|
||||||
|
|
||||||
|
override fun printLeftNonCodeElements(element: JKNonCodeElementsListOwner) {
|
||||||
|
val text = element.leftNonCodeElements
|
||||||
|
.let {
|
||||||
|
if (element.needPreserveSpacesAfterLastCommit()) it
|
||||||
|
else it.dropWhile { it is JKSpaceElement }
|
||||||
|
}.createText()
|
||||||
|
printer.printWithNoIndent(text)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun printRightNonCodeElements(element: JKNonCodeElementsListOwner) {
|
||||||
|
val text = element.rightNonCodeElements
|
||||||
|
.let {
|
||||||
|
if (element.needPreserveSpacesAfterLastCommit()) it
|
||||||
|
else it.dropLastWhile { it is JKSpaceElement }
|
||||||
|
}.createText()
|
||||||
|
printer.printWithNoIndent(text)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun renderTokenElement(tokenElement: JKTokenElement) {
|
||||||
|
printLeftNonCodeElements(tokenElement)
|
||||||
|
printer.printWithNoIndent(tokenElement.text)
|
||||||
|
printRightNonCodeElements(tokenElement)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitModifierElementRaw(modifierElement: JKModifierElement) {
|
||||||
|
printer.printWithNoIndent(modifierElement.modifier.text)
|
||||||
|
}
|
||||||
|
|
||||||
private fun renderExtraTypeParametersUpperBounds(typeParameterList: JKTypeParameterList) {
|
private fun renderExtraTypeParametersUpperBounds(typeParameterList: JKTypeParameterList) {
|
||||||
val extraTypeBounds = typeParameterList.typeParameters
|
val extraTypeBounds = typeParameterList.typeParameters
|
||||||
.filter { it.upperBounds.size > 1 }
|
.filter { it.upperBounds.size > 1 }
|
||||||
@@ -61,33 +112,29 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTreeElement(treeElement: JKTreeElement) {
|
override fun visitTreeElementRaw(treeElement: JKTreeElement) {
|
||||||
printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */")
|
printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtTryExpression(ktTryExpression: JKKtTryExpression) {
|
override fun visitKtTryExpressionRaw(ktTryExpression: JKKtTryExpression) {
|
||||||
printer.printWithNoIndent("try ")
|
printer.printWithNoIndent("try ")
|
||||||
if (ktTryExpression.tryBlock != JKBodyStub) {
|
ktTryExpression.tryBlock.accept(this)
|
||||||
printer.block { ktTryExpression.tryBlock.accept(this) }
|
|
||||||
}
|
|
||||||
ktTryExpression.catchSections.forEach { it.accept(this) }
|
ktTryExpression.catchSections.forEach { it.accept(this) }
|
||||||
if (ktTryExpression.finallyBlock != JKBodyStub) {
|
if (ktTryExpression.finallyBlock != JKBodyStubImpl) {
|
||||||
printer.printWithNoIndent("finally ")
|
printer.printWithNoIndent("finally ")
|
||||||
printer.block { ktTryExpression.finallyBlock.accept(this) }
|
ktTryExpression.finallyBlock.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtTryCatchSection(ktTryCatchSection: JKKtTryCatchSection) {
|
override fun visitKtTryCatchSectionRaw(ktTryCatchSection: JKKtTryCatchSection) {
|
||||||
printer.printWithNoIndent("catch ")
|
printer.printWithNoIndent("catch ")
|
||||||
printer.par {
|
printer.par {
|
||||||
ktTryCatchSection.parameter.accept(this)
|
ktTryCatchSection.parameter.accept(this)
|
||||||
}
|
}
|
||||||
if (ktTryCatchSection.block != JKBodyStub) {
|
ktTryCatchSection.block.accept(this)
|
||||||
printer.block { ktTryCatchSection.block.accept(this) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitForInStatement(forInStatement: JKForInStatement) {
|
override fun visitForInStatementRaw(forInStatement: JKForInStatement) {
|
||||||
printer.printWithNoIndent("for (")
|
printer.printWithNoIndent("for (")
|
||||||
forInStatement.declaration.accept(this)
|
forInStatement.declaration.accept(this)
|
||||||
printer.printWithNoIndent(" in ")
|
printer.printWithNoIndent(" in ")
|
||||||
@@ -100,12 +147,12 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtThrowExpression(ktThrowExpression: JKKtThrowExpression) {
|
override fun visitKtThrowExpressionRaw(ktThrowExpression: JKKtThrowExpression) {
|
||||||
printer.printWithNoIndent("throw ")
|
printer.printWithNoIndent("throw ")
|
||||||
ktThrowExpression.exception.accept(this)
|
ktThrowExpression.exception.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDoWhileStatement(doWhileStatement: JKDoWhileStatement) {
|
override fun visitDoWhileStatementRaw(doWhileStatement: JKDoWhileStatement) {
|
||||||
printer.printWithNoIndent("do ")
|
printer.printWithNoIndent("do ")
|
||||||
doWhileStatement.body.accept(this)
|
doWhileStatement.body.accept(this)
|
||||||
printer.printWithNoIndent(" while (")
|
printer.printWithNoIndent(" while (")
|
||||||
@@ -113,11 +160,11 @@ class NewCodeBuilder {
|
|||||||
printer.printWithNoIndent(")")
|
printer.printWithNoIndent(")")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression) {
|
override fun visitClassAccessExpressionRaw(classAccessExpression: JKClassAccessExpression) {
|
||||||
printer.printWithNoIndent(classAccessExpression.identifier.displayName().escaped())
|
printer.printWithNoIndent(classAccessExpression.identifier.displayName().escaped())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFile(file: JKFile) {
|
override fun visitFileRaw(file: JKFile) {
|
||||||
if (file.packageDeclaration.packageName.value.isNotEmpty()) {
|
if (file.packageDeclaration.packageName.value.isNotEmpty()) {
|
||||||
file.packageDeclaration.accept(this)
|
file.packageDeclaration.accept(this)
|
||||||
}
|
}
|
||||||
@@ -130,32 +177,32 @@ class NewCodeBuilder {
|
|||||||
.map { it.escaped() }
|
.map { it.escaped() }
|
||||||
.joinToString(".") { it }
|
.joinToString(".") { it }
|
||||||
|
|
||||||
override fun visitPackageDeclaration(packageDeclaration: JKPackageDeclaration) {
|
override fun visitPackageDeclarationRaw(packageDeclaration: JKPackageDeclaration) {
|
||||||
printer.printWithNoIndent("package ")
|
printer.printWithNoIndent("package ")
|
||||||
val packageNameEscaped =
|
val packageNameEscaped =
|
||||||
packageDeclaration.packageName.value.escapedAsQualifiedName()
|
packageDeclaration.packageName.value.escapedAsQualifiedName()
|
||||||
printer.printlnWithNoIndent(packageNameEscaped)
|
printer.printlnWithNoIndent(packageNameEscaped)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitImportStatement(importStatement: JKImportStatement) {
|
override fun visitImportStatementRaw(importStatement: JKImportStatement) {
|
||||||
printer.printWithNoIndent("import ")
|
printer.printWithNoIndent("import ")
|
||||||
val importNameEscaped =
|
val importNameEscaped =
|
||||||
importStatement.name.value.escapedAsQualifiedName()
|
importStatement.name.value.escapedAsQualifiedName()
|
||||||
printer.printlnWithNoIndent(importNameEscaped)
|
printer.printlnWithNoIndent(importNameEscaped)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBreakStatement(breakStatement: JKBreakStatement) {
|
override fun visitBreakStatementRaw(breakStatement: JKBreakStatement) {
|
||||||
printer.printWithNoIndent("break")
|
printer.printWithNoIndent("break")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBreakWithLabelStatement(breakWithLabelStatement: JKBreakWithLabelStatement) {
|
override fun visitBreakWithLabelStatementRaw(breakWithLabelStatement: JKBreakWithLabelStatement) {
|
||||||
printer.printWithNoIndent("break@")
|
printer.printWithNoIndent("break@")
|
||||||
breakWithLabelStatement.label.accept(this)
|
breakWithLabelStatement.label.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderModifiersList(modifiersList: JKModifiersListOwner) {
|
private fun renderModifiersList(modifiersList: JKModifiersListOwner) {
|
||||||
renderList(modifiersList.modifiers(), " ") {
|
renderList(modifiersList.modifierElements(), " ") {
|
||||||
printer.printWithNoIndent(it.text)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +218,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitClass(klass: JKClass) {
|
override fun visitClassRaw(klass: JKClass) {
|
||||||
klass.annotationList.accept(this)
|
klass.annotationList.accept(this)
|
||||||
if (klass.annotationList.annotations.isNotEmpty()) {
|
if (klass.annotationList.annotations.isNotEmpty()) {
|
||||||
printer.println()
|
printer.println()
|
||||||
@@ -199,7 +246,7 @@ class NewCodeBuilder {
|
|||||||
klass.classBody.accept(this)
|
klass.classBody.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitInheritanceInfo(inheritanceInfo: JKInheritanceInfo) {
|
override fun visitInheritanceInfoRaw(inheritanceInfo: JKInheritanceInfo) {
|
||||||
val parentClass = inheritanceInfo.parentOfType<JKClass>()!!
|
val parentClass = inheritanceInfo.parentOfType<JKClass>()!!
|
||||||
val isInInterface = parentClass.classKind == JKClass.ClassKind.INTERFACE
|
val isInInterface = parentClass.classKind == JKClass.ClassKind.INTERFACE
|
||||||
val extendTypes = inheritanceInfo.extends.map { it.type.updateNullability(Nullability.NotNull) }
|
val extendTypes = inheritanceInfo.extends.map { it.type.updateNullability(Nullability.NotNull) }
|
||||||
@@ -243,7 +290,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun visitKtProperty(ktProperty: JKKtProperty) {
|
override fun visitKtPropertyRaw(ktProperty: JKKtProperty) {
|
||||||
ktProperty.annotationList.accept(this)
|
ktProperty.annotationList.accept(this)
|
||||||
if (ktProperty.annotationList.annotations.isNotEmpty()) {
|
if (ktProperty.annotationList.annotations.isNotEmpty()) {
|
||||||
printer.println()
|
printer.println()
|
||||||
@@ -270,7 +317,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnumConstant(enumConstant: JKEnumConstant) {
|
override fun visitEnumConstantRaw(enumConstant: JKEnumConstant) {
|
||||||
enumConstant.name.accept(this)
|
enumConstant.name.accept(this)
|
||||||
if (enumConstant.arguments.arguments.isNotEmpty()) {
|
if (enumConstant.arguments.arguments.isNotEmpty()) {
|
||||||
printer.par {
|
printer.par {
|
||||||
@@ -282,22 +329,20 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtInitDeclaration(ktInitDeclaration: JKKtInitDeclaration) {
|
override fun visitKtInitDeclarationRaw(ktInitDeclaration: JKKtInitDeclaration) {
|
||||||
if (ktInitDeclaration.block.statements.isNotEmpty()) {
|
if (ktInitDeclaration.block.statements.isNotEmpty()) {
|
||||||
printer.print("init ")
|
printer.print("init ")
|
||||||
printer.block(multiline = true) {
|
ktInitDeclaration.block.accept(this)
|
||||||
ktInitDeclaration.block.accept(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtIsExpression(ktIsExpression: JKKtIsExpression) {
|
override fun visitKtIsExpressionRaw(ktIsExpression: JKKtIsExpression) {
|
||||||
ktIsExpression.expression.accept(this)
|
ktIsExpression.expression.accept(this)
|
||||||
printer.printWithNoIndent(" is ")
|
printer.printWithNoIndent(" is ")
|
||||||
ktIsExpression.type.accept(this)
|
ktIsExpression.type.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitParameter(parameter: JKParameter) {
|
override fun visitParameterRaw(parameter: JKParameter) {
|
||||||
renderModifiersList(parameter)
|
renderModifiersList(parameter)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
parameter.annotationList.accept(this)
|
parameter.annotationList.accept(this)
|
||||||
@@ -321,7 +366,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtAnnotationArrayInitializerExpression(ktAnnotationArrayInitializerExpression: JKKtAnnotationArrayInitializerExpression) {
|
override fun visitKtAnnotationArrayInitializerExpressionRaw(ktAnnotationArrayInitializerExpression: JKKtAnnotationArrayInitializerExpression) {
|
||||||
printer.print("[")
|
printer.print("[")
|
||||||
renderList(ktAnnotationArrayInitializerExpression.initializers) {
|
renderList(ktAnnotationArrayInitializerExpression.initializers) {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
@@ -329,7 +374,7 @@ class NewCodeBuilder {
|
|||||||
printer.print("]")
|
printer.print("]")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitForLoopVariable(forLoopVariable: JKForLoopVariable) {
|
override fun visitForLoopVariableRaw(forLoopVariable: JKForLoopVariable) {
|
||||||
forLoopVariable.name.accept(this)
|
forLoopVariable.name.accept(this)
|
||||||
if (forLoopVariable.type.present() && forLoopVariable.type.type !is JKContextType) {
|
if (forLoopVariable.type.present() && forLoopVariable.type.type !is JKContextType) {
|
||||||
printer.printWithNoIndent(": ")
|
printer.printWithNoIndent(": ")
|
||||||
@@ -337,7 +382,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtFunction(ktFunction: JKKtFunction) {
|
override fun visitKtFunctionRaw(ktFunction: JKKtFunction) {
|
||||||
printer.printIndent()
|
printer.printIndent()
|
||||||
if (ktFunction.annotationList.annotations.isNotEmpty()) {
|
if (ktFunction.annotationList.annotations.isNotEmpty()) {
|
||||||
ktFunction.annotationList.accept(this)
|
ktFunction.annotationList.accept(this)
|
||||||
@@ -347,21 +392,18 @@ class NewCodeBuilder {
|
|||||||
printer.printWithNoIndent(" fun ")
|
printer.printWithNoIndent(" fun ")
|
||||||
ktFunction.typeParameterList.accept(this)
|
ktFunction.typeParameterList.accept(this)
|
||||||
ktFunction.name.accept(this)
|
ktFunction.name.accept(this)
|
||||||
printer.printWithNoIndent("(")
|
renderTokenElement(ktFunction.leftParen)
|
||||||
renderList(ktFunction.parameters) {
|
renderList(ktFunction.parameters) {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
printer.printWithNoIndent(")", ": ")
|
renderTokenElement(ktFunction.rightParen)
|
||||||
|
printer.printWithNoIndent(": ")
|
||||||
ktFunction.returnType.accept(this)
|
ktFunction.returnType.accept(this)
|
||||||
renderExtraTypeParametersUpperBounds(ktFunction.typeParameterList)
|
renderExtraTypeParametersUpperBounds(ktFunction.typeParameterList)
|
||||||
if (ktFunction.block !== JKBodyStub) {
|
ktFunction.block.accept(this)
|
||||||
printer.block(multiline = ktFunction.block.statements.isNotEmpty()) {
|
|
||||||
ktFunction.block.accept(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitIfElseExpression(ifElseExpression: JKIfElseExpression) {
|
override fun visitIfElseExpressionRaw(ifElseExpression: JKIfElseExpression) {
|
||||||
printer.printWithNoIndent("if (")
|
printer.printWithNoIndent("if (")
|
||||||
ifElseExpression.condition.accept(this)
|
ifElseExpression.condition.accept(this)
|
||||||
printer.printWithNoIndent(")")
|
printer.printWithNoIndent(")")
|
||||||
@@ -370,34 +412,24 @@ class NewCodeBuilder {
|
|||||||
ifElseExpression.elseBranch.accept(this)
|
ifElseExpression.elseBranch.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitIfStatement(ifStatement: JKIfStatement) {
|
override fun visitIfStatementRaw(ifStatement: JKIfStatement) {
|
||||||
printer.printWithNoIndent("if (")
|
printer.printWithNoIndent("if (")
|
||||||
ifStatement.condition.accept(this)
|
ifStatement.condition.accept(this)
|
||||||
printer.printWithNoIndent(")")
|
printer.printWithNoIndent(")")
|
||||||
if (ifStatement.thenBranch.isEmpty()) {
|
if (ifStatement.thenBranch.isEmpty()) {
|
||||||
printer.printWithNoIndent(";")
|
printer.printWithNoIndent(";")
|
||||||
} else {
|
} else {
|
||||||
renderStatementOrBlock(ifStatement.thenBranch)
|
ifStatement.thenBranch.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitIfElseStatement(ifElseStatement: JKIfElseStatement) {
|
override fun visitIfElseStatementRaw(ifElseStatement: JKIfElseStatement) {
|
||||||
visitIfStatement(ifElseStatement)
|
visitIfStatement(ifElseStatement)
|
||||||
printer.printWithNoIndent(" else ")
|
printer.printWithNoIndent(" else ")
|
||||||
renderStatementOrBlock(ifElseStatement.elseBranch)
|
ifElseStatement.elseBranch.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderStatementOrBlock(statement: JKStatement, multiline: Boolean = false) {
|
override fun visitKtGetterOrSetterRaw(ktGetterOrSetter: JKKtGetterOrSetter) {
|
||||||
if (statement is JKBlockStatement) {
|
|
||||||
printer.block(multiline) {
|
|
||||||
statement.block.accept(this)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
statement.accept(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitKtGetterOrSetter(ktGetterOrSetter: JKKtGetterOrSetter) {
|
|
||||||
printer.indented {
|
printer.indented {
|
||||||
renderModifiersList(ktGetterOrSetter)
|
renderModifiersList(ktGetterOrSetter)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
@@ -416,11 +448,11 @@ class NewCodeBuilder {
|
|||||||
printer.printlnWithNoIndent()
|
printer.printlnWithNoIndent()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtEmptyGetterOrSetter(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter) {
|
override fun visitKtEmptyGetterOrSetterRaw(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) {
|
override fun visitBinaryExpressionRaw(binaryExpression: JKBinaryExpression) {
|
||||||
binaryExpression.left.accept(this)
|
binaryExpression.left.accept(this)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
printer.printWithNoIndent(binaryExpression.operator.token.text)
|
printer.printWithNoIndent(binaryExpression.operator.token.text)
|
||||||
@@ -428,7 +460,7 @@ class NewCodeBuilder {
|
|||||||
binaryExpression.right.accept(this)
|
binaryExpression.right.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeParameterList(typeParameterList: JKTypeParameterList) {
|
override fun visitTypeParameterListRaw(typeParameterList: JKTypeParameterList) {
|
||||||
if (typeParameterList.typeParameters.isNotEmpty()) {
|
if (typeParameterList.typeParameters.isNotEmpty()) {
|
||||||
printer.par(ANGLE) {
|
printer.par(ANGLE) {
|
||||||
renderList(typeParameterList.typeParameters) {
|
renderList(typeParameterList.typeParameters) {
|
||||||
@@ -438,7 +470,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeParameter(typeParameter: JKTypeParameter) {
|
override fun visitTypeParameterRaw(typeParameter: JKTypeParameter) {
|
||||||
typeParameter.name.accept(this)
|
typeParameter.name.accept(this)
|
||||||
if (typeParameter.upperBounds.size == 1) {
|
if (typeParameter.upperBounds.size == 1) {
|
||||||
printer.printWithNoIndent(" : ")
|
printer.printWithNoIndent(" : ")
|
||||||
@@ -446,42 +478,42 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLiteralExpression(literalExpression: JKLiteralExpression) {
|
override fun visitLiteralExpressionRaw(literalExpression: JKLiteralExpression) {
|
||||||
printer.printWithNoIndent(literalExpression.literal)
|
printer.printWithNoIndent(literalExpression.literal)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
override fun visitPrefixExpressionRaw(prefixExpression: JKPrefixExpression) {
|
||||||
printer.printWithNoIndent(prefixExpression.operator.token.text)
|
printer.printWithNoIndent(prefixExpression.operator.token.text)
|
||||||
prefixExpression.expression.accept(this)
|
prefixExpression.expression.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitThisExpression(thisExpression: JKThisExpression) {
|
override fun visitThisExpressionRaw(thisExpression: JKThisExpression) {
|
||||||
printer.printWithNoIndent("this")
|
printer.printWithNoIndent("this")
|
||||||
thisExpression.qualifierLabel.accept(this)
|
thisExpression.qualifierLabel.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSuperExpression(superExpression: JKSuperExpression) {
|
override fun visitSuperExpressionRaw(superExpression: JKSuperExpression) {
|
||||||
printer.printWithNoIndent("super")
|
printer.printWithNoIndent("super")
|
||||||
superExpression.qualifierLabel.accept(this)
|
superExpression.qualifierLabel.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitContinueStatement(continueStatement: JKContinueStatement) {
|
override fun visitContinueStatementRaw(continueStatement: JKContinueStatement) {
|
||||||
printer.printWithNoIndent("continue")
|
printer.printWithNoIndent("continue")
|
||||||
continueStatement.label.accept(this)
|
continueStatement.label.accept(this)
|
||||||
printer.printlnWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLabelEmpty(labelEmpty: JKLabelEmpty) {
|
override fun visitLabelEmptyRaw(labelEmpty: JKLabelEmpty) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLabelText(labelText: JKLabelText) {
|
override fun visitLabelTextRaw(labelText: JKLabelText) {
|
||||||
printer.printWithNoIndent("@")
|
printer.printWithNoIndent("@")
|
||||||
labelText.label.accept(this)
|
labelText.label.accept(this)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLabeledStatement(labeledStatement: JKLabeledStatement) {
|
override fun visitLabeledStatementRaw(labeledStatement: JKLabeledStatement) {
|
||||||
for (label in labeledStatement.labels) {
|
for (label in labeledStatement.labels) {
|
||||||
label.accept(this)
|
label.accept(this)
|
||||||
printer.printWithNoIndent("@")
|
printer.printWithNoIndent("@")
|
||||||
@@ -489,16 +521,16 @@ class NewCodeBuilder {
|
|||||||
labeledStatement.statement.accept(this)
|
labeledStatement.statement.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) {
|
override fun visitNameIdentifierRaw(nameIdentifier: JKNameIdentifier) {
|
||||||
printer.printWithNoIndent(nameIdentifier.value.escaped())
|
printer.printWithNoIndent(nameIdentifier.value.escaped())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) {
|
override fun visitPostfixExpressionRaw(postfixExpression: JKPostfixExpression) {
|
||||||
postfixExpression.expression.accept(this)
|
postfixExpression.expression.accept(this)
|
||||||
printer.printWithNoIndent(postfixExpression.operator.token.text)
|
printer.printWithNoIndent(postfixExpression.operator.token.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
override fun visitQualifiedExpressionRaw(qualifiedExpression: JKQualifiedExpression) {
|
||||||
qualifiedExpression.receiver.accept(this)
|
qualifiedExpression.receiver.accept(this)
|
||||||
printer.printWithNoIndent(
|
printer.printWithNoIndent(
|
||||||
when (qualifiedExpression.operator) {
|
when (qualifiedExpression.operator) {
|
||||||
@@ -510,26 +542,26 @@ class NewCodeBuilder {
|
|||||||
qualifiedExpression.selector.accept(this)
|
qualifiedExpression.selector.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitExpressionList(expressionList: JKExpressionList) {
|
override fun visitExpressionListRaw(expressionList: JKExpressionList) {
|
||||||
renderList(expressionList.expressions) { it.accept(this) }
|
renderList(expressionList.expressions) { it.accept(this) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun visitArgumentList(argumentList: JKArgumentList) {
|
override fun visitArgumentListRaw(argumentList: JKArgumentList) {
|
||||||
renderList(argumentList.arguments) { it.accept(this) }
|
renderList(argumentList.arguments) { it.accept(this) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitArgument(argument: JKArgument) {
|
override fun visitArgumentRaw(argument: JKArgument) {
|
||||||
argument.value.accept(this)
|
argument.value.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitNamedArgument(namedArgument: JKNamedArgument) {
|
override fun visitNamedArgumentRaw(namedArgument: JKNamedArgument) {
|
||||||
namedArgument.name.accept(this)
|
namedArgument.name.accept(this)
|
||||||
printer.printWithNoIndent(" = ")
|
printer.printWithNoIndent(" = ")
|
||||||
namedArgument.value.accept(this)
|
namedArgument.value.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression) {
|
override fun visitMethodCallExpressionRaw(methodCallExpression: JKMethodCallExpression) {
|
||||||
printer.printWithNoIndent(FqName(methodCallExpression.identifier.fqName).shortName().asString().escaped())
|
printer.printWithNoIndent(FqName(methodCallExpression.identifier.fqName).shortName().asString().escaped())
|
||||||
methodCallExpression.typeArgumentList.accept(this)
|
methodCallExpression.typeArgumentList.accept(this)
|
||||||
printer.par {
|
printer.par {
|
||||||
@@ -537,7 +569,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeArgumentList(typeArgumentList: JKTypeArgumentList) {
|
override fun visitTypeArgumentListRaw(typeArgumentList: JKTypeArgumentList) {
|
||||||
if (typeArgumentList.typeArguments.isNotEmpty()) {
|
if (typeArgumentList.typeArguments.isNotEmpty()) {
|
||||||
printer.par(ANGLE) {
|
printer.par(ANGLE) {
|
||||||
renderList(typeArgumentList.typeArguments) {
|
renderList(typeArgumentList.typeArguments) {
|
||||||
@@ -547,36 +579,36 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression) {
|
override fun visitParenthesizedExpressionRaw(parenthesizedExpression: JKParenthesizedExpression) {
|
||||||
printer.par {
|
printer.par {
|
||||||
parenthesizedExpression.expression.accept(this)
|
parenthesizedExpression.expression.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDeclarationStatement(declarationStatement: JKDeclarationStatement) {
|
override fun visitDeclarationStatementRaw(declarationStatement: JKDeclarationStatement) {
|
||||||
renderList(declarationStatement.declaredStatements, { printer.println() }) {
|
renderList(declarationStatement.declaredStatements, { printer.println() }) {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression) {
|
override fun visitTypeCastExpressionRaw(typeCastExpression: JKTypeCastExpression) {
|
||||||
typeCastExpression.expression.accept(this)
|
typeCastExpression.expression.accept(this)
|
||||||
printer.printWithNoIndent(" as ")
|
printer.printWithNoIndent(" as ")
|
||||||
typeCastExpression.type.accept(this)
|
typeCastExpression.type.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitWhileStatement(whileStatement: JKWhileStatement) {
|
override fun visitWhileStatementRaw(whileStatement: JKWhileStatement) {
|
||||||
printer.print("while(")
|
printer.print("while(")
|
||||||
whileStatement.condition.accept(this)
|
whileStatement.condition.accept(this)
|
||||||
printer.printWithNoIndent(")")
|
printer.printWithNoIndent(")")
|
||||||
if (whileStatement.body.isEmpty()) {
|
if (whileStatement.body.isEmpty()) {
|
||||||
printer.printWithNoIndent(";")
|
printer.printWithNoIndent(";")
|
||||||
} else {
|
} else {
|
||||||
renderStatementOrBlock(whileStatement.body, multiline = true)
|
whileStatement.body.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLocalVariable(localVariable: JKLocalVariable) {
|
override fun visitLocalVariableRaw(localVariable: JKLocalVariable) {
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
localVariable.annotationList.accept(this)
|
localVariable.annotationList.accept(this)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
@@ -593,13 +625,13 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEmptyStatement(emptyStatement: JKEmptyStatement) {
|
override fun visitEmptyStatementRaw(emptyStatement: JKEmptyStatement) {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitStubExpression(stubExpression: JKStubExpression) {
|
override fun visitStubExpressionRaw(stubExpression: JKStubExpression) {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtConvertedFromForLoopSyntheticWhileStatement(
|
override fun visitKtConvertedFromForLoopSyntheticWhileStatementRaw(
|
||||||
ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement
|
ktConvertedFromForLoopSyntheticWhileStatement: JKKtConvertedFromForLoopSyntheticWhileStatement
|
||||||
) {
|
) {
|
||||||
ktConvertedFromForLoopSyntheticWhileStatement.variableDeclaration.accept(this)
|
ktConvertedFromForLoopSyntheticWhileStatement.variableDeclaration.accept(this)
|
||||||
@@ -638,7 +670,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitJavaNewExpression(javaNewExpression: JKJavaNewExpression) {
|
override fun visitJavaNewExpressionRaw(javaNewExpression: JKJavaNewExpression) {
|
||||||
if (javaNewExpression.isAnonymousClass()) {
|
if (javaNewExpression.isAnonymousClass()) {
|
||||||
printer.printWithNoIndent("object : ")
|
printer.printWithNoIndent("object : ")
|
||||||
}
|
}
|
||||||
@@ -655,62 +687,65 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun visitClassBody(classBody: JKClassBody) {
|
override fun visitClassBodyRaw(classBody: JKClassBody) {
|
||||||
val declarationsToPrint = classBody.declarations.filterNot { it is JKKtPrimaryConstructor }
|
val declarationsToPrint = classBody.declarations.filterNot { it is JKKtPrimaryConstructor }
|
||||||
printer.block(multiline = true) {
|
renderTokenElement(classBody.leftBrace)
|
||||||
val enumConstants = declarationsToPrint.filterIsInstance<JKEnumConstant>()
|
val enumConstants = declarationsToPrint.filterIsInstance<JKEnumConstant>()
|
||||||
val otherDeclarations = declarationsToPrint.filterNot { it is JKEnumConstant }
|
val otherDeclarations = declarationsToPrint.filterNot { it is JKEnumConstant }
|
||||||
renderEnumConstants(enumConstants)
|
renderEnumConstants(enumConstants)
|
||||||
if ((classBody.parent as? JKClass)?.classKind == JKClass.ClassKind.ENUM
|
if ((classBody.parent as? JKClass)?.classKind == JKClass.ClassKind.ENUM
|
||||||
&& otherDeclarations.isNotEmpty()
|
&& otherDeclarations.isNotEmpty()
|
||||||
) {
|
) {
|
||||||
printer.printlnWithNoIndent(";")
|
printer.printlnWithNoIndent(";")
|
||||||
}
|
|
||||||
if (enumConstants.isNotEmpty() && otherDeclarations.isNotEmpty()) {
|
|
||||||
printer.println()
|
|
||||||
}
|
|
||||||
renderNonEnumClassDeclarations(otherDeclarations)
|
|
||||||
}
|
}
|
||||||
|
if (enumConstants.isNotEmpty() && otherDeclarations.isNotEmpty()) {
|
||||||
|
printer.println()
|
||||||
|
}
|
||||||
|
renderNonEnumClassDeclarations(otherDeclarations)
|
||||||
|
renderTokenElement(classBody.rightBrace)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEmptyClassBody(emptyClassBody: JKEmptyClassBody) {}
|
override fun visitEmptyClassBodyRaw(emptyClassBody: JKEmptyClassBody) {}
|
||||||
|
|
||||||
override fun visitTypeElement(typeElement: JKTypeElement) {
|
override fun visitTypeElementRaw(typeElement: JKTypeElement) {
|
||||||
renderType(typeElement.type)
|
renderType(typeElement.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBlock(block: JKBlock) {
|
override fun visitBlockRaw(block: JKBlock) {
|
||||||
|
renderTokenElement(block.leftBrace)
|
||||||
renderList(block.statements, { printer.println() }) {
|
renderList(block.statements, { printer.println() }) {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
|
renderTokenElement(block.rightBrace)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitBlockStatementWithoutBracketsRaw(blockStatementWithoutBrackets: JKBlockStatementWithoutBrackets) {
|
||||||
|
renderList(blockStatementWithoutBrackets.statements, { printer.println() }) {
|
||||||
|
it.accept(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBlockStatementWithoutBrackets(blockStatementWithoutBrackets: JKBlockStatementWithoutBrackets) {
|
override fun visitExpressionStatementRaw(expressionStatement: JKExpressionStatement) {
|
||||||
blockStatementWithoutBrackets.block.accept(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitExpressionStatement(expressionStatement: JKExpressionStatement) {
|
|
||||||
printer.printIndent()
|
|
||||||
expressionStatement.expression.accept(this)
|
expressionStatement.expression.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitReturnStatement(returnStatement: JKReturnStatement) {
|
override fun visitReturnStatementRaw(returnStatement: JKReturnStatement) {
|
||||||
printer.print("return")
|
printer.print("return")
|
||||||
returnStatement.label.accept(this)
|
returnStatement.label.accept(this)
|
||||||
printer.print(" ")
|
printer.print(" ")
|
||||||
returnStatement.expression.accept(this)
|
returnStatement.expression.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) {
|
override fun visitFieldAccessExpressionRaw(fieldAccessExpression: JKFieldAccessExpression) {
|
||||||
printer.printWithNoIndent(fieldAccessExpression.identifier.name.escaped())
|
printer.printWithNoIndent(fieldAccessExpression.identifier.name.escaped())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression) {
|
override fun visitArrayAccessExpressionRaw(arrayAccessExpression: JKArrayAccessExpression) {
|
||||||
arrayAccessExpression.expression.accept(this)
|
arrayAccessExpression.expression.accept(this)
|
||||||
printer.par(SQUARE) { arrayAccessExpression.indexExpression.accept(this) }
|
printer.par(SQUARE) { arrayAccessExpression.indexExpression.accept(this) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDelegationConstructorCall(delegationConstructorCall: JKDelegationConstructorCall) {
|
override fun visitDelegationConstructorCallRaw(delegationConstructorCall: JKDelegationConstructorCall) {
|
||||||
delegationConstructorCall.expression.accept(this)
|
delegationConstructorCall.expression.accept(this)
|
||||||
printer.par {
|
printer.par {
|
||||||
delegationConstructorCall.arguments.accept(this)
|
delegationConstructorCall.arguments.accept(this)
|
||||||
@@ -725,7 +760,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtConstructor(ktConstructor: JKKtConstructor) {
|
override fun visitKtConstructorRaw(ktConstructor: JKKtConstructor) {
|
||||||
ktConstructor.annotationList.accept(this)
|
ktConstructor.annotationList.accept(this)
|
||||||
if (ktConstructor.annotationList.annotations.isNotEmpty()) {
|
if (ktConstructor.annotationList.annotations.isNotEmpty()) {
|
||||||
printer.println()
|
printer.println()
|
||||||
@@ -737,14 +772,10 @@ class NewCodeBuilder {
|
|||||||
builder.append(" : ")
|
builder.append(" : ")
|
||||||
ktConstructor.delegationCall.accept(this)
|
ktConstructor.delegationCall.accept(this)
|
||||||
}
|
}
|
||||||
if (ktConstructor.block !== JKBodyStub) {
|
ktConstructor.block.accept(this)
|
||||||
printer.block(multiline = true) {
|
|
||||||
ktConstructor.block.accept(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) {
|
override fun visitKtPrimaryConstructorRaw(ktPrimaryConstructor: JKKtPrimaryConstructor) {
|
||||||
ktPrimaryConstructor.annotationList.accept(this)
|
ktPrimaryConstructor.annotationList.accept(this)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
renderModifiersList(ktPrimaryConstructor)
|
renderModifiersList(ktPrimaryConstructor)
|
||||||
@@ -756,6 +787,9 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitBodyStub(bodyStub: JKBodyStub) {
|
||||||
|
}
|
||||||
|
|
||||||
private inline fun Printer.indented(block: () -> Unit) {
|
private inline fun Printer.indented(block: () -> Unit) {
|
||||||
this.pushIndent()
|
this.pushIndent()
|
||||||
block()
|
block()
|
||||||
@@ -764,7 +798,6 @@ class NewCodeBuilder {
|
|||||||
|
|
||||||
private inline fun Printer.block(multiline: Boolean = false, crossinline body: () -> Unit) {
|
private inline fun Printer.block(multiline: Boolean = false, crossinline body: () -> Unit) {
|
||||||
par(CURVED) {
|
par(CURVED) {
|
||||||
if (multiline) printer.printWithNoIndent("\n")
|
|
||||||
indented(body)
|
indented(body)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -775,7 +808,7 @@ class NewCodeBuilder {
|
|||||||
this.printWithNoIndent(kind.close)
|
this.printWithNoIndent(kind.close)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLambdaExpression(lambdaExpression: JKLambdaExpression) {
|
override fun visitLambdaExpressionRaw(lambdaExpression: JKLambdaExpression) {
|
||||||
printer.par(CURVED) {
|
printer.par(CURVED) {
|
||||||
if (lambdaExpression.statement.statements.size > 1)
|
if (lambdaExpression.statement.statements.size > 1)
|
||||||
printer.println()
|
printer.println()
|
||||||
@@ -787,7 +820,7 @@ class NewCodeBuilder {
|
|||||||
|
|
||||||
val statement = lambdaExpression.statement
|
val statement = lambdaExpression.statement
|
||||||
if (statement is JKBlockStatement) {
|
if (statement is JKBlockStatement) {
|
||||||
statement.block.accept(this)
|
renderList(statement.block.statements, { printer.println() }) { it.accept(this) }
|
||||||
} else {
|
} else {
|
||||||
statement.accept(this)
|
statement.accept(this)
|
||||||
}
|
}
|
||||||
@@ -796,13 +829,11 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBlockStatement(blockStatement: JKBlockStatement) {
|
override fun visitBlockStatementRaw(blockStatement: JKBlockStatement) {
|
||||||
printer.par(CURVED) {
|
blockStatement.block.accept(this)
|
||||||
blockStatement.block.accept(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement) {
|
override fun visitKtAssignmentStatementRaw(ktAssignmentStatement: JKKtAssignmentStatement) {
|
||||||
ktAssignmentStatement.field.accept(this)
|
ktAssignmentStatement.field.accept(this)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
printer.printWithNoIndent(ktAssignmentStatement.operator.token.text)
|
printer.printWithNoIndent(ktAssignmentStatement.operator.token.text)
|
||||||
@@ -810,7 +841,7 @@ class NewCodeBuilder {
|
|||||||
ktAssignmentStatement.expression.accept(this)
|
ktAssignmentStatement.expression.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtWhenStatement(ktWhenStatement: JKKtWhenStatement) {
|
override fun visitKtWhenStatementRaw(ktWhenStatement: JKKtWhenStatement) {
|
||||||
printer.printWithNoIndent("when(")
|
printer.printWithNoIndent("when(")
|
||||||
ktWhenStatement.expression.accept(this)
|
ktWhenStatement.expression.accept(this)
|
||||||
printer.printWithNoIndent(")")
|
printer.printWithNoIndent(")")
|
||||||
@@ -821,13 +852,13 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotationList(annotationList: JKAnnotationList) {
|
override fun visitAnnotationListRaw(annotationList: JKAnnotationList) {
|
||||||
renderList(annotationList.annotations, " ") {
|
renderList(annotationList.annotations, " ") {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotation(annotation: JKAnnotation) {
|
override fun visitAnnotationRaw(annotation: JKAnnotation) {
|
||||||
printer.printWithNoIndent("@")
|
printer.printWithNoIndent("@")
|
||||||
printer.printWithNoIndent(annotation.classSymbol.displayName().escapedAsQualifiedName())
|
printer.printWithNoIndent(annotation.classSymbol.displayName().escapedAsQualifiedName())
|
||||||
if (annotation.arguments.isNotEmpty()) {
|
if (annotation.arguments.isNotEmpty()) {
|
||||||
@@ -837,17 +868,17 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotationNameParameter(annotationNameParameter: JKAnnotationNameParameter) {
|
override fun visitAnnotationNameParameterRaw(annotationNameParameter: JKAnnotationNameParameter) {
|
||||||
annotationNameParameter.name.accept(this)
|
annotationNameParameter.name.accept(this)
|
||||||
printer.print(" = ")
|
printer.print(" = ")
|
||||||
annotationNameParameter.value.accept(this)
|
annotationNameParameter.value.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotationParameter(annotationParameter: JKAnnotationParameter) {
|
override fun visitAnnotationParameterRaw(annotationParameter: JKAnnotationParameter) {
|
||||||
annotationParameter.value.accept(this)
|
annotationParameter.value.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitClassLiteralExpression(classLiteralExpression: JKClassLiteralExpression) {
|
override fun visitClassLiteralExpressionRaw(classLiteralExpression: JKClassLiteralExpression) {
|
||||||
if (classLiteralExpression.literalType == JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE) {
|
if (classLiteralExpression.literalType == JKClassLiteralExpression.LiteralType.JAVA_VOID_TYPE) {
|
||||||
printer.printWithNoIndent("Void.TYPE")
|
printer.printWithNoIndent("Void.TYPE")
|
||||||
} else {
|
} else {
|
||||||
@@ -861,7 +892,7 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtWhenCase(ktWhenCase: JKKtWhenCase) {
|
override fun visitKtWhenCaseRaw(ktWhenCase: JKKtWhenCase) {
|
||||||
renderList(ktWhenCase.labels, ", ") {
|
renderList(ktWhenCase.labels, ", ") {
|
||||||
it.accept(this)
|
it.accept(this)
|
||||||
}
|
}
|
||||||
@@ -869,11 +900,11 @@ class NewCodeBuilder {
|
|||||||
ktWhenCase.statement.accept(this)
|
ktWhenCase.statement.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtElseWhenLabel(ktElseWhenLabel: JKKtElseWhenLabel) {
|
override fun visitKtElseWhenLabelRaw(ktElseWhenLabel: JKKtElseWhenLabel) {
|
||||||
printer.printWithNoIndent("else")
|
printer.printWithNoIndent("else")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtValueWhenLabel(ktValueWhenLabel: JKKtValueWhenLabel) {
|
override fun visitKtValueWhenLabelRaw(ktValueWhenLabel: JKKtValueWhenLabel) {
|
||||||
ktValueWhenLabel.expression.accept(this)
|
ktValueWhenLabel.expression.accept(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -889,7 +920,6 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private inline fun <T> List<T>.headTail(): Pair<T?, List<T>?> {
|
private inline fun <T> List<T>.headTail(): Pair<T?, List<T>?> {
|
||||||
val head = this.firstOrNull()
|
val head = this.firstOrNull()
|
||||||
val tail = if (size <= 1) null else subList(1, size)
|
val tail = if (size <= 1) null else subList(1, size)
|
||||||
|
|||||||
@@ -7,11 +7,12 @@ package org.jetbrains.kotlin.nj2k
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKElement
|
import org.jetbrains.kotlin.nj2k.tree.JKElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKElementBase
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKElementBase
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.withNonCodeElementsFrom
|
||||||
|
|
||||||
fun <T : JKElement> T.copyTree(): T =
|
fun <T : JKElement> T.copyTree(): T =
|
||||||
when (this) {
|
when (this) {
|
||||||
is JKElementBase ->
|
is JKElementBase ->
|
||||||
this.copy() as T
|
this.copy().withNonCodeElementsFrom(this) as T
|
||||||
else -> TODO("Not supported+$this.toString()")
|
else -> TODO("Not supported+$this.toString()")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
||||||
|
|
||||||
|
|
||||||
|
class AddParenthesisForLineBreaksInBinaryExpression : RecursiveApplicableConversionBase() {
|
||||||
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
|
if (element !is JKBinaryExpression) return recurse(element)
|
||||||
|
if (element.parent is JKBinaryExpression) return recurse(element)
|
||||||
|
if (element.left.rightNonCodeElements.any {
|
||||||
|
it is JKSpaceElement && '\n' in it.text
|
||||||
|
}) {
|
||||||
|
return JKParenthesizedExpressionImpl(
|
||||||
|
JKBinaryExpressionImpl(
|
||||||
|
element::left.detached(),
|
||||||
|
element::right.detached(),
|
||||||
|
element.operator
|
||||||
|
).withNonCodeElementsFrom(element)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return recurse(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.toExpression
|
import org.jetbrains.kotlin.nj2k.toExpression
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
@@ -24,8 +24,8 @@ class AnnotationClassConversion(private val context: ConversionContext) : Recurs
|
|||||||
JKStubExpressionImpl(),
|
JKStubExpressionImpl(),
|
||||||
JKAnnotationListImpl(),
|
JKAnnotationListImpl(),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
Visibility.PUBLIC,
|
JKVisibilityModifierElementImpl(Visibility.PUBLIC),
|
||||||
Modality.FINAL
|
JKModalityModifierElementImpl(Modality.FINAL)
|
||||||
)
|
)
|
||||||
element.modality = Modality.FINAL
|
element.modality = Modality.FINAL
|
||||||
element.classBody.declarations += constructor
|
element.classBody.declarations += constructor
|
||||||
|
|||||||
+4
-4
@@ -28,7 +28,7 @@ class AssignmentStatementSplitAlsoConversion : RecursiveApplicableConversionBase
|
|||||||
if (statements.size == 1) statements.map { it.detached(this) }
|
if (statements.size == 1) statements.map { it.detached(this) }
|
||||||
else statements
|
else statements
|
||||||
}
|
}
|
||||||
)
|
).withNonCodeElementsFrom(this)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,8 +58,8 @@ class AssignmentStatementSplitAlsoConversion : RecursiveApplicableConversionBase
|
|||||||
variable::type.detached(),
|
variable::type.detached(),
|
||||||
variable::name.detached(),
|
variable::name.detached(),
|
||||||
innerAssignmentStatement.field.copyTreeAndDetach(),
|
innerAssignmentStatement.field.copyTreeAndDetach(),
|
||||||
variable.mutability
|
variable::mutabilityElement.detached()
|
||||||
)
|
).withNonCodeElementsFrom(variable)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ class AssignmentStatementSplitAlsoConversion : RecursiveApplicableConversionBase
|
|||||||
qualifiedExpression::receiver.detached(),
|
qualifiedExpression::receiver.detached(),
|
||||||
innerAssignmentStatement.operator
|
innerAssignmentStatement.operator
|
||||||
),
|
),
|
||||||
secondAssignment
|
secondAssignment.withNonCodeElementsFrom(this)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -27,14 +27,14 @@ class AssignmentStatementValCreationConversion(val context: ConversionContext) :
|
|||||||
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
||||||
JKNameIdentifierImpl("arr"),
|
JKNameIdentifierImpl("arr"),
|
||||||
ex1,
|
ex1,
|
||||||
Mutability.IMMUTABLE
|
JKMutabilityModifierElementImpl(Mutability.IMMUTABLE)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.expression = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
assignableExpr.expression = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
||||||
}, JKLocalVariableImpl(
|
}, JKLocalVariableImpl(
|
||||||
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
||||||
JKNameIdentifierImpl("i"),
|
JKNameIdentifierImpl("i"),
|
||||||
ex2,
|
ex2,
|
||||||
Mutability.UNKNOWN
|
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.indexExpression =
|
assignableExpr.indexExpression =
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
||||||
@@ -53,7 +53,7 @@ class AssignmentStatementValCreationConversion(val context: ConversionContext) :
|
|||||||
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
||||||
JKNameIdentifierImpl("arg"),
|
JKNameIdentifierImpl("arg"),
|
||||||
ex,
|
ex,
|
||||||
Mutability.UNKNOWN
|
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.receiver = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
assignableExpr.receiver = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKBlock
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKBlockStatement
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKDeclaration
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
class BlockToRunConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class BlockToRunConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -28,7 +25,7 @@ class BlockToRunConversion(private val context: ConversionContext) : RecursiveAp
|
|||||||
emptyList()
|
emptyList()
|
||||||
)
|
)
|
||||||
val call = JKKtCallExpressionImpl(context.symbolProvider.provideByFqName("kotlin.run", true), JKArgumentListImpl(lambda))
|
val call = JKKtCallExpressionImpl(context.symbolProvider.provideByFqName("kotlin.run", true), JKArgumentListImpl(lambda))
|
||||||
return recurse(JKExpressionStatementImpl(call))
|
return recurse(JKExpressionStatementImpl(call).withNonCodeElementsFrom(element))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ class BoxedTypeOperationsConversion(private val context: ConversionContext) : Re
|
|||||||
"kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}"
|
"kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}"
|
||||||
),
|
),
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
)
|
).withNonCodeElementsFrom(methodCallExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -66,13 +66,13 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi
|
|||||||
context.symbolProvider.provideByFqNameMulti(fqName),
|
context.symbolProvider.provideByFqNameMulti(fqName),
|
||||||
argumentsProvider(from::arguments.detached()),
|
argumentsProvider(from::arguments.detached()),
|
||||||
from::typeArgumentList.detached()
|
from::typeArgumentList.detached()
|
||||||
)
|
).withNonCodeElementsFrom(from)
|
||||||
is JKFieldAccessExpression ->
|
is JKFieldAccessExpression ->
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideByFqNameMulti(fqName),
|
context.symbolProvider.provideByFqNameMulti(fqName),
|
||||||
JKArgumentListImpl(),
|
JKArgumentListImpl(),
|
||||||
JKTypeArgumentListImpl()
|
JKTypeArgumentListImpl()
|
||||||
)
|
).withNonCodeElementsFrom(from)
|
||||||
else -> error("Bad conversion")
|
else -> error("Bad conversion")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,11 +85,11 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi
|
|||||||
is JKMethodCallExpression ->
|
is JKMethodCallExpression ->
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideByFqNameMulti(fqName)
|
context.symbolProvider.provideByFqNameMulti(fqName)
|
||||||
)
|
).withNonCodeElementsFrom(from)
|
||||||
is JKFieldAccessExpression ->
|
is JKFieldAccessExpression ->
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideByFqNameMulti(fqName)
|
context.symbolProvider.provideByFqNameMulti(fqName)
|
||||||
)
|
).withNonCodeElementsFrom(from)
|
||||||
else -> error("Bad conversion")
|
else -> error("Bad conversion")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -109,7 +109,7 @@ class BuiltinMembersConversion(private val context: ConversionContext) : Recursi
|
|||||||
JKArgumentListImpl(arguments.drop(1)),
|
JKArgumentListImpl(arguments.drop(1)),
|
||||||
from::typeArgumentList.detached()
|
from::typeArgumentList.detached()
|
||||||
)
|
)
|
||||||
)
|
).withNonCodeElementsFrom(from)
|
||||||
}
|
}
|
||||||
else -> error("Bad conversion")
|
else -> error("Bad conversion")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.nj2k.getCompanion
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationListImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationListImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKClassImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKClassImpl
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKModalityModifierElementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
|
|
||||||
class ClassToObjectPromotionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class ClassToObjectPromotionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -49,10 +50,10 @@ class ClassToObjectPromotionConversion(private val context: ConversionContext) :
|
|||||||
}.map { it.detached(element.classBody) }
|
}.map { it.detached(element.classBody) }
|
||||||
},
|
},
|
||||||
JKAnnotationListImpl(),
|
JKAnnotationListImpl(),
|
||||||
element.extraModifiers,
|
element.extraModifierElements,
|
||||||
element.visibility,
|
element.visibilityElement,
|
||||||
Modality.FINAL
|
JKModalityModifierElementImpl(Modality.FINAL)
|
||||||
)
|
).withNonCodeElementsFrom(element)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConstructorImpl
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
||||||
|
|
||||||
class ConstructorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class ConstructorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
@@ -24,12 +25,12 @@ class ConstructorConversion(private val context: ConversionContext) : RecursiveA
|
|||||||
element.block,
|
element.block,
|
||||||
delegationCall,
|
delegationCall,
|
||||||
element.annotationList,
|
element.annotationList,
|
||||||
element.extraModifiers,
|
element.extraModifierElements,
|
||||||
element.visibility,
|
element.visibilityElement,
|
||||||
element.modality
|
element.modalityElement
|
||||||
).also {
|
).also {
|
||||||
context.symbolProvider.transferSymbol(it, element)
|
context.symbolProvider.transferSymbol(it, element)
|
||||||
}
|
}.withNonCodeElementsFrom(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun lookupDelegationCall(block: JKBlock): JKDelegationConstructorCall? {
|
private fun lookupDelegationCall(block: JKBlock): JKDelegationConstructorCall? {
|
||||||
|
|||||||
@@ -16,10 +16,12 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
class DefaultArgumentsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class DefaultArgumentsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
|
|
||||||
private fun JKMethod.canNotBeMerged(): Boolean =
|
private fun JKMethod.canNotBeMerged(): Boolean =
|
||||||
modality == Modality.ABSTRACT ||
|
modality == Modality.ABSTRACT
|
||||||
modality == Modality.OVERRIDE ||
|
|| modality == Modality.OVERRIDE
|
||||||
context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi()!!) ||
|
|| hasExtraModifier(ExtraModifier.NATIVE)
|
||||||
annotationList.annotations.isNotEmpty()
|
|| hasExtraModifier(ExtraModifier.SYNCHRONIZED)
|
||||||
|
|| context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi()!!)
|
||||||
|
|| annotationList.annotations.isNotEmpty()
|
||||||
|
|
||||||
|
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
@@ -39,13 +41,13 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur
|
|||||||
if (calledMethod.parent != method.parent
|
if (calledMethod.parent != method.parent
|
||||||
|| callee.name != method.name.value
|
|| callee.name != method.name.value
|
||||||
|| calledMethod.returnType.type != method.returnType.type
|
|| calledMethod.returnType.type != method.returnType.type
|
||||||
|| call.arguments.expressions.size <= method.parameters.size
|
|| call.arguments.arguments.size <= method.parameters.size
|
||||||
) {
|
) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Filter by annotations, visibility, modality, modifiers like synchronized
|
// TODO: Filter by annotations, visibility, modality, extraModifiers like synchronized
|
||||||
if (calledMethod.visibility != method.visibility) continue@checkMethod
|
if (calledMethod.visibility != method.visibility) continue@checkMethod
|
||||||
if (calledMethod.canNotBeMerged()) continue
|
if (calledMethod.canNotBeMerged()) continue
|
||||||
|
|
||||||
@@ -54,8 +56,8 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur
|
|||||||
val targetParameter = calledMethod.parameters[i]
|
val targetParameter = calledMethod.parameters[i]
|
||||||
val argument = call.arguments.arguments[i].value
|
val argument = call.arguments.arguments[i].value
|
||||||
if (parameter.name.value != targetParameter.name.value) continue@checkMethod
|
if (parameter.name.value != targetParameter.name.value) continue@checkMethod
|
||||||
// if (parameter.type.type != targetParameter.type.type) continue@checkMethod
|
if (parameter.type.type != targetParameter.type.type) continue@checkMethod
|
||||||
// if (argument !is JKFieldAccessExpression || argument.identifier.target != parameter) continue@checkMethod
|
if (argument !is JKFieldAccessExpression || argument.identifier.target != parameter) continue@checkMethod
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,12 +23,13 @@ class FieldToPropertyConversion : RecursiveApplicableConversionBase() {
|
|||||||
JKKtEmptyGetterOrSetterImpl(),
|
JKKtEmptyGetterOrSetterImpl(),
|
||||||
JKKtEmptyGetterOrSetterImpl(),
|
JKKtEmptyGetterOrSetterImpl(),
|
||||||
element.annotationList,
|
element.annotationList,
|
||||||
element.extraModifiers,
|
element.extraModifierElements,
|
||||||
element.visibility,
|
element.visibilityElement,
|
||||||
Modality.FINAL,
|
JKModalityModifierElementImpl(Modality.FINAL),
|
||||||
mutability
|
JKMutabilityModifierElementImpl(mutability).withNonCodeElementsFrom(element.modalityElement)
|
||||||
).also {
|
).also {
|
||||||
it.psi = element.psi
|
it.psi = element.psi
|
||||||
|
it.takeNonCodeElementsFrom(element)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
|||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaForLoopStatement) return recurse(element)
|
if (element !is JKJavaForLoopStatement) return recurse(element)
|
||||||
|
|
||||||
convertToForeach(element)?.also { return recurse(it) }
|
convertToForeach(element)?.also { return recurse(it.withNonCodeElementsFrom(element)) }
|
||||||
convertToWhile(element)?.also { return recurse(it) }
|
convertToWhile(element)?.also { return recurse(it.withNonCodeElementsFrom(element)) }
|
||||||
|
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
@@ -69,7 +69,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
|||||||
if (elementPsi.findContinuedStatement()?.toContinuedLoop() != loopStatement.psi<PsiForStatement>()) return recurse(element)
|
if (elementPsi.findContinuedStatement()?.toContinuedLoop() != loopStatement.psi<PsiForStatement>()) return recurse(element)
|
||||||
val statements = loopStatement.updaters.map { it.copyTreeAndDetach() } + element.copyTreeAndDetach()
|
val statements = loopStatement.updaters.map { it.copyTreeAndDetach() } + element.copyTreeAndDetach()
|
||||||
return if (element.parent is JKBlock)
|
return if (element.parent is JKBlock)
|
||||||
JKBlockStatementWithoutBracketsImpl(JKBlockImpl(statements))
|
JKBlockStatementWithoutBracketsImpl(statements)
|
||||||
else JKBlockStatementImpl(JKBlockImpl(statements))
|
else JKBlockStatementImpl(JKBlockImpl(statements))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.ExtraModifier
|
import org.jetbrains.kotlin.nj2k.tree.ExtraModifier
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKClass
|
import org.jetbrains.kotlin.nj2k.tree.JKClass
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKExtraModifierElementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.isLocalClass
|
import org.jetbrains.kotlin.nj2k.tree.isLocalClass
|
||||||
|
|
||||||
class InnerClassConversion : RecursiveApplicableConversionBase() {
|
class InnerClassConversion : RecursiveApplicableConversionBase() {
|
||||||
@@ -25,14 +26,14 @@ class InnerClassConversion : RecursiveApplicableConversionBase() {
|
|||||||
if (element.classKind == JKClass.ClassKind.COMPANION) return recurseArmed(element, outer)
|
if (element.classKind == JKClass.ClassKind.COMPANION) return recurseArmed(element, outer)
|
||||||
if (element.isLocalClass()) return recurseArmed(element, outer)
|
if (element.isLocalClass()) return recurseArmed(element, outer)
|
||||||
|
|
||||||
val static = element.extraModifiers.find { it == ExtraModifier.STATIC }
|
val static = element.extraModifierElements.find { it.extraModifier == ExtraModifier.STATIC }
|
||||||
if (static != null) {
|
if (static != null) {
|
||||||
element.extraModifiers -= static
|
element.extraModifierElements -= static
|
||||||
} else if (element.classKind != JKClass.ClassKind.INTERFACE &&
|
} else if (element.classKind != JKClass.ClassKind.INTERFACE &&
|
||||||
outer.classKind != JKClass.ClassKind.INTERFACE &&
|
outer.classKind != JKClass.ClassKind.INTERFACE &&
|
||||||
element.classKind != JKClass.ClassKind.ENUM
|
element.classKind != JKClass.ClassKind.ENUM
|
||||||
) {
|
) {
|
||||||
element.extraModifiers += ExtraModifier.INNER
|
element.extraModifierElements += JKExtraModifierElementImpl(ExtraModifier.INNER)
|
||||||
}
|
}
|
||||||
return recurseArmed(element, element)
|
return recurseArmed(element, element)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-3
@@ -22,9 +22,8 @@ class InsertDefaultPrimaryConstructorConversion(private val context: ConversionC
|
|||||||
JKStubExpressionImpl(),
|
JKStubExpressionImpl(),
|
||||||
JKAnnotationListImpl(),
|
JKAnnotationListImpl(),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
Visibility.PUBLIC,
|
JKVisibilityModifierElementImpl(Visibility.PUBLIC),
|
||||||
Modality.FINAL
|
JKModalityModifierElementImpl(Modality.FINAL)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
element.classBody.declarations += constructor
|
element.classBody.declarations += constructor
|
||||||
|
|||||||
+11
-1
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
|
||||||
class InternalClassConversion : RecursiveApplicableConversionBase() {
|
class InternalDeclarationConversion : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKVisibilityOwner || element !is JKModalityOwner) return recurse(element)
|
if (element !is JKVisibilityOwner || element !is JKModalityOwner) return recurse(element)
|
||||||
val containingClass = element.parentOfType<JKClass>() ?: return recurse(element)
|
val containingClass = element.parentOfType<JKClass>() ?: return recurse(element)
|
||||||
@@ -19,6 +19,16 @@ class InternalClassConversion : RecursiveApplicableConversionBase() {
|
|||||||
) {
|
) {
|
||||||
element.visibility = Visibility.PUBLIC
|
element.visibility = Visibility.PUBLIC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (containingClass.classKind == JKClass.ClassKind.INTERFACE) {
|
||||||
|
element.visibility = Visibility.PUBLIC
|
||||||
|
}
|
||||||
|
|
||||||
|
if (containingClass.classKind == JKClass.ClassKind.ENUM
|
||||||
|
&& element is JKKtPrimaryConstructor
|
||||||
|
) {
|
||||||
|
element.visibility = Visibility.PRIVATE
|
||||||
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+7
-8
@@ -19,12 +19,9 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.throwAnnotation
|
import org.jetbrains.kotlin.nj2k.throwAnnotation
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKClassBody
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKJavaMethod
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtFunctionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtFunctionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.nj2k.tree.updateNullabilityRecursively
|
|
||||||
|
|
||||||
class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() {
|
class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() {
|
||||||
override fun visitTreeElement(element: JKTreeElement) {
|
override fun visitTreeElement(element: JKTreeElement) {
|
||||||
@@ -53,13 +50,15 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
declaration.extraModifiers,
|
declaration.extraModifierElements,
|
||||||
declaration.visibility,
|
declaration.visibilityElement,
|
||||||
declaration.modality
|
declaration.modalityElement
|
||||||
).also {
|
).also {
|
||||||
it.psi = declaration.psi
|
it.psi = declaration.psi
|
||||||
context.symbolProvider.transferSymbol(it, declaration)
|
context.symbolProvider.transferSymbol(it, declaration)
|
||||||
}
|
it.leftParen.takeNonCodeElementsFrom(declaration.leftParen)
|
||||||
|
it.rightParen.takeNonCodeElementsFrom(declaration.rightParen)
|
||||||
|
}.withNonCodeElementsFrom(declaration)
|
||||||
} else {
|
} else {
|
||||||
declaration
|
declaration
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,25 +29,32 @@ class JavaModifiersConversion(private val context: ConversionContext) : Recursiv
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (element is JKExtraModifiersOwner && element is JKAnnotationListOwner) {
|
if (element is JKExtraModifiersOwner && element is JKAnnotationListOwner) {
|
||||||
if (ExtraModifier.VOLATILE in element.extraModifiers) {
|
element.elementByModifier(ExtraModifier.VOLATILE)?.also { modifierElement ->
|
||||||
element.extraModifiers -= ExtraModifier.VOLATILE
|
element.extraModifierElements -= modifierElement
|
||||||
element.annotationList.annotations += jvmAnnotation("Volatile", context.symbolProvider)
|
element.annotationList.annotations +=
|
||||||
|
jvmAnnotation("Volatile", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
if (ExtraModifier.TRANSIENT in element.extraModifiers) {
|
|
||||||
element.extraModifiers -= ExtraModifier.TRANSIENT
|
element.elementByModifier(ExtraModifier.TRANSIENT)?.also { modifierElement ->
|
||||||
element.annotationList.annotations += jvmAnnotation("Transient", context.symbolProvider)
|
element.extraModifierElements -= modifierElement
|
||||||
|
element.annotationList.annotations +=
|
||||||
|
jvmAnnotation("Transient", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
if (ExtraModifier.STRICTFP in element.extraModifiers) {
|
|
||||||
element.extraModifiers -= ExtraModifier.STRICTFP
|
element.elementByModifier(ExtraModifier.STRICTFP)?.also { modifierElement ->
|
||||||
element.annotationList.annotations += jvmAnnotation("Strictfp", context.symbolProvider)
|
element.extraModifierElements -= modifierElement
|
||||||
|
element.annotationList.annotations +=
|
||||||
|
jvmAnnotation("Strictfp", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
if (ExtraModifier.SYNCHRONIZED in element.extraModifiers) {
|
|
||||||
element.extraModifiers -= ExtraModifier.SYNCHRONIZED
|
element.elementByModifier(ExtraModifier.SYNCHRONIZED)?.also { modifierElement ->
|
||||||
element.annotationList.annotations += jvmAnnotation("Synchronized", context.symbolProvider)
|
element.extraModifierElements -= modifierElement
|
||||||
|
element.annotationList.annotations +=
|
||||||
|
jvmAnnotation("Synchronized", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
if (ExtraModifier.NATIVE in element.extraModifiers) {
|
|
||||||
element.extraModifiers -= ExtraModifier.NATIVE
|
element.elementByModifier(ExtraModifier.NATIVE)?.also { modifierElement ->
|
||||||
element.extraModifiers += ExtraModifier.EXTERNAL
|
modifierElement.extraModifier = ExtraModifier.EXTERNAL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
|
|||||||
@@ -23,8 +23,7 @@ class ModalityConversion(private val context: ConversionContext) : RecursiveAppl
|
|||||||
private fun processClass(klass: JKClass) {
|
private fun processClass(klass: JKClass) {
|
||||||
klass.modality = when {
|
klass.modality = when {
|
||||||
klass.classKind == JKClass.ClassKind.ENUM -> Modality.FINAL
|
klass.classKind == JKClass.ClassKind.ENUM -> Modality.FINAL
|
||||||
klass.modality == Modality.OPEN
|
klass.classKind == JKClass.ClassKind.INTERFACE -> Modality.OPEN
|
||||||
&& context.converter.settings.openByDefault -> Modality.OPEN
|
|
||||||
klass.modality == Modality.OPEN
|
klass.modality == Modality.OPEN
|
||||||
&& context.converter.settings.openByDefault -> Modality.OPEN
|
&& context.converter.settings.openByDefault -> Modality.OPEN
|
||||||
klass.modality == Modality.OPEN
|
klass.modality == Modality.OPEN
|
||||||
@@ -37,16 +36,17 @@ class ModalityConversion(private val context: ConversionContext) : RecursiveAppl
|
|||||||
|
|
||||||
private fun processMethod(method: JKJavaMethod) {
|
private fun processMethod(method: JKJavaMethod) {
|
||||||
val psi = method.psi<PsiMethod>()!!
|
val psi = method.psi<PsiMethod>()!!
|
||||||
val containingClass = method.parentOfType<JKClass>()
|
val containingClass = method.parentOfType<JKClass>()!!
|
||||||
method.modality = when {
|
method.modality = when {
|
||||||
method.modality != Modality.ABSTRACT
|
method.modality != Modality.ABSTRACT
|
||||||
&& (method.psi!! as PsiMethod).findSuperMethods().isNotEmpty() -> Modality.OVERRIDE
|
&& psi.findSuperMethods().isNotEmpty() -> Modality.OVERRIDE
|
||||||
method.modality == Modality.OPEN
|
method.modality == Modality.OPEN
|
||||||
&& context.converter.settings.openByDefault
|
&& context.converter.settings.openByDefault
|
||||||
&& containingClass?.modality == Modality.OPEN
|
&& containingClass.modality == Modality.OPEN
|
||||||
&& method.visibility != Visibility.PRIVATE -> Modality.OPEN
|
&& method.visibility != Visibility.PRIVATE -> Modality.OPEN
|
||||||
|
|
||||||
method.modality == Modality.OPEN
|
method.modality == Modality.OPEN
|
||||||
|
&& containingClass.classKind != JKClass.ClassKind.INTERFACE
|
||||||
&& !context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi) -> Modality.FINAL
|
&& !context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi) -> Modality.FINAL
|
||||||
else -> method.modality
|
else -> method.modality
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKClass
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
|
class NonCodeElementsConversion : RecursiveApplicableConversionBase() {
|
||||||
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
|
when (element) {
|
||||||
|
is JKClass -> {
|
||||||
|
element.name.rightNonCodeElements += element.inheritance.leftNonCodeElements
|
||||||
|
element.inheritance.leftNonCodeElements = emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return recurse(element)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec
|
|||||||
val operatorToken = operator.token.toKtToken()
|
val operatorToken = operator.token.toKtToken()
|
||||||
val left = applyToElement(element::left.detached()) as JKExpression
|
val left = applyToElement(element::left.detached()) as JKExpression
|
||||||
val right = applyToElement(element::right.detached()) as JKExpression
|
val right = applyToElement(element::right.detached()) as JKExpression
|
||||||
recurse(convertBinaryExpression(left, right, operatorToken))
|
recurse(convertBinaryExpression(left, right, operatorToken).withNonCodeElementsFrom(element))
|
||||||
}
|
}
|
||||||
is JKPrefixExpression -> {
|
is JKPrefixExpression -> {
|
||||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||||
@@ -37,7 +37,7 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec
|
|||||||
recurse(kotlinPostfixExpression(operand, operatorToken, context.symbolProvider))
|
recurse(kotlinPostfixExpression(operand, operatorToken, context.symbolProvider))
|
||||||
}
|
}
|
||||||
else -> TODO(element.javaClass.toString())
|
else -> TODO(element.javaClass.toString())
|
||||||
} ?: recurse(element)
|
}.withNonCodeElementsFrom(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+7
-5
@@ -6,10 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.asAssignmentFromTarget
|
|
||||||
import org.jetbrains.kotlin.nj2k.findUsages
|
|
||||||
import org.jetbrains.kotlin.nj2k.hasWritableUsages
|
import org.jetbrains.kotlin.nj2k.hasWritableUsages
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.JKMethod
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.Mutability
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
@@ -23,11 +23,13 @@ class ParameterModificationInMethodCallsConversion(private val context: Conversi
|
|||||||
JKTypeElementImpl(parameter.type.type),
|
JKTypeElementImpl(parameter.type.type),
|
||||||
JKNameIdentifierImpl(parameter.name.value),
|
JKNameIdentifierImpl(parameter.name.value),
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)),
|
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)),
|
||||||
Mutability.MUTABLE
|
JKMutabilityModifierElementImpl(Mutability.MUTABLE)
|
||||||
)
|
)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
element.block.statements = listOf(JKDeclarationStatementImpl(newVariables)) + element.block.statements
|
if (newVariables.isNotEmpty()) {
|
||||||
|
element.block.statements = listOf(JKDeclarationStatementImpl(newVariables)) + element.block.statements
|
||||||
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-5
@@ -32,8 +32,9 @@ class PrimaryConstructorDetectConversion(private val context: ConversionContext)
|
|||||||
primaryConstructorCandidate.invalidate()
|
primaryConstructorCandidate.invalidate()
|
||||||
if (primaryConstructorCandidate.block.statements.isNotEmpty()) {
|
if (primaryConstructorCandidate.block.statements.isNotEmpty()) {
|
||||||
val initDeclaration = JKKtInitDeclarationImpl(primaryConstructorCandidate.block)
|
val initDeclaration = JKKtInitDeclarationImpl(primaryConstructorCandidate.block)
|
||||||
|
.withNonCodeElementsFrom(primaryConstructorCandidate)
|
||||||
element.classBody.declarations =
|
element.classBody.declarations =
|
||||||
element.classBody.declarations.replace(primaryConstructorCandidate, initDeclaration)
|
element.classBody.declarations.replace(primaryConstructorCandidate, initDeclaration)
|
||||||
} else {
|
} else {
|
||||||
element.classBody.declarations -= primaryConstructorCandidate
|
element.classBody.declarations -= primaryConstructorCandidate
|
||||||
}
|
}
|
||||||
@@ -44,10 +45,10 @@ class PrimaryConstructorDetectConversion(private val context: ConversionContext)
|
|||||||
primaryConstructorCandidate.parameters,
|
primaryConstructorCandidate.parameters,
|
||||||
primaryConstructorCandidate.delegationCall,
|
primaryConstructorCandidate.delegationCall,
|
||||||
primaryConstructorCandidate.annotationList,
|
primaryConstructorCandidate.annotationList,
|
||||||
primaryConstructorCandidate.extraModifiers,
|
primaryConstructorCandidate.extraModifierElements,
|
||||||
primaryConstructorCandidate.visibility,
|
primaryConstructorCandidate.visibilityElement,
|
||||||
primaryConstructorCandidate.modality
|
primaryConstructorCandidate.modalityElement
|
||||||
)
|
).withNonCodeElementsFrom(primaryConstructorCandidate)
|
||||||
|
|
||||||
context.symbolProvider.transferSymbol(primaryConstructor, primaryConstructorCandidate)
|
context.symbolProvider.transferSymbol(primaryConstructor, primaryConstructorCandidate)
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtCallExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtCallExpressionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKMethodSymbol
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKMethodSymbol
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
// TODO: Full special methods conversion
|
// TODO: Full special methods conversion
|
||||||
class PrintlnConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class PrintlnConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -41,7 +41,9 @@ class PrintlnConversion(private val context: ConversionContext) : RecursiveAppli
|
|||||||
return JKKtCallExpressionImpl(
|
return JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideDirectSymbol(targetElements.first()) as JKMethodSymbol,
|
context.symbolProvider.provideDirectSymbol(targetElements.first()) as JKMethodSymbol,
|
||||||
selector.arguments
|
selector.arguments
|
||||||
)
|
).withNonCodeElementsFrom(element).also {
|
||||||
|
it.leftNonCodeElements += element.receiver.commentsFromInside()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,10 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
import org.jetbrains.kotlin.nj2k.createCompanion
|
import org.jetbrains.kotlin.nj2k.createCompanion
|
||||||
import org.jetbrains.kotlin.nj2k.getCompanion
|
import org.jetbrains.kotlin.nj2k.getCompanion
|
||||||
import org.jetbrains.kotlin.nj2k.replace
|
import org.jetbrains.kotlin.nj2k.replace
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKClass
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKJavaStaticInitDeclaration
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.detached
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
||||||
|
|
||||||
class StaticInitDeclarationConversion : RecursiveApplicableConversionBase() {
|
class StaticInitDeclarationConversion : RecursiveApplicableConversionBase() {
|
||||||
@@ -36,5 +33,5 @@ class StaticInitDeclarationConversion : RecursiveApplicableConversionBase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun JKJavaStaticInitDeclaration.toKtInitDeclaration() =
|
private fun JKJavaStaticInitDeclaration.toKtInitDeclaration() =
|
||||||
JKKtInitDeclarationImpl(::block.detached())
|
JKKtInitDeclarationImpl(::block.detached()).withNonCodeElementsFrom(this)
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ class StaticMemberAccessConversion(private val context: ConversionContext) : Rec
|
|||||||
?.safeAs<KtObjectDeclaration>()
|
?.safeAs<KtObjectDeclaration>()
|
||||||
?.isCompanion() == true
|
?.isCompanion() == true
|
||||||
is JKTreeElement ->
|
is JKTreeElement ->
|
||||||
target.safeAs<JKModalityOwner>()?.modifiers()?.contains(ExtraModifier.STATIC) == true
|
target.safeAs<JKExtraModifiersOwner>()?.hasExtraModifier(ExtraModifier.STATIC) == true
|
||||||
|| target.parentOfType<JKClass>()?.classKind == JKClass.ClassKind.OBJECT
|
|| target.parentOfType<JKClass>()?.classKind == JKClass.ClassKind.OBJECT
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -7,15 +7,13 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.getOrCreateCompainonObject
|
import org.jetbrains.kotlin.nj2k.getOrCreateCompainonObject
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|
||||||
|
|
||||||
class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() {
|
class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKClass) return recurse(element)
|
if (element !is JKClass) return recurse(element)
|
||||||
if (element.classKind == JKClass.ClassKind.COMPANION || element.classKind == JKClass.ClassKind.OBJECT) return element
|
if (element.classKind == JKClass.ClassKind.COMPANION || element.classKind == JKClass.ClassKind.OBJECT) return element
|
||||||
val statics = element.declarationList.filter { declaration ->
|
val statics = element.declarationList.filter { declaration ->
|
||||||
declaration is JKExtraModifiersOwner &&
|
declaration is JKExtraModifiersOwner && declaration.hasExtraModifier(ExtraModifier.STATIC)
|
||||||
declaration.extraModifiers.any { it == ExtraModifier.STATIC }
|
|
||||||
}
|
}
|
||||||
if (statics.isEmpty()) return recurse(element)
|
if (statics.isEmpty()) return recurse(element)
|
||||||
val companion = element.getOrCreateCompainonObject()
|
val companion = element.getOrCreateCompainonObject()
|
||||||
@@ -23,7 +21,7 @@ class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase()
|
|||||||
element.classBody.declarations -= statics
|
element.classBody.declarations -= statics
|
||||||
companion.classBody.declarations += statics.onEach { declaration ->
|
companion.classBody.declarations += statics.onEach { declaration ->
|
||||||
(declaration as JKExtraModifiersOwner)
|
(declaration as JKExtraModifiersOwner)
|
||||||
declaration.extraModifiers -= ExtraModifier.STATIC
|
declaration.extraModifierElements -= declaration.elementByModifier(ExtraModifier.STATIC)!!
|
||||||
}
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class SwitchStatementConversion(private val context: ConversionContext) : Recurs
|
|||||||
statement.block.statements
|
statement.block.statements
|
||||||
.takeWhile { !isSwitchBreak(it) }
|
.takeWhile { !isSwitchBreak(it) }
|
||||||
.map { it.copyTreeAndDetach() }
|
.map { it.copyTreeAndDetach() }
|
||||||
)
|
).withNonCodeElementsFrom(statement)
|
||||||
isSwitchBreak(statement) -> null
|
isSwitchBreak(statement) -> null
|
||||||
else -> statement.copyTreeAndDetach()
|
else -> statement.copyTreeAndDetach()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.nj2k.ConversionContext
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.JKJavaSynchronizedStatement
|
import org.jetbrains.kotlin.nj2k.tree.JKJavaSynchronizedStatement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.withNonCodeElementsFrom
|
||||||
|
|
||||||
|
|
||||||
class SynchronizedStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class SynchronizedStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -26,7 +27,7 @@ class SynchronizedStatementConversion(private val context: ConversionContext) :
|
|||||||
element.lockExpression,
|
element.lockExpression,
|
||||||
lambdaBody
|
lambdaBody
|
||||||
)
|
)
|
||||||
)
|
).withNonCodeElementsFrom(element)
|
||||||
return recurse(JKExpressionStatementImpl(synchronizedCall))
|
return recurse(JKExpressionStatementImpl(synchronizedCall))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.*
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
|
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
import org.jetbrains.kotlin.nj2k.useExpression
|
||||||
|
|
||||||
|
|
||||||
class TryStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class TryStatementConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
@@ -26,7 +28,7 @@ class TryStatementConversion(private val context: ConversionContext) : Recursive
|
|||||||
tryStatement::finallyBlock.detached(),
|
tryStatement::finallyBlock.detached(),
|
||||||
tryStatement.catchSections.flatMap(::convertCatchSection)
|
tryStatement.catchSections.flatMap(::convertCatchSection)
|
||||||
)
|
)
|
||||||
)
|
).withNonCodeElementsFrom(tryStatement)
|
||||||
|
|
||||||
private fun convertTryStatementWithResources(tryStatement: JKJavaTryStatement): JKStatement {
|
private fun convertTryStatementWithResources(tryStatement: JKJavaTryStatement): JKStatement {
|
||||||
val body =
|
val body =
|
||||||
@@ -41,7 +43,7 @@ class TryStatementConversion(private val context: ConversionContext) : Recursive
|
|||||||
tryStatement::finallyBlock.detached(),
|
tryStatement::finallyBlock.detached(),
|
||||||
tryStatement.catchSections.flatMap(::convertCatchSection)
|
tryStatement.catchSections.flatMap(::convertCatchSection)
|
||||||
)
|
)
|
||||||
)
|
).withNonCodeElementsFrom(tryStatement)
|
||||||
} else body
|
} else body
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +76,7 @@ class TryStatementConversion(private val context: ConversionContext) : Recursive
|
|||||||
JKKtTryCatchSectionImpl(
|
JKKtTryCatchSectionImpl(
|
||||||
parameter,
|
parameter,
|
||||||
javaCatchSection.block.copyTreeAndDetach()
|
javaCatchSection.block.copyTreeAndDetach()
|
||||||
)
|
).withNonCodeElementsFrom(javaCatchSection)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
|||||||
.fixRawType(element)
|
.fixRawType(element)
|
||||||
.mapType(element)
|
.mapType(element)
|
||||||
.refineNullability(element)
|
.refineNullability(element)
|
||||||
JKTypeElementImpl(newType)
|
JKTypeElementImpl(newType).withNonCodeElementsFrom(element)
|
||||||
}
|
}
|
||||||
is JKJavaNewExpression -> {
|
is JKJavaNewExpression -> {
|
||||||
val newClassSymbol = element.classSymbol.mapClassSymbol(null)
|
val newClassSymbol = element.classSymbol.mapClassSymbol(null)
|
||||||
@@ -49,7 +49,7 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
|||||||
element::arguments.detached(),
|
element::arguments.detached(),
|
||||||
element::typeArgumentList.detached().fixTypeArguments(newClassSymbol),
|
element::typeArgumentList.detached().fixTypeArguments(newClassSymbol),
|
||||||
element::classBody.detached()
|
element::classBody.detached()
|
||||||
)
|
).withNonCodeElementsFrom(element)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
else -> recurse(element)
|
else -> recurse(element)
|
||||||
|
|||||||
@@ -384,8 +384,7 @@ fun JKLiteralExpression.fixLiteral(expectedType: JKLiteralExpression.LiteralType
|
|||||||
JKLiteralExpression.LiteralType.CHAR -> convertCharLiteral(literal)
|
JKLiteralExpression.LiteralType.CHAR -> convertCharLiteral(literal)
|
||||||
JKLiteralExpression.LiteralType.STRING -> convertStringLiteral(literal)
|
JKLiteralExpression.LiteralType.STRING -> convertStringLiteral(literal)
|
||||||
else -> this
|
else -> this
|
||||||
}
|
}.withNonCodeElementsFrom(this)
|
||||||
|
|
||||||
|
|
||||||
private fun convertDoubleLiteral(text: String): JKKtLiteralExpression {
|
private fun convertDoubleLiteral(text: String): JKKtLiteralExpression {
|
||||||
var newText =
|
var newText =
|
||||||
@@ -400,6 +399,7 @@ private fun convertDoubleLiteral(text: String): JKKtLiteralExpression {
|
|||||||
if (newText.endsWith("."))
|
if (newText.endsWith("."))
|
||||||
newText += "0"
|
newText += "0"
|
||||||
|
|
||||||
|
|
||||||
return JKKtLiteralExpressionImpl(
|
return JKKtLiteralExpressionImpl(
|
||||||
newText,
|
newText,
|
||||||
JKLiteralExpression.LiteralType.DOUBLE
|
JKLiteralExpression.LiteralType.DOUBLE
|
||||||
@@ -491,8 +491,8 @@ fun createCompanion(declarations: List<JKDeclaration>): JKClass =
|
|||||||
JKClassBodyImpl(declarations),
|
JKClassBodyImpl(declarations),
|
||||||
JKAnnotationListImpl(),
|
JKAnnotationListImpl(),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
Visibility.PUBLIC,
|
JKVisibilityModifierElementImpl(Visibility.PUBLIC),
|
||||||
Modality.FINAL
|
JKModalityModifierElementImpl(Modality.FINAL)
|
||||||
)
|
)
|
||||||
|
|
||||||
fun JKClass.getCompanion(): JKClass? =
|
fun JKClass.getCompanion(): JKClass? =
|
||||||
@@ -508,8 +508,8 @@ fun JKClass.getOrCreateCompainonObject(): JKClass =
|
|||||||
JKClassBodyImpl(),
|
JKClassBodyImpl(),
|
||||||
JKAnnotationListImpl(),
|
JKAnnotationListImpl(),
|
||||||
emptyList(),
|
emptyList(),
|
||||||
Visibility.PUBLIC,
|
JKVisibilityModifierElementImpl(Visibility.PUBLIC),
|
||||||
Modality.FINAL
|
JKModalityModifierElementImpl(Modality.FINAL)
|
||||||
).also { classBody.declarations += it }
|
).also { classBody.declarations += it }
|
||||||
|
|
||||||
fun runExpression(body: JKStatement, symbolProvider: JKSymbolProvider): JKExpression {
|
fun runExpression(body: JKStatement, symbolProvider: JKSymbolProvider): JKExpression {
|
||||||
@@ -523,6 +523,9 @@ fun runExpression(body: JKStatement, symbolProvider: JKSymbolProvider): JKExpres
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun JKTreeElement.asQualifierWithThisAsSelector(): JKQualifiedExpression? =
|
||||||
|
parent?.safeAs<JKQualifiedExpression>()
|
||||||
|
?.takeIf { it.selector == this }
|
||||||
|
|
||||||
fun JKAnnotationMemberValue.toExpression(symbolProvider: JKSymbolProvider): JKExpression {
|
fun JKAnnotationMemberValue.toExpression(symbolProvider: JKSymbolProvider): JKExpression {
|
||||||
fun handleAnnotationParameter(element: JKTreeElement): JKTreeElement =
|
fun handleAnnotationParameter(element: JKTreeElement): JKTreeElement =
|
||||||
@@ -563,6 +566,17 @@ fun JKAnnotationMemberValue.toExpression(symbolProvider: JKSymbolProvider): JKEx
|
|||||||
) as JKExpression
|
) as JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun JKExpression.asLiteralTextWithPrefix(): String? =
|
||||||
|
when {
|
||||||
|
this is JKPrefixExpression
|
||||||
|
&& (operator.token.text == "+" || operator.token.text == "-")
|
||||||
|
&& expression is JKLiteralExpression
|
||||||
|
-> operator.token.text + expression.cast<JKLiteralExpression>().literal
|
||||||
|
this is JKLiteralExpression -> literal
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
inline fun JKClass.primaryConstructor(): JKKtPrimaryConstructor? =
|
inline fun JKClass.primaryConstructor(): JKKtPrimaryConstructor? =
|
||||||
classBody.declarations.firstIsInstanceOrNull()
|
classBody.declarations.firstIsInstanceOrNull()
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.tree.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKBranchElement
|
import org.jetbrains.kotlin.nj2k.tree.JKBranchElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKElement
|
import org.jetbrains.kotlin.nj2k.tree.JKElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKNonCodeElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor
|
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
@@ -38,9 +39,12 @@ private class JKListChild<T : JKElement>(val value: Int) : ReadWriteProperty<JKB
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class JKElementBase : JKTreeElement, Cloneable {
|
abstract class JKElementBase : JKTreeElement, Cloneable {
|
||||||
|
override var leftNonCodeElements: List<JKNonCodeElement> = emptyList()
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = emptyList()
|
||||||
|
|
||||||
override var parent: JKElement? = null
|
override var parent: JKElement? = null
|
||||||
|
|
||||||
final override fun detach(from: JKElement) {
|
override fun detach(from: JKElement) {
|
||||||
val prevParent = parent
|
val prevParent = parent
|
||||||
require(from == prevParent)
|
require(from == prevParent)
|
||||||
parent = null
|
parent = null
|
||||||
@@ -51,7 +55,7 @@ abstract class JKElementBase : JKTreeElement, Cloneable {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun attach(to: JKElement) {
|
override fun attach(to: JKElement) {
|
||||||
check(parent == null)
|
check(parent == null)
|
||||||
parent = to
|
parent = to
|
||||||
onAttach()
|
onAttach()
|
||||||
@@ -71,13 +75,13 @@ abstract class JKElementBase : JKTreeElement, Cloneable {
|
|||||||
|
|
||||||
abstract class JKBranchElementBase : JKElementBase(), JKBranchElement {
|
abstract class JKBranchElementBase : JKElementBase(), JKBranchElement {
|
||||||
private var childNum = 0
|
private var childNum = 0
|
||||||
|
|
||||||
protected fun <T : JKTreeElement, U : T> child(v: U): ReadWriteProperty<JKBranchElementBase, T> {
|
protected fun <T : JKTreeElement, U : T> child(v: U): ReadWriteProperty<JKBranchElementBase, T> {
|
||||||
children.add(childNum, v)
|
children.add(childNum, v)
|
||||||
v.attach(this)
|
v.attach(this)
|
||||||
return JKChild(childNum++)
|
return JKChild(childNum++)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected inline fun <reified T : JKTreeElement> children(): ReadWriteProperty<JKBranchElementBase, List<T>> {
|
protected inline fun <reified T : JKTreeElement> children(): ReadWriteProperty<JKBranchElementBase, List<T>> {
|
||||||
return children(emptyList())
|
return children(emptyList())
|
||||||
}
|
}
|
||||||
@@ -88,7 +92,7 @@ abstract class JKBranchElementBase : JKElementBase(), JKBranchElement {
|
|||||||
return JKListChild(childNum++)
|
return JKListChild(childNum++)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
|
||||||
forEachChild { it.accept(visitor, data) }
|
forEachChild { it.accept(visitor, data) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,18 +31,22 @@ class JKJavaFieldImpl(
|
|||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
initializer: JKExpression,
|
initializer: JKExpression,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality,
|
modalityElement: JKModalityModifierElement,
|
||||||
override var mutability: Mutability
|
mutabilityElement: JKMutabilityModifierElement
|
||||||
) : JKJavaField,
|
) : JKJavaField(), PsiOwner by PsiOwnerImpl() {
|
||||||
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaField(this, data)
|
||||||
|
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
override var initializer: JKExpression by child(initializer)
|
override var initializer: JKExpression by child(initializer)
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
|
override var mutabilityElement by child(mutabilityElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaMethodImpl(
|
class JKJavaMethodImpl(
|
||||||
@@ -53,10 +57,10 @@ class JKJavaMethodImpl(
|
|||||||
typeParameterList: JKTypeParameterList,
|
typeParameterList: JKTypeParameterList,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
throwsList: List<JKTypeElement>,
|
throwsList: List<JKTypeElement>,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality
|
modalityElement: JKModalityModifierElement
|
||||||
) : JKJavaMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKJavaMethod(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaMethod(this, data)
|
||||||
|
|
||||||
override var returnType: JKTypeElement by child(returnType)
|
override var returnType: JKTypeElement by child(returnType)
|
||||||
@@ -66,6 +70,10 @@ class JKJavaMethodImpl(
|
|||||||
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
override var throwsList: List<JKTypeElement> by children(throwsList)
|
override var throwsList: List<JKTypeElement> by children(throwsList)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaLiteralExpressionImpl(
|
class JKJavaLiteralExpressionImpl(
|
||||||
@@ -182,6 +190,15 @@ class JKJavaOperatorImpl private constructor(psiToken: IElementType) : JKOperato
|
|||||||
else -> 6 /* simple name */
|
else -> 6 /* simple name */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// override val priority: Int
|
||||||
|
// get() = when (token.psiToken) {
|
||||||
|
// JavaTokenType.ASTERISK, JavaTokenType.DIV, JavaTokenType.PERC -> 12
|
||||||
|
// JavaTokenType.PLUS, JavaTokenType.MINUS -> 11
|
||||||
|
// JavaTokenType.GTGTGT, JavaTokenType.GTGT, JavaTokenType.LTLT -> 10
|
||||||
|
// JavaTokenType.GT, JavaTokenType.LT, JavaTokenType.GE, JavaTokenType.LE -> 9
|
||||||
|
// JavaTokenType.EQEQ, JavaTokenType.NE, KtTokens.EQEQEQ, KtTokens.EXCLEQEQEQ ->
|
||||||
|
// }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val tokenToOperator =
|
val tokenToOperator =
|
||||||
(OPERATION_BIT_SET.types + arrayOf(KtTokens.EQEQEQ, KtTokens.EXCLEQEQEQ))
|
(OPERATION_BIT_SET.types + arrayOf(KtTokens.EQEQEQ, KtTokens.EXCLEQEQEQ))
|
||||||
@@ -206,12 +223,12 @@ class JKJavaMethodCallExpressionImpl(
|
|||||||
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
override var typeArgumentList: JKTypeArgumentList by child(typeArgumentList)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKClassBodyImpl(declarations: List<JKDeclaration> = emptyList()) : JKClassBody, JKBranchElementBase() {
|
class JKClassBodyImpl(declarations: List<JKDeclaration> = emptyList()) : JKClassBody() {
|
||||||
override var declarations: List<JKDeclaration> by children(declarations)
|
override var declarations: List<JKDeclaration> by children(declarations)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassBody(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassBody(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKEmptyClassBodyImpl : JKEmptyClassBody, JKBranchElementBase() {
|
class JKEmptyClassBodyImpl : JKEmptyClassBody() {
|
||||||
override var declarations: List<JKDeclaration> by children(emptyList())
|
override var declarations: List<JKDeclaration> by children(emptyList())
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEmptyClassBody(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEmptyClassBody(this, data)
|
||||||
@@ -234,13 +251,15 @@ class JKJavaDefaultNewExpressionImpl(
|
|||||||
override val classSymbol: JKClassSymbol
|
override val classSymbol: JKClassSymbol
|
||||||
) : JKJavaDefaultNewExpression, JKElementBase(), PsiOwner by PsiOwnerImpl()
|
) : JKJavaDefaultNewExpression, JKElementBase(), PsiOwner by PsiOwnerImpl()
|
||||||
|
|
||||||
class JKJavaNewEmptyArrayImpl(initializer: List<JKExpression>, type: JKTypeElement) : JKJavaNewEmptyArray, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKJavaNewEmptyArrayImpl(initializer: List<JKExpression>, type: JKTypeElement) : JKJavaNewEmptyArray, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override val type by child(type)
|
override val type by child(type)
|
||||||
override var initializer by children(initializer)
|
override var initializer by children(initializer)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewEmptyArray(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewEmptyArray(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaNewArrayImpl(initializer: List<JKExpression>, type: JKTypeElement) : JKJavaNewArray, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKJavaNewArrayImpl(initializer: List<JKExpression>, type: JKTypeElement) : JKJavaNewArray, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override val type by child(type)
|
override val type by child(type)
|
||||||
override var initializer by children(initializer)
|
override var initializer by children(initializer)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewArray(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewArray(this, data)
|
||||||
@@ -280,14 +299,15 @@ class JKJavaDisjunctionTypeImpl(
|
|||||||
class JKReturnStatementImpl(
|
class JKReturnStatementImpl(
|
||||||
expression: JKExpression,
|
expression: JKExpression,
|
||||||
label: JKLabel = JKLabelEmptyImpl()
|
label: JKLabel = JKLabelEmptyImpl()
|
||||||
) : JKBranchElementBase(), JKReturnStatement, PsiOwner by PsiOwnerImpl() {
|
) : JKReturnStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitReturnStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitReturnStatement(this, data)
|
||||||
|
|
||||||
override val expression by child(expression)
|
override val expression by child(expression)
|
||||||
override var label by child(label)
|
override var label by child(label)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpression) : JKJavaAssertStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpression) : JKJavaAssertStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override val description by child(description)
|
override val description by child(description)
|
||||||
override val condition by child(condition)
|
override val condition by child(condition)
|
||||||
|
|
||||||
@@ -295,7 +315,7 @@ class JKJavaAssertStatementImpl(condition: JKExpression, description: JKExpressi
|
|||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaForLoopStatementImpl(initializer: JKStatement, condition: JKExpression, updaters: List<JKStatement>, body: JKStatement) :
|
class JKJavaForLoopStatementImpl(initializer: JKStatement, condition: JKExpression, updaters: List<JKStatement>, body: JKStatement) :
|
||||||
JKJavaForLoopStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
JKJavaForLoopStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var body by child(body)
|
override var body by child(body)
|
||||||
override var updaters by children(updaters)
|
override var updaters by children(updaters)
|
||||||
override var condition by child(condition)
|
override var condition by child(condition)
|
||||||
@@ -330,13 +350,14 @@ class JKJavaAssignmentExpressionImpl(
|
|||||||
class JKJavaSwitchStatementImpl(
|
class JKJavaSwitchStatementImpl(
|
||||||
expression: JKExpression,
|
expression: JKExpression,
|
||||||
cases: List<JKJavaSwitchCase>
|
cases: List<JKJavaSwitchCase>
|
||||||
) : JKJavaSwitchStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKJavaSwitchStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var expression: JKExpression by child(expression)
|
override var expression: JKExpression by child(expression)
|
||||||
override var cases: List<JKJavaSwitchCase> by children(cases)
|
override var cases: List<JKJavaSwitchCase> by children(cases)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaSwitchStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaSwitchStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaDefaultSwitchCaseImpl(statements: List<JKStatement>) : JKJavaDefaultSwitchCase, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKJavaDefaultSwitchCaseImpl(statements: List<JKStatement>) : JKJavaDefaultSwitchCase, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var statements: List<JKStatement> by children(statements)
|
override var statements: List<JKStatement> by children(statements)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaDefaultSwitchCase(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaDefaultSwitchCase(this, data)
|
||||||
}
|
}
|
||||||
@@ -350,7 +371,7 @@ class JKJavaLabelSwitchCaseImpl(
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLabelSwitchCase(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLabelSwitchCase(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKJavaThrowStatementImpl(exception: JKExpression) : JKJavaThrowStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKJavaThrowStatementImpl(exception: JKExpression) : JKJavaThrowStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var exception: JKExpression by child(exception)
|
override var exception: JKExpression by child(exception)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaThrowStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaThrowStatement(this, data)
|
||||||
}
|
}
|
||||||
@@ -360,8 +381,7 @@ class JKJavaTryStatementImpl(
|
|||||||
tryBlock: JKBlock,
|
tryBlock: JKBlock,
|
||||||
finallyBlock: JKBlock,
|
finallyBlock: JKBlock,
|
||||||
catchSections: List<JKJavaTryCatchSection>
|
catchSections: List<JKJavaTryCatchSection>
|
||||||
) : JKJavaTryStatement,
|
) : JKJavaTryStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
|
||||||
override var resourceDeclarations: List<JKDeclaration> by children(resourceDeclarations)
|
override var resourceDeclarations: List<JKDeclaration> by children(resourceDeclarations)
|
||||||
override var tryBlock: JKBlock by child(tryBlock)
|
override var tryBlock: JKBlock by child(tryBlock)
|
||||||
override var finallyBlock: JKBlock by child(finallyBlock)
|
override var finallyBlock: JKBlock by child(finallyBlock)
|
||||||
@@ -381,7 +401,7 @@ class JKJavaTryCatchSectionImpl(
|
|||||||
class JKJavaSynchronizedStatementImpl(
|
class JKJavaSynchronizedStatementImpl(
|
||||||
lockExpression: JKExpression,
|
lockExpression: JKExpression,
|
||||||
body: JKBlock
|
body: JKBlock
|
||||||
) : JKJavaSynchronizedStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKJavaSynchronizedStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override val lockExpression: JKExpression by child(lockExpression)
|
override val lockExpression: JKExpression by child(lockExpression)
|
||||||
override val body: JKBlock by child(body)
|
override val body: JKBlock by child(body)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaSynchronizedStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaSynchronizedStatement(this, data)
|
||||||
@@ -391,17 +411,14 @@ class JKJavaAnnotationMethodImpl(
|
|||||||
returnType: JKTypeElement,
|
returnType: JKTypeElement,
|
||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
defaultValue: JKAnnotationMemberValue
|
defaultValue: JKAnnotationMemberValue
|
||||||
) : JKJavaAnnotationMethod, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKJavaAnnotationMethod(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var returnType: JKTypeElement by child(returnType)
|
override var returnType: JKTypeElement by child(returnType)
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
override var parameters: List<JKParameter> by children()
|
override var parameters: List<JKParameter> by children()
|
||||||
override var defaultValue: JKAnnotationMemberValue by child(defaultValue)
|
override var defaultValue: JKAnnotationMemberValue by child(defaultValue)
|
||||||
override var block: JKBlock by child(JKBodyStub)
|
override var block: JKBlock by child(JKBodyStubImpl)
|
||||||
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
||||||
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl())
|
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl())
|
||||||
override var extraModifiers: List<ExtraModifier> = emptyList()
|
|
||||||
override var visibility: Visibility = Visibility.PUBLIC
|
|
||||||
override var modality: Modality = Modality.FINAL
|
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaAnnotationMethod(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaAnnotationMethod(this, data)
|
||||||
}
|
}
|
||||||
@@ -414,7 +431,8 @@ class JKKtAnnotationArrayInitializerExpressionImpl(initializers: List<JKAnnotati
|
|||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAnnotationArrayInitializerExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAnnotationArrayInitializerExpression(this, data)
|
||||||
}
|
}
|
||||||
class JKJavaStaticInitDeclarationImpl(block: JKBlock) : JKJavaStaticInitDeclaration, JKBranchElementBase() {
|
|
||||||
|
class JKJavaStaticInitDeclarationImpl(block: JKBlock) : JKJavaStaticInitDeclaration() {
|
||||||
override var block: JKBlock by child(block)
|
override var block: JKBlock by child(block)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaStaticInitDeclaration(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaStaticInitDeclaration(this, data)
|
||||||
}
|
}
|
||||||
@@ -50,10 +50,10 @@ class JKClassImpl(
|
|||||||
typeParameterList: JKTypeParameterList,
|
typeParameterList: JKTypeParameterList,
|
||||||
classBody: JKClassBody,
|
classBody: JKClassBody,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality
|
modalityElement: JKModalityModifierElement
|
||||||
) : JKClass, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKClass(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClass(this, data)
|
||||||
|
|
||||||
override var name by child(name)
|
override var name by child(name)
|
||||||
@@ -61,6 +61,10 @@ class JKClassImpl(
|
|||||||
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
||||||
override var classBody: JKClassBody by child(classBody)
|
override var classBody: JKClassBody by child(classBody)
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKNameIdentifierImpl(override val value: String) : JKNameIdentifier, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||||
@@ -72,7 +76,7 @@ class JKForLoopVariableImpl(
|
|||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
initializer: JKExpression,
|
initializer: JKExpression,
|
||||||
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
||||||
) : JKForLoopVariable, JKBranchElementBase() {
|
) : JKForLoopVariable() {
|
||||||
override var initializer by child(initializer)
|
override var initializer by child(initializer)
|
||||||
override var name by child(name)
|
override var name by child(name)
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
@@ -88,16 +92,18 @@ class JKParameterImpl(
|
|||||||
override var isVarArgs: Boolean = false,
|
override var isVarArgs: Boolean = false,
|
||||||
initializer: JKExpression = JKStubExpressionImpl(),
|
initializer: JKExpression = JKStubExpressionImpl(),
|
||||||
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
||||||
) : JKParameter, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKParameter(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParameter(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParameter(this, data)
|
||||||
|
|
||||||
override var initializer by child(initializer)
|
override var initializer by child(initializer)
|
||||||
override var name by child(name)
|
override var name by child(name)
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
|
override var annotationList by child(annotationList)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock(), PsiOwner by PsiOwnerImpl() {
|
||||||
constructor(vararg statements: JKStatement) : this(statements.toList())
|
constructor(vararg statements: JKStatement) : this(statements.toList())
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
|
||||||
|
|
||||||
override var statements by children(statements)
|
override var statements by children(statements)
|
||||||
@@ -114,21 +120,24 @@ class JKBinaryExpressionImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKPrefixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPrefixExpression, JKBranchElementBase(),
|
||||||
class JKPrefixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPrefixExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPrefixExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPrefixExpression(this, data)
|
||||||
|
|
||||||
override var expression by child(expression)
|
override var expression by child(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKPostfixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPostfixExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKPostfixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPostfixExpression, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPostfixExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPostfixExpression(this, data)
|
||||||
|
|
||||||
override var expression by child(expression)
|
override var expression by child(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKExpressionListImpl(expressions: List<JKExpression> = emptyList()) : JKExpressionList, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKExpressionListImpl(expressions: List<JKExpression> = emptyList()) : JKExpressionList, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
constructor(vararg expresions: JKExpression) : this(expresions.asList())
|
constructor(vararg expresions: JKExpression) : this(expresions.asList())
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionList(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionList(this, data)
|
||||||
|
|
||||||
override var expressions by children(expressions)
|
override var expressions by children(expressions)
|
||||||
@@ -145,16 +154,19 @@ class JKQualifiedExpressionImpl(
|
|||||||
override var selector: JKExpression by child(selector)
|
override var selector: JKExpression by child(selector)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKExpressionStatementImpl(expression: JKExpression) : JKExpressionStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKExpressionStatementImpl(expression: JKExpression) : JKExpressionStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExpressionStatement(this, data)
|
||||||
|
|
||||||
override val expression: JKExpression by child(expression)
|
override val expression: JKExpression by child(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKDeclarationStatementImpl(declaredStatements: List<JKDeclaration>) : JKDeclarationStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKDeclarationStatementImpl(declaredStatements: List<JKDeclaration>) : JKDeclarationStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override val declaredStatements by children(declaredStatements)
|
override val declaredStatements by children(declaredStatements)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDeclarationStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDeclarationStatement(this, data)
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKArrayAccessExpressionImpl(
|
class JKArrayAccessExpressionImpl(
|
||||||
@@ -167,13 +179,15 @@ class JKArrayAccessExpressionImpl(
|
|||||||
override var indexExpression: JKExpression by child(indexExpression)
|
override var indexExpression: JKExpression by child(indexExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKParenthesizedExpressionImpl(expression: JKExpression) : JKParenthesizedExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKParenthesizedExpressionImpl(expression: JKExpression) : JKParenthesizedExpression, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParenthesizedExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitParenthesizedExpression(this, data)
|
||||||
|
|
||||||
override var expression: JKExpression by child(expression)
|
override var expression: JKExpression by child(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKTypeCastExpressionImpl(override var expression: JKExpression, type: JKTypeElement) : JKTypeCastExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKTypeCastExpressionImpl(override var expression: JKExpression, type: JKTypeElement) : JKTypeCastExpression, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeCastExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitTypeCastExpression(this, data)
|
||||||
|
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
@@ -189,7 +203,7 @@ data class JKClassTypeImpl(
|
|||||||
override val nullability: Nullability = Nullability.Default
|
override val nullability: Nullability = Nullability.Default
|
||||||
) : JKClassType
|
) : JKClassType
|
||||||
|
|
||||||
object JKNoTypeImpl: JKNoType {
|
object JKNoTypeImpl : JKNoType {
|
||||||
override val nullability: Nullability = Nullability.NotNull
|
override val nullability: Nullability = Nullability.NotNull
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,14 +265,16 @@ class JKLocalVariableImpl(
|
|||||||
type: JKTypeElement,
|
type: JKTypeElement,
|
||||||
name: JKNameIdentifier,
|
name: JKNameIdentifier,
|
||||||
initializer: JKExpression,
|
initializer: JKExpression,
|
||||||
override var mutability: Mutability,
|
mutabilityElement: JKMutabilityModifierElement,
|
||||||
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
||||||
) : JKLocalVariable, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKLocalVariable(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var initializer by child(initializer)
|
override var initializer by child(initializer)
|
||||||
override var name by child(name)
|
override var name by child(name)
|
||||||
override var type by child(type)
|
override var type by child(type)
|
||||||
override var annotationList by child(annotationList)
|
override var annotationList by child(annotationList)
|
||||||
|
|
||||||
|
override var mutabilityElement by child(mutabilityElement)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLocalVariable(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLocalVariable(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,19 +282,23 @@ class JKStubExpressionImpl : JKStubExpression, JKElementBase(), PsiOwner by PsiO
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitStubExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitStubExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
object JKBodyStub : JKBlock, JKTreeElement {
|
object JKBodyStubImpl : JKBodyStub() {
|
||||||
|
override var leftNonCodeElements: List<JKNonCodeElement> = emptyList()//TODO fix
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = emptyList()//TODO fix
|
||||||
|
|
||||||
override fun copy(): JKTreeElement = this
|
override fun copy(): JKTreeElement = this
|
||||||
|
|
||||||
override var statements: List<JKStatement>
|
override var statements: List<JKStatement>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
set(value) {}
|
set(value) {}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBodyStub(this, data)
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
|
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
|
||||||
|
|
||||||
override val parent: JKElement?
|
override var parent: JKElement?
|
||||||
get() = null
|
get() = null
|
||||||
|
set (it) {}
|
||||||
|
|
||||||
override fun detach(from: JKElement) {
|
override fun detach(from: JKElement) {
|
||||||
}
|
}
|
||||||
@@ -287,14 +307,15 @@ object JKBodyStub : JKBlock, JKTreeElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKBlockStatementImpl(block: JKBlock) : JKBlockStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBlockStatementImpl(block: JKBlock) : JKBlockStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var block by child(block)
|
override var block by child(block)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlockStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlockStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKBlockStatementWithoutBracketsImpl(block: JKBlock) : JKBlockStatementWithoutBrackets, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBlockStatementWithoutBracketsImpl(statements: List<JKStatement>) : JKBlockStatementWithoutBrackets(),
|
||||||
override var block by child(block)
|
PsiOwner by PsiOwnerImpl() {
|
||||||
|
override var statements by children(statements)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlockStatementWithoutBrackets(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlockStatementWithoutBrackets(this, data)
|
||||||
}
|
}
|
||||||
@@ -304,40 +325,44 @@ class JKThisExpressionImpl(qualifierLabel: JKLabel) : JKThisExpression, JKBranch
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitThisExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitThisExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKSuperExpressionImpl(qualifierLabel: JKLabel = JKLabelEmptyImpl()) : JKSuperExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKSuperExpressionImpl(qualifierLabel: JKLabel = JKLabelEmptyImpl()) : JKSuperExpression, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var qualifierLabel: JKLabel by child(qualifierLabel)
|
override var qualifierLabel: JKLabel by child(qualifierLabel)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitSuperExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitSuperExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKWhileStatementImpl(condition: JKExpression, body: JKStatement) : JKWhileStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKWhileStatementImpl(condition: JKExpression, body: JKStatement) : JKWhileStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var condition by child(condition)
|
override var condition by child(condition)
|
||||||
override var body by child(body)
|
override var body by child(body)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitWhileStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitWhileStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKDoWhileStatementImpl(body: JKStatement, condition: JKExpression) : JKDoWhileStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKDoWhileStatementImpl(body: JKStatement, condition: JKExpression) : JKDoWhileStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var condition by child(condition)
|
override var condition by child(condition)
|
||||||
override var body by child(body)
|
override var body by child(body)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDoWhileStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDoWhileStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKBreakStatementImpl : JKBreakStatement, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBreakStatementImpl : JKBreakStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKBreakWithLabelStatementImpl(override var label: JKNameIdentifier) : JKBreakWithLabelStatement, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBreakWithLabelStatementImpl(override var label: JKNameIdentifier) : JKBreakWithLabelStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakWithLabelStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakWithLabelStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfStatement(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var thenBranch by child(thenBranch)
|
override var thenBranch by child(thenBranch)
|
||||||
override var condition by child(condition)
|
override var condition by child(condition)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKIfElseStatementImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKIfElseStatement,
|
class JKIfElseStatementImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKIfElseStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
|
||||||
override var elseBranch by child(elseBranch)
|
override var elseBranch by child(elseBranch)
|
||||||
override var thenBranch by child(thenBranch)
|
override var thenBranch by child(thenBranch)
|
||||||
override var condition by child(condition)
|
override var condition by child(condition)
|
||||||
@@ -354,7 +379,8 @@ class JKIfElseExpressionImpl(condition: JKExpression, thenBranch: JKExpression,
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfElseExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfElseExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKClassAccessExpressionImpl(override var identifier: JKClassSymbol) : JKClassAccessExpression, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKClassAccessExpressionImpl(override var identifier: JKClassSymbol) : JKClassAccessExpression, JKElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassAccessExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassAccessExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,9 +418,11 @@ class JKDelegationConstructorCallImpl(
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDelegationConstructorCall(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitDelegationConstructorCall(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKFieldAccessExpressionImpl(override var identifier: JKFieldSymbol) : JKFieldAccessExpression, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKFieldAccessExpressionImpl(override var identifier: JKFieldSymbol) : JKFieldAccessExpression, JKElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitFieldAccessExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitFieldAccessExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
val JKStatement.statements: List<JKStatement>
|
val JKStatement.statements: List<JKStatement>
|
||||||
get() =
|
get() =
|
||||||
when (this) {
|
when (this) {
|
||||||
@@ -405,23 +433,25 @@ val JKStatement.statements: List<JKStatement>
|
|||||||
class JKLabelEmptyImpl : JKLabelEmpty, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKLabelEmptyImpl : JKLabelEmpty, JKElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabelEmpty(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabelEmpty(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKLabelTextImpl(label: JKNameIdentifier) : JKLabelText, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKLabelTextImpl(label: JKNameIdentifier) : JKLabelText, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||||
override val label: JKNameIdentifier by child(label)
|
override val label: JKNameIdentifier by child(label)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabelText(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabelText(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKContinueStatementImpl(label: JKLabel) : JKContinueStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKContinueStatementImpl(label: JKLabel) : JKContinueStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var label: JKLabel by child(label)
|
override var label: JKLabel by child(label)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitContinueStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitContinueStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKLabeledStatementImpl(statement: JKStatement, labels: List<JKNameIdentifier>) : JKLabeledStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKLabeledStatementImpl(statement: JKStatement, labels: List<JKNameIdentifier>) : JKLabeledStatement, JKBranchElementBase(),
|
||||||
|
PsiOwner by PsiOwnerImpl() {
|
||||||
override var statement: JKStatement by child(statement)
|
override var statement: JKStatement by child(statement)
|
||||||
override val labels: List<JKNameIdentifier> by children(labels)
|
override val labels: List<JKNameIdentifier> by children(labels)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabeledStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLabeledStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKEmptyStatementImpl: JKEmptyStatement, JKElementBase() , PsiOwner by PsiOwnerImpl() {
|
class JKEmptyStatementImpl : JKEmptyStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEmptyStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitEmptyStatement(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,7 +460,7 @@ class PsiOwnerImpl(override var psi: PsiElement? = null) : PsiOwner
|
|||||||
val JKElement.psi: PsiElement?
|
val JKElement.psi: PsiElement?
|
||||||
get() = (this as? PsiOwner)?.psi
|
get() = (this as? PsiOwner)?.psi
|
||||||
|
|
||||||
fun <Elem : PsiElement>JKElement.psi(): Elem? =
|
fun <Elem : PsiElement> JKElement.psi(): Elem? =
|
||||||
(this as? PsiOwner)?.psi as? Elem
|
(this as? PsiOwner)?.psi as? Elem
|
||||||
|
|
||||||
class JKTypeParameterListImpl(typeParameters: List<JKTypeParameter> = emptyList()) : JKTypeParameterList, JKBranchElementBase() {
|
class JKTypeParameterListImpl(typeParameters: List<JKTypeParameter> = emptyList()) : JKTypeParameterList, JKBranchElementBase() {
|
||||||
@@ -460,7 +490,7 @@ class JKEnumConstantImpl(
|
|||||||
body: JKClassBody,
|
body: JKClassBody,
|
||||||
type: JKTypeElement,
|
type: JKTypeElement,
|
||||||
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
annotationList: JKAnnotationList = JKAnnotationListImpl()
|
||||||
) : JKEnumConstant, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKEnumConstant(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
override val arguments: JKArgumentList by child(arguments)
|
override val arguments: JKArgumentList by child(arguments)
|
||||||
override val body: JKClassBody by child(body)
|
override val body: JKClassBody by child(body)
|
||||||
@@ -475,7 +505,7 @@ fun JKTypeElement.present(): Boolean =
|
|||||||
type != JKNoTypeImpl
|
type != JKNoTypeImpl
|
||||||
|
|
||||||
class JKForInStatementImpl(declaration: JKDeclaration, iterationExpression: JKExpression, body: JKStatement) :
|
class JKForInStatementImpl(declaration: JKDeclaration, iterationExpression: JKExpression, body: JKStatement) :
|
||||||
JKForInStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
JKForInStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var declaration: JKDeclaration by child(declaration)
|
override var declaration: JKDeclaration by child(declaration)
|
||||||
override var iterationExpression: JKExpression by child(iterationExpression)
|
override var iterationExpression: JKExpression by child(iterationExpression)
|
||||||
override var body: JKStatement by child(body)
|
override var body: JKStatement by child(body)
|
||||||
@@ -485,12 +515,12 @@ class JKForInStatementImpl(declaration: JKDeclaration, iterationExpression: JKEx
|
|||||||
fun JKStatement.isEmpty(): Boolean =
|
fun JKStatement.isEmpty(): Boolean =
|
||||||
when (this) {
|
when (this) {
|
||||||
is JKEmptyStatement -> true
|
is JKEmptyStatement -> true
|
||||||
is JKBlockStatement -> block is JKBodyStub
|
is JKBlockStatement -> block is JKBodyStubImpl
|
||||||
is JKExpressionStatement -> expression is JKStubExpression
|
is JKExpressionStatement -> expression is JKStubExpression
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKPackageDeclarationImpl(packageName: JKNameIdentifier) : JKPackageDeclaration, JKBranchElementBase() {
|
class JKPackageDeclarationImpl(packageName: JKNameIdentifier) : JKPackageDeclaration() {
|
||||||
override var packageName: JKNameIdentifier by child(packageName)
|
override var packageName: JKNameIdentifier by child(packageName)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPackageDeclaration(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPackageDeclaration(this, data)
|
||||||
}
|
}
|
||||||
@@ -506,6 +536,8 @@ class JKAnnotationImpl(
|
|||||||
) : JKAnnotation, JKBranchElementBase() {
|
) : JKAnnotation, JKBranchElementBase() {
|
||||||
override var arguments: List<JKAnnotationParameter> by children(arguments)
|
override var arguments: List<JKAnnotationParameter> by children(arguments)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAnnotation(this, data)
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKTypeArgumentListImpl(typeArguments: List<JKTypeElement> = emptyList()) : JKTypeArgumentList, JKBranchElementBase(),
|
class JKTypeArgumentListImpl(typeArguments: List<JKTypeElement> = emptyList()) : JKTypeArgumentList, JKBranchElementBase(),
|
||||||
@@ -528,6 +560,8 @@ class JKImportStatementImpl(name: JKNameIdentifier) : JKImportStatement, JKBranc
|
|||||||
override val name: JKNameIdentifier by child(name)
|
override val name: JKNameIdentifier by child(name)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitImportStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitImportStatement(this, data)
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKAnnotationParameterImpl(value: JKAnnotationMemberValue) : JKAnnotationParameter, JKBranchElementBase() {
|
class JKAnnotationParameterImpl(value: JKAnnotationMemberValue) : JKAnnotationParameter, JKBranchElementBase() {
|
||||||
@@ -569,3 +603,20 @@ class JKArgumentListImpl(arguments: List<JKArgument> = emptyList()) : JKArgument
|
|||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitArgumentList(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitArgumentList(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class JKMutabilityModifierElementImpl(override var mutability: Mutability) : JKMutabilityModifierElement() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitMutabilityModifierElement(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
class JKModalityModifierElementImpl(override var modality: Modality) : JKModalityModifierElement() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitModalityModifierElement(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
class JKVisibilityModifierElementImpl(override var visibility: Visibility) : JKVisibilityModifierElement() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitVisibilityModifierElement(this, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
class JKExtraModifierElementImpl(override var extraModifier: ExtraModifier) : JKExtraModifierElement() {
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitExtraModifierElement(this, data)
|
||||||
|
}
|
||||||
@@ -30,11 +30,11 @@ class JKKtPropertyImpl(
|
|||||||
getter: JKKtGetterOrSetter,
|
getter: JKKtGetterOrSetter,
|
||||||
setter: JKKtGetterOrSetter,
|
setter: JKKtGetterOrSetter,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality,
|
modalityElement: JKModalityModifierElement,
|
||||||
override var mutability: Mutability
|
mutabilityElement: JKMutabilityModifierElement
|
||||||
) : JKBranchElementBase(), JKKtProperty, PsiOwner by PsiOwnerImpl() {
|
) : JKKtProperty(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtProperty(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtProperty(this, data)
|
||||||
|
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
@@ -43,6 +43,13 @@ class JKKtPropertyImpl(
|
|||||||
override var initializer: JKExpression by child(initializer)
|
override var initializer: JKExpression by child(initializer)
|
||||||
override var getter: JKKtGetterOrSetter by child(getter)
|
override var getter: JKKtGetterOrSetter by child(getter)
|
||||||
override var setter: JKKtGetterOrSetter by child(setter)
|
override var setter: JKKtGetterOrSetter by child(setter)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
|
override var mutabilityElement by child(mutabilityElement)
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtFunctionImpl(
|
class JKKtFunctionImpl(
|
||||||
@@ -52,10 +59,10 @@ class JKKtFunctionImpl(
|
|||||||
block: JKBlock,
|
block: JKBlock,
|
||||||
typeParameterList: JKTypeParameterList,
|
typeParameterList: JKTypeParameterList,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality
|
modalityElement: JKModalityModifierElement
|
||||||
) : JKBranchElementBase(), JKKtFunction, PsiOwner by PsiOwnerImpl() {
|
) : JKKtFunction(), PsiOwner by PsiOwnerImpl() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFunction(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtFunction(this, data)
|
||||||
|
|
||||||
override var returnType: JKTypeElement by child(returnType)
|
override var returnType: JKTypeElement by child(returnType)
|
||||||
@@ -64,6 +71,11 @@ class JKKtFunctionImpl(
|
|||||||
override var block: JKBlock by child(block)
|
override var block: JKBlock by child(block)
|
||||||
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
override var typeParameterList: JKTypeParameterList by child(typeParameterList)
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
|
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() {
|
sealed class JKKtQualifierImpl : JKQualifier, JKElementBase() {
|
||||||
@@ -147,11 +159,12 @@ class JKKtAssignmentStatementImpl(
|
|||||||
field: JKAssignableExpression,
|
field: JKAssignableExpression,
|
||||||
expression: JKExpression,
|
expression: JKExpression,
|
||||||
override var operator: JKOperator
|
override var operator: JKOperator
|
||||||
) : JKKtAssignmentStatement, JKBranchElementBase() {
|
) : JKKtAssignmentStatement() {
|
||||||
override var field: JKAssignableExpression by child(field)
|
override var field: JKAssignableExpression by child(field)
|
||||||
override var expression by child(expression)
|
override var expression by child(expression)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAssignmentStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtAssignmentStatement(this, data)
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
object JKContextType : JKType {
|
object JKContextType : JKType {
|
||||||
@@ -165,10 +178,10 @@ class JKKtConstructorImpl(
|
|||||||
block: JKBlock,
|
block: JKBlock,
|
||||||
delegationCall: JKExpression,
|
delegationCall: JKExpression,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality
|
modalityElement: JKModalityModifierElement
|
||||||
) : JKBranchElementBase(), JKKtConstructor {
|
) : JKKtConstructor() {
|
||||||
override var returnType: JKTypeElement by child(JKTypeElementImpl(JKNoTypeImpl))
|
override var returnType: JKTypeElement by child(JKTypeElementImpl(JKNoTypeImpl))
|
||||||
|
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
@@ -178,6 +191,10 @@ class JKKtConstructorImpl(
|
|||||||
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,26 +203,30 @@ class JKKtPrimaryConstructorImpl(
|
|||||||
parameters: List<JKParameter>,
|
parameters: List<JKParameter>,
|
||||||
delegationCall: JKExpression,
|
delegationCall: JKExpression,
|
||||||
annotationList: JKAnnotationList,
|
annotationList: JKAnnotationList,
|
||||||
override var extraModifiers: List<ExtraModifier>,
|
extraModifierElements: List<JKExtraModifierElement>,
|
||||||
override var visibility: Visibility,
|
visibilityElement: JKVisibilityModifierElement,
|
||||||
override var modality: Modality
|
modalityElement: JKModalityModifierElement
|
||||||
) : JKBranchElementBase(), JKKtPrimaryConstructor {
|
) : JKKtPrimaryConstructor() {
|
||||||
override var returnType: JKTypeElement by child(JKTypeElementImpl(JKNoTypeImpl))
|
override var returnType: JKTypeElement by child(JKTypeElementImpl(JKNoTypeImpl))
|
||||||
|
|
||||||
override var name: JKNameIdentifier by child(name)
|
override var name: JKNameIdentifier by child(name)
|
||||||
override var parameters: List<JKParameter> by children(parameters)
|
override var parameters: List<JKParameter> by children(parameters)
|
||||||
override var block: JKBlock by child(JKBodyStub)
|
override var block: JKBlock by child(JKBodyStubImpl)
|
||||||
override var delegationCall: JKExpression by child(delegationCall)
|
override var delegationCall: JKExpression by child(delegationCall)
|
||||||
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
|
||||||
override var annotationList: JKAnnotationList by child(annotationList)
|
override var annotationList: JKAnnotationList by child(annotationList)
|
||||||
|
|
||||||
|
override var extraModifierElements by children(extraModifierElements)
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
override var modalityElement by child(modalityElement)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtWhenStatementImpl(
|
class JKKtWhenStatementImpl(
|
||||||
expression: JKExpression,
|
expression: JKExpression,
|
||||||
cases: List<JKKtWhenCase>
|
cases: List<JKKtWhenCase>
|
||||||
) : JKKtWhenStatement, JKBranchElementBase() {
|
) : JKKtWhenStatement() {
|
||||||
override var expression: JKExpression by child(expression)
|
override var expression: JKExpression by child(expression)
|
||||||
override var cases: List<JKKtWhenCase> by children(cases)
|
override var cases: List<JKKtWhenCase> by children(cases)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtWhenStatement(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtWhenStatement(this, data)
|
||||||
@@ -235,7 +256,7 @@ class JKKtIsExpressionImpl(expression: JKExpression, type: JKTypeElement) : JKKt
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtIsExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtIsExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtInitDeclarationImpl(block: JKBlock) : JKKtInitDeclaration, JKBranchElementBase() {
|
class JKKtInitDeclarationImpl(block: JKBlock) : JKKtInitDeclaration() {
|
||||||
override var block: JKBlock by child(block)
|
override var block: JKBlock by child(block)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtInitDeclaration(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtInitDeclaration(this, data)
|
||||||
}
|
}
|
||||||
@@ -244,7 +265,7 @@ class JKKtInitDeclarationImpl(block: JKBlock) : JKKtInitDeclaration, JKBranchEle
|
|||||||
class JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
class JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
||||||
variableDeclaration: JKStatement,
|
variableDeclaration: JKStatement,
|
||||||
whileStatement: JKWhileStatement
|
whileStatement: JKWhileStatement
|
||||||
) : JKKtConvertedFromForLoopSyntheticWhileStatement, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
) : JKKtConvertedFromForLoopSyntheticWhileStatement(), PsiOwner by PsiOwnerImpl() {
|
||||||
override var variableDeclaration: JKStatement by child(variableDeclaration)
|
override var variableDeclaration: JKStatement by child(variableDeclaration)
|
||||||
override var whileStatement: JKWhileStatement by child(whileStatement)
|
override var whileStatement: JKWhileStatement by child(whileStatement)
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R =
|
||||||
@@ -279,17 +300,21 @@ class JKKtTryCatchSectionImpl(
|
|||||||
class JKKtGetterOrSetterImpl(
|
class JKKtGetterOrSetterImpl(
|
||||||
body: JKStatement,
|
body: JKStatement,
|
||||||
override val kind: JKKtGetterOrSetter.Kind,
|
override val kind: JKKtGetterOrSetter.Kind,
|
||||||
override var visibility: Visibility
|
visibilityElement: JKVisibilityModifierElement
|
||||||
) : JKKtGetterOrSetter, JKBranchElementBase() {
|
) : JKKtGetterOrSetter, JKBranchElementBase() {
|
||||||
override var body: JKStatement by child(body)
|
override var body: JKStatement by child(body)
|
||||||
|
|
||||||
|
override var visibilityElement by child(visibilityElement)
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtGetterOrSetter(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtGetterOrSetter(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtEmptyGetterOrSetterImpl : JKKtEmptyGetterOrSetter, JKBranchElementBase() {
|
class JKKtEmptyGetterOrSetterImpl : JKKtEmptyGetterOrSetter, JKBranchElementBase() {
|
||||||
override var visibility: Visibility = Visibility.PUBLIC
|
|
||||||
override var body: JKStatement by child(JKEmptyStatementImpl())
|
override var body: JKStatement by child(JKEmptyStatementImpl())
|
||||||
override val kind: JKKtGetterOrSetter.Kind
|
override val kind: JKKtGetterOrSetter.Kind
|
||||||
get() = error("Cannot get kind of JKKtEmptyGetterOrSetter")
|
get() = error("Cannot get kind of JKKtEmptyGetterOrSetter")
|
||||||
|
|
||||||
|
override var visibilityElement by child(JKVisibilityModifierElementImpl(Visibility.PUBLIC))
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtEmptyGetterOrSetter(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtEmptyGetterOrSetter(this, data)
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.nj2k.tree.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKCommentElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKNonCodeElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKSpaceElement
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.JKTokenElement
|
||||||
|
|
||||||
|
|
||||||
|
class JKSpaceElementImpl(override val text: String) : JKSpaceElement
|
||||||
|
|
||||||
|
class JKCommentElementImpl(override val text: String) : JKCommentElement
|
||||||
|
|
||||||
|
class JKTokenElementImpl(override val text: String) : JKTokenElement {
|
||||||
|
override var leftNonCodeElements: List<JKNonCodeElement> = emptyList()
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = emptyList()
|
||||||
|
}
|
||||||
@@ -16,23 +16,28 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.tree
|
package org.jetbrains.kotlin.nj2k.tree
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKClassSymbol
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
interface JKField : JKVariable, JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKAnnotationListOwner
|
abstract class JKField : JKVariable(), JKVisibilityOwner, JKMutabilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKAnnotationListOwner
|
||||||
|
|
||||||
interface JKJavaField : JKField, JKBranchElement
|
abstract class JKJavaField : JKField()
|
||||||
|
|
||||||
interface JKJavaMethod : JKMethod, JKBranchElement {
|
abstract class JKJavaMethod : JKMethod(), JKBranchElement {
|
||||||
var throwsList: List<JKTypeElement>
|
abstract var throwsList: List<JKTypeElement>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaMethodCallExpression : JKMethodCallExpression
|
interface JKJavaMethodCallExpression : JKMethodCallExpression
|
||||||
|
|
||||||
interface JKClassBody : JKTreeElement, JKBranchElement {
|
abstract class JKClassBody : JKTreeElement, JKBranchElementBase() {
|
||||||
var declarations: List<JKDeclaration>
|
abstract var declarations: List<JKDeclaration>
|
||||||
|
|
||||||
|
val leftBrace = JKTokenElementImpl("{")
|
||||||
|
val rightBrace = JKTokenElementImpl("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKEmptyClassBody : JKClassBody
|
abstract class JKEmptyClassBody : JKClassBody() {
|
||||||
|
override var declarations: List<JKDeclaration> = emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
interface JKJavaNewExpression : JKExpression, JKTypeArgumentListOwner, PsiOwner {
|
interface JKJavaNewExpression : JKExpression, JKTypeArgumentListOwner, PsiOwner {
|
||||||
val classSymbol: JKClassSymbol
|
val classSymbol: JKClassSymbol
|
||||||
@@ -61,20 +66,20 @@ interface JKJavaNewArray : JKExpression {
|
|||||||
|
|
||||||
interface JKJavaLiteralExpression : JKLiteralExpression
|
interface JKJavaLiteralExpression : JKLiteralExpression
|
||||||
|
|
||||||
interface JKReturnStatement : JKStatement {
|
abstract class JKReturnStatement : JKStatement() {
|
||||||
val expression: JKExpression
|
abstract val expression: JKExpression
|
||||||
var label: JKLabel
|
abstract var label: JKLabel
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaAssertStatement : JKStatement {
|
abstract class JKJavaAssertStatement : JKStatement() {
|
||||||
val condition: JKExpression
|
abstract val condition: JKExpression
|
||||||
val description: JKExpression
|
abstract val description: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaForLoopStatement : JKLoopStatement {
|
abstract class JKJavaForLoopStatement : JKLoopStatement() {
|
||||||
var initializer: JKStatement
|
abstract var initializer: JKStatement
|
||||||
var condition: JKExpression
|
abstract var condition: JKExpression
|
||||||
var updaters: List<JKStatement>
|
abstract var updaters: List<JKStatement>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -91,15 +96,15 @@ interface JKJavaAssignmentExpression : JKExpression, JKBranchElement {
|
|||||||
var operator: JKOperator
|
var operator: JKOperator
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaThrowStatement : JKStatement {
|
abstract class JKJavaThrowStatement : JKStatement() {
|
||||||
var exception: JKExpression
|
abstract var exception: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaTryStatement : JKStatement {
|
abstract class JKJavaTryStatement : JKStatement() {
|
||||||
var resourceDeclarations: List<JKDeclaration>
|
abstract var resourceDeclarations: List<JKDeclaration>
|
||||||
var tryBlock: JKBlock
|
abstract var tryBlock: JKBlock
|
||||||
var finallyBlock: JKBlock
|
abstract var finallyBlock: JKBlock
|
||||||
var catchSections: List<JKJavaTryCatchSection>
|
abstract var catchSections: List<JKJavaTryCatchSection>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaTryCatchSection : JKTreeElement {
|
interface JKJavaTryCatchSection : JKTreeElement {
|
||||||
@@ -108,9 +113,9 @@ interface JKJavaTryCatchSection : JKTreeElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
interface JKJavaSwitchStatement : JKStatement {
|
abstract class JKJavaSwitchStatement : JKStatement() {
|
||||||
var expression: JKExpression
|
abstract var expression: JKExpression
|
||||||
var cases: List<JKJavaSwitchCase>
|
abstract var cases: List<JKJavaSwitchCase>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaSwitchCase : JKTreeElement {
|
interface JKJavaSwitchCase : JKTreeElement {
|
||||||
@@ -127,17 +132,21 @@ interface JKJavaLabelSwitchCase : JKJavaSwitchCase {
|
|||||||
var label: JKExpression
|
var label: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaContinueStatement: JKStatement
|
abstract class JKJavaContinueStatement : JKStatement()
|
||||||
|
|
||||||
interface JKJavaSynchronizedStatement : JKStatement, JKBranchElement {
|
abstract class JKJavaSynchronizedStatement : JKStatement(), JKBranchElement {
|
||||||
val lockExpression: JKExpression
|
abstract val lockExpression: JKExpression
|
||||||
val body: JKBlock
|
abstract val body: JKBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaAnnotationMethod : JKMethod, JKBranchElement {
|
abstract class JKJavaAnnotationMethod : JKMethod(), JKBranchElement {
|
||||||
val defaultValue: JKAnnotationMemberValue
|
abstract val defaultValue: JKAnnotationMemberValue
|
||||||
|
|
||||||
|
override var extraModifierElements by children<JKExtraModifierElement>()
|
||||||
|
override var visibilityElement by child(JKVisibilityModifierElementImpl(Visibility.PUBLIC))
|
||||||
|
override var modalityElement by child(JKModalityModifierElementImpl(Modality.FINAL))
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaStaticInitDeclaration : JKDeclaration, JKBranchElement {
|
abstract class JKJavaStaticInitDeclaration : JKDeclaration(), JKBranchElement {
|
||||||
var block: JKBlock
|
abstract var block: JKBlock
|
||||||
}
|
}
|
||||||
@@ -17,12 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.tree
|
package org.jetbrains.kotlin.nj2k.tree
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKClassSymbol
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldSymbol
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKMethodSymbol
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor
|
import org.jetbrains.kotlin.nj2k.tree.visitors.JKVisitor
|
||||||
|
|
||||||
interface JKTreeElement : JKElement {
|
interface JKTreeElement : JKElement, JKNonCodeElementsListOwner {
|
||||||
fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R
|
fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R
|
||||||
|
|
||||||
fun <R> accept(visitor: JKVisitor<R, Nothing?>): R = accept(visitor, null)
|
fun <R> accept(visitor: JKVisitor<R, Nothing?>): R = accept(visitor, null)
|
||||||
@@ -38,7 +36,9 @@ interface PsiOwner {
|
|||||||
var psi: PsiElement?
|
var psi: PsiElement?
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKDeclaration : JKTreeElement
|
abstract class JKDeclaration : JKTreeElement, JKBranchElementBase() {
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
|
}
|
||||||
|
|
||||||
interface JKImportStatement : JKTreeElement {
|
interface JKImportStatement : JKTreeElement {
|
||||||
val name: JKNameIdentifier
|
val name: JKNameIdentifier
|
||||||
@@ -50,14 +50,15 @@ interface JKFile : JKTreeElement, JKBranchElement {
|
|||||||
var declarationList: List<JKDeclaration>
|
var declarationList: List<JKDeclaration>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKClass : JKDeclaration, JKVisibilityOwner, JKExtraModifiersOwner, JKModalityOwner, JKTypeParameterListOwner, JKAnnotationListOwner,
|
abstract class JKClass : JKDeclaration(), JKVisibilityOwner, JKExtraModifiersOwner, JKModalityOwner, JKTypeParameterListOwner,
|
||||||
|
JKAnnotationListOwner,
|
||||||
JKBranchElement {
|
JKBranchElement {
|
||||||
val name: JKNameIdentifier
|
abstract val name: JKNameIdentifier
|
||||||
|
|
||||||
val inheritance: JKInheritanceInfo
|
abstract val inheritance: JKInheritanceInfo
|
||||||
|
|
||||||
var classBody: JKClassBody
|
abstract var classBody: JKClassBody
|
||||||
var classKind: ClassKind
|
abstract var classKind: ClassKind
|
||||||
|
|
||||||
enum class ClassKind {
|
enum class ClassKind {
|
||||||
ANNOTATION, CLASS, ENUM, INTERFACE, OBJECT, COMPANION
|
ANNOTATION, CLASS, ENUM, INTERFACE, OBJECT, COMPANION
|
||||||
@@ -100,32 +101,71 @@ interface JKAnnotationListOwner : JKTreeElement {
|
|||||||
var annotationList: JKAnnotationList
|
var annotationList: JKAnnotationList
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKMethod : JKDeclaration, JKVisibilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKTypeParameterListOwner,
|
abstract class JKMethod : JKDeclaration(), JKVisibilityOwner, JKModalityOwner, JKExtraModifiersOwner, JKTypeParameterListOwner,
|
||||||
JKAnnotationListOwner {
|
JKAnnotationListOwner {
|
||||||
val name: JKNameIdentifier
|
abstract val name: JKNameIdentifier
|
||||||
var parameters: List<JKParameter>
|
abstract var parameters: List<JKParameter>
|
||||||
var returnType: JKTypeElement
|
abstract var returnType: JKTypeElement
|
||||||
var block: JKBlock
|
abstract var block: JKBlock
|
||||||
|
|
||||||
|
val leftParen = JKTokenElementImpl("(")
|
||||||
|
val rightParen = JKTokenElementImpl(")")
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKVariable : JKDeclaration, JKAnnotationListOwner {
|
abstract class JKVariable : JKDeclaration(), JKAnnotationListOwner {
|
||||||
var type: JKTypeElement
|
abstract var type: JKTypeElement
|
||||||
var name: JKNameIdentifier
|
abstract var name: JKNameIdentifier
|
||||||
var initializer: JKExpression
|
abstract var initializer: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKForLoopVariable : JKVariable
|
abstract class JKForLoopVariable : JKVariable()
|
||||||
|
|
||||||
interface JKLocalVariable : JKVariable, JKMutabilityOwner
|
abstract class JKLocalVariable : JKVariable(), JKMutabilityOwner
|
||||||
|
|
||||||
interface JKExtraModifiersOwner : JKModifiersListOwner {
|
|
||||||
var extraModifiers: List<ExtraModifier>
|
abstract class JKModifierElement : JKTreeElement, JKBranchElementBase(), JKNonCodeElementsListOwner
|
||||||
|
|
||||||
|
val JKModifierElement.modifier: Modifier
|
||||||
|
get() = when (this) {
|
||||||
|
is JKMutabilityModifierElement -> mutability
|
||||||
|
is JKModalityModifierElement -> modality
|
||||||
|
is JKVisibilityModifierElement -> visibility
|
||||||
|
is JKExtraModifierElement -> extraModifier
|
||||||
|
else -> error("")
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKMutabilityModifierElement : JKModifierElement() {
|
||||||
|
abstract var mutability: Mutability
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKModalityModifierElement : JKModifierElement() {
|
||||||
|
abstract var modality: Modality
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKVisibilityModifierElement : JKModifierElement() {
|
||||||
|
abstract var visibility: Visibility
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKExtraModifierElement : JKModifierElement() {
|
||||||
|
abstract var extraModifier: ExtraModifier
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Modifier {
|
interface Modifier {
|
||||||
val text: String
|
val text: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface JKExtraModifiersOwner : JKModifiersListOwner {
|
||||||
|
var extraModifierElements: List<JKExtraModifierElement>
|
||||||
|
}
|
||||||
|
|
||||||
|
fun JKExtraModifiersOwner.elementByModifier(modifier: ExtraModifier): JKExtraModifierElement? =
|
||||||
|
extraModifierElements.firstOrNull { it.extraModifier == modifier }
|
||||||
|
|
||||||
|
fun JKExtraModifiersOwner.hasExtraModifier(modifier: ExtraModifier): Boolean =
|
||||||
|
extraModifierElements.any { it.extraModifier == modifier }
|
||||||
|
|
||||||
|
//val JKExtraModifiersOwner.extraModifiers
|
||||||
|
|
||||||
enum class ExtraModifier(override val text: String) : Modifier {
|
enum class ExtraModifier(override val text: String) : Modifier {
|
||||||
ACTUAL("actual"),
|
ACTUAL("actual"),
|
||||||
ANNOTATION("annotation"),
|
ANNOTATION("annotation"),
|
||||||
@@ -156,8 +196,8 @@ enum class ExtraModifier(override val text: String) : Modifier {
|
|||||||
VOLATILE("volatile")
|
VOLATILE("volatile")
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKVisibilityOwner : JKModifiersListOwner{
|
interface JKVisibilityOwner : JKModifiersListOwner {
|
||||||
var visibility: Visibility
|
val visibilityElement: JKVisibilityModifierElement
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class Visibility(override val text: String) : Modifier {
|
enum class Visibility(override val text: String) : Modifier {
|
||||||
@@ -168,8 +208,14 @@ enum class Visibility(override val text: String) : Modifier {
|
|||||||
PRIVATE("private")
|
PRIVATE("private")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var JKVisibilityOwner.visibility: Visibility
|
||||||
|
get() = visibilityElement.visibility
|
||||||
|
set(value) {
|
||||||
|
visibilityElement.visibility = value
|
||||||
|
}
|
||||||
|
|
||||||
interface JKModalityOwner : JKModifiersListOwner {
|
interface JKModalityOwner : JKModifiersListOwner {
|
||||||
var modality: Modality
|
val modalityElement: JKModalityModifierElement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -180,8 +226,14 @@ enum class Modality(override val text: String) : Modifier {
|
|||||||
OVERRIDE("override")
|
OVERRIDE("override")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var JKModalityOwner.modality: Modality
|
||||||
|
get() = modalityElement.modality
|
||||||
|
set(value) {
|
||||||
|
modalityElement.modality = value
|
||||||
|
}
|
||||||
|
|
||||||
interface JKMutabilityOwner : JKModifiersListOwner {
|
interface JKMutabilityOwner : JKModifiersListOwner {
|
||||||
var mutability: Mutability
|
val mutabilityElement: JKMutabilityModifierElement
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class Mutability(override val text: String) : Modifier {
|
enum class Mutability(override val text: String) : Modifier {
|
||||||
@@ -190,23 +242,38 @@ enum class Mutability(override val text: String) : Modifier {
|
|||||||
UNKNOWN("var")//TODO ???
|
UNKNOWN("var")//TODO ???
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var JKMutabilityOwner.mutability: Mutability
|
||||||
|
get() = mutabilityElement.mutability
|
||||||
|
set(value) {
|
||||||
|
mutabilityElement.mutability = value
|
||||||
|
}
|
||||||
|
|
||||||
interface JKModifiersListOwner : JKTreeElement
|
interface JKModifiersListOwner : JKTreeElement
|
||||||
|
|
||||||
fun JKModifiersListOwner.modifiers(): List<Modifier> =
|
fun JKModifiersListOwner.modifierElements(): List<JKModifierElement> =
|
||||||
listOfNotNull((this as? JKVisibilityOwner)?.visibility) +
|
listOfNotNull((this as? JKVisibilityOwner)?.visibilityElement) +
|
||||||
(this as? JKExtraModifiersOwner)?.extraModifiers.orEmpty() +
|
(this as? JKExtraModifiersOwner)?.extraModifierElements.orEmpty() +
|
||||||
listOfNotNull((this as? JKModalityOwner)?.modality) +
|
listOfNotNull((this as? JKModalityOwner)?.modalityElement) +
|
||||||
listOfNotNull((this as? JKMutabilityOwner)?.mutability)
|
listOfNotNull((this as? JKMutabilityOwner)?.mutabilityElement)
|
||||||
|
|
||||||
|
|
||||||
interface JKTypeElement : JKTreeElement {
|
interface JKTypeElement : JKTreeElement {
|
||||||
val type: JKType
|
val type: JKType
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKStatement : JKTreeElement
|
abstract class JKStatement : JKTreeElement, JKBranchElementBase() {
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = listOf(JKSpaceElementImpl("\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKBlock : JKTreeElement, JKBranchElementBase() {
|
||||||
|
abstract var statements: List<JKStatement>
|
||||||
|
|
||||||
|
val leftBrace = JKTokenElementImpl("{")
|
||||||
|
val rightBrace = JKTokenElementImpl("}")
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class JKBodyStub : JKBlock() {
|
||||||
|
|
||||||
interface JKBlock : JKTreeElement {
|
|
||||||
var statements: List<JKStatement>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKIdentifier : JKTreeElement
|
interface JKIdentifier : JKTreeElement
|
||||||
@@ -217,12 +284,12 @@ interface JKNameIdentifier : JKIdentifier {
|
|||||||
|
|
||||||
interface JKExpression : JKTreeElement, JKAnnotationMemberValue
|
interface JKExpression : JKTreeElement, JKAnnotationMemberValue
|
||||||
|
|
||||||
interface JKExpressionStatement : JKStatement, JKBranchElement {
|
abstract class JKExpressionStatement : JKStatement() {
|
||||||
val expression: JKExpression
|
abstract val expression: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKDeclarationStatement : JKStatement {
|
abstract class JKDeclarationStatement : JKStatement() {
|
||||||
val declaredStatements: List<JKDeclaration>
|
abstract val declaredStatements: List<JKDeclaration>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKOperatorExpression : JKExpression {
|
interface JKOperatorExpression : JKExpression {
|
||||||
@@ -310,8 +377,10 @@ interface JKLiteralExpression : JKExpression {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKParameter : JKVariable, JKModifiersListOwner {
|
abstract class JKParameter : JKVariable(), JKModifiersListOwner {
|
||||||
var isVarArgs: Boolean
|
abstract var isVarArgs: Boolean
|
||||||
|
|
||||||
|
override var rightNonCodeElements: List<JKNonCodeElement> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKStringLiteralExpression : JKLiteralExpression {
|
interface JKStringLiteralExpression : JKLiteralExpression {
|
||||||
@@ -320,16 +389,16 @@ interface JKStringLiteralExpression : JKLiteralExpression {
|
|||||||
|
|
||||||
interface JKStubExpression : JKExpression
|
interface JKStubExpression : JKExpression
|
||||||
|
|
||||||
interface JKLoopStatement : JKStatement {
|
abstract class JKLoopStatement : JKStatement() {
|
||||||
var body: JKStatement
|
abstract var body: JKStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKBlockStatement : JKStatement, JKBranchElement {
|
abstract class JKBlockStatement : JKStatement() {
|
||||||
var block: JKBlock
|
abstract var block: JKBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKBlockStatementWithoutBrackets : JKStatement, JKBranchElement {
|
abstract class JKBlockStatementWithoutBrackets : JKStatement() {
|
||||||
var block: JKBlock
|
abstract var statements: List<JKStatement>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKThisExpression : JKExpression {
|
interface JKThisExpression : JKExpression {
|
||||||
@@ -340,27 +409,27 @@ interface JKSuperExpression : JKExpression {
|
|||||||
var qualifierLabel: JKLabel
|
var qualifierLabel: JKLabel
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKWhileStatement : JKLoopStatement {
|
abstract class JKWhileStatement : JKLoopStatement() {
|
||||||
var condition: JKExpression
|
abstract var condition: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKDoWhileStatement : JKLoopStatement {
|
abstract class JKDoWhileStatement : JKLoopStatement() {
|
||||||
var condition: JKExpression
|
abstract var condition: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKBreakStatement : JKStatement
|
abstract class JKBreakStatement : JKStatement()
|
||||||
|
|
||||||
interface JKBreakWithLabelStatement : JKBreakStatement {
|
abstract class JKBreakWithLabelStatement : JKBreakStatement() {
|
||||||
var label: JKNameIdentifier
|
abstract var label: JKNameIdentifier
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKIfStatement : JKStatement {
|
abstract class JKIfStatement : JKStatement() {
|
||||||
var condition: JKExpression
|
abstract var condition: JKExpression
|
||||||
var thenBranch: JKStatement
|
abstract var thenBranch: JKStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKIfElseStatement : JKIfStatement {
|
abstract class JKIfElseStatement : JKIfStatement() {
|
||||||
var elseBranch: JKStatement
|
abstract var elseBranch: JKStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKIfElseExpression : JKExpression {
|
interface JKIfElseExpression : JKExpression {
|
||||||
@@ -391,16 +460,16 @@ interface JKLabelText : JKLabel {
|
|||||||
val label: JKNameIdentifier
|
val label: JKNameIdentifier
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKContinueStatement : JKStatement {
|
abstract class JKContinueStatement : JKStatement() {
|
||||||
var label: JKLabel
|
abstract var label: JKLabel
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKLabeledStatement : JKStatement {
|
interface JKLabeledStatement : JKExpression {
|
||||||
var statement: JKStatement
|
var statement: JKStatement
|
||||||
val labels: List<JKNameIdentifier>
|
val labels: List<JKNameIdentifier>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKEmptyStatement : JKStatement
|
abstract class JKEmptyStatement : JKStatement()
|
||||||
|
|
||||||
interface JKTypeParameterList : JKTreeElement {
|
interface JKTypeParameterList : JKTreeElement {
|
||||||
var typeParameters: List<JKTypeParameter>
|
var typeParameters: List<JKTypeParameter>
|
||||||
@@ -415,19 +484,19 @@ interface JKTypeParameterListOwner : JKTreeElement {
|
|||||||
var typeParameterList: JKTypeParameterList
|
var typeParameterList: JKTypeParameterList
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKEnumConstant : JKVariable {
|
abstract class JKEnumConstant : JKVariable() {
|
||||||
val arguments: JKArgumentList
|
abstract val arguments: JKArgumentList
|
||||||
val body: JKClassBody
|
abstract val body: JKClassBody
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKForInStatement : JKStatement {
|
abstract class JKForInStatement : JKStatement() {
|
||||||
var declaration: JKDeclaration
|
abstract var declaration: JKDeclaration
|
||||||
var iterationExpression: JKExpression
|
abstract var iterationExpression: JKExpression
|
||||||
var body: JKStatement
|
abstract var body: JKStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKPackageDeclaration : JKDeclaration {
|
abstract class JKPackageDeclaration : JKDeclaration() {
|
||||||
var packageName: JKNameIdentifier
|
abstract var packageName: JKNameIdentifier
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKClassLiteralExpression : JKExpression {
|
interface JKClassLiteralExpression : JKExpression {
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.tree
|
package org.jetbrains.kotlin.nj2k.tree
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKMethodSymbol
|
|
||||||
|
|
||||||
interface JKKtGetterOrSetter : JKTreeElement, JKVisibilityOwner, JKBranchElement {
|
interface JKKtGetterOrSetter : JKTreeElement, JKVisibilityOwner, JKBranchElement {
|
||||||
var body: JKStatement
|
var body: JKStatement
|
||||||
val kind: Kind
|
val kind: Kind
|
||||||
@@ -29,27 +27,24 @@ interface JKKtGetterOrSetter : JKTreeElement, JKVisibilityOwner, JKBranchElement
|
|||||||
|
|
||||||
interface JKKtEmptyGetterOrSetter : JKKtGetterOrSetter
|
interface JKKtEmptyGetterOrSetter : JKKtGetterOrSetter
|
||||||
|
|
||||||
interface JKKtProperty : JKField, PsiOwner {
|
abstract class JKKtProperty : JKField(), PsiOwner {
|
||||||
var getter: JKKtGetterOrSetter
|
abstract var getter: JKKtGetterOrSetter
|
||||||
var setter: JKKtGetterOrSetter
|
abstract var setter: JKKtGetterOrSetter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
interface JKKtFunction : JKMethod, PsiOwner {
|
abstract class JKKtFunction : JKMethod(), PsiOwner
|
||||||
|
|
||||||
|
abstract class JKKtConstructor : JKMethod(), JKExtraModifiersOwner {
|
||||||
|
abstract var delegationCall: JKExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKKtConstructor : JKDeclaration, JKExtraModifiersOwner, JKMethod, JKBranchElement {
|
abstract class JKKtPrimaryConstructor : JKKtConstructor()
|
||||||
override var name: JKNameIdentifier
|
|
||||||
override var parameters: List<JKParameter>
|
|
||||||
var delegationCall: JKExpression
|
|
||||||
}
|
|
||||||
|
|
||||||
interface JKKtPrimaryConstructor : JKKtConstructor
|
abstract class JKKtAssignmentStatement : JKStatement() {
|
||||||
|
abstract var field: JKAssignableExpression
|
||||||
interface JKKtAssignmentStatement : JKStatement {
|
abstract var expression: JKExpression
|
||||||
var field: JKAssignableExpression
|
abstract var operator: JKOperator
|
||||||
var expression: JKExpression
|
|
||||||
var operator: JKOperator
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKKtCall : JKMethodCallExpression
|
interface JKKtCall : JKMethodCallExpression
|
||||||
@@ -62,9 +57,9 @@ interface JKKtAlsoCallExpression : JKKtMethodCallExpression {
|
|||||||
|
|
||||||
interface JKKtLiteralExpression : JKLiteralExpression
|
interface JKKtLiteralExpression : JKLiteralExpression
|
||||||
|
|
||||||
interface JKKtWhenStatement : JKStatement {
|
abstract class JKKtWhenStatement : JKStatement() {
|
||||||
var expression: JKExpression
|
abstract var expression: JKExpression
|
||||||
var cases: List<JKKtWhenCase>
|
abstract var cases: List<JKKtWhenCase>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKKtWhenCase : JKTreeElement {
|
interface JKKtWhenCase : JKTreeElement {
|
||||||
@@ -85,14 +80,14 @@ interface JKKtIsExpression : JKExpression, PsiOwner {
|
|||||||
var type: JKTypeElement
|
var type: JKTypeElement
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKKtInitDeclaration : JKDeclaration {
|
abstract class JKKtInitDeclaration : JKDeclaration() {
|
||||||
var block: JKBlock
|
abstract var block: JKBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
interface JKKtConvertedFromForLoopSyntheticWhileStatement : JKStatement {
|
abstract class JKKtConvertedFromForLoopSyntheticWhileStatement : JKStatement() {
|
||||||
var variableDeclaration: JKStatement
|
abstract var variableDeclaration: JKStatement
|
||||||
var whileStatement: JKWhileStatement
|
abstract var whileStatement: JKWhileStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.nj2k.tree
|
||||||
|
|
||||||
|
|
||||||
|
interface JKNonCodeElement {
|
||||||
|
val text: String
|
||||||
|
}
|
||||||
|
interface JKSpaceElement : JKNonCodeElement
|
||||||
|
|
||||||
|
interface JKCommentElement : JKNonCodeElement
|
||||||
|
|
||||||
|
fun JKCommentElement.isMultiline() =
|
||||||
|
text.startsWith("/*")
|
||||||
|
|
||||||
|
fun JKCommentElement.isSingleline() =
|
||||||
|
text.startsWith("//")
|
||||||
|
|
||||||
|
|
||||||
|
interface JKNonCodeElementsListOwner {
|
||||||
|
var leftNonCodeElements: List<JKNonCodeElement>
|
||||||
|
var rightNonCodeElements: List<JKNonCodeElement>
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun JKNonCodeElementsListOwner.takeNonCodeElementsFrom(other: JKNonCodeElementsListOwner) {
|
||||||
|
leftNonCodeElements = other.leftNonCodeElements
|
||||||
|
rightNonCodeElements = other.rightNonCodeElements
|
||||||
|
}
|
||||||
|
|
||||||
|
fun JKTreeElement.commentsFromInside(): List<JKCommentElement> {
|
||||||
|
val comments = mutableListOf<JKCommentElement>()
|
||||||
|
fun recurse(element: JKTreeElement): JKTreeElement {
|
||||||
|
comments += (element.leftNonCodeElements + element.rightNonCodeElements).filterIsInstance()
|
||||||
|
return applyRecursive(element, ::recurse)
|
||||||
|
}
|
||||||
|
applyRecursive(this, ::recurse)
|
||||||
|
return comments
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <reified T : JKNonCodeElementsListOwner> T.withNonCodeElementsFrom(other: JKNonCodeElementsListOwner): T =
|
||||||
|
also { it.takeNonCodeElementsFrom(other) }
|
||||||
|
|
||||||
|
|
||||||
|
interface JKTokenElement : JKNonCodeElementsListOwner {
|
||||||
|
val text: String
|
||||||
|
}
|
||||||
|
|
||||||
|
fun JKNonCodeElementsListOwner.containsNewLine(): Boolean =
|
||||||
|
(leftNonCodeElements + rightNonCodeElements).any {
|
||||||
|
it is JKSpaceElement && '\n' in it.text
|
||||||
|
}
|
||||||
+42
-7
@@ -49,7 +49,7 @@
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|
||||||
val JK_ROOT = File("./j2k/newSrc/org/jetbrains/kotlin/j2k/tree")
|
val JK_ROOT = File("./nj2k/src/org/jetbrains/kotlin/nj2k/tree")
|
||||||
|
|
||||||
val JK_OUT_ROOT = File(JK_ROOT, "visitors")
|
val JK_OUT_ROOT = File(JK_ROOT, "visitors")
|
||||||
|
|
||||||
@@ -58,17 +58,17 @@ val JK_JAVA_FILE = File(JK_ROOT, "j.kt")
|
|||||||
val JK_COMMON_FILE = File(JK_ROOT, "jk.kt")
|
val JK_COMMON_FILE = File(JK_ROOT, "jk.kt")
|
||||||
|
|
||||||
|
|
||||||
val interfaceRegex = "interface (JK[a-zA-Z]+)\\s?:?\\s?(JK[a-zA-Z]+)?".toRegex()
|
val interfaceRegex = "(interface|abstract class)\\s+(JK[a-zA-Z]+)\\s+?:?\\s+(JK[a-zA-Z]+)?".toRegex()
|
||||||
|
|
||||||
|
|
||||||
data class InterfaceData(val name: String, val extends: String?)
|
data class InterfaceData(val name: String, val extends: String?)
|
||||||
|
|
||||||
fun File.interfaceNames() =
|
fun File.interfaceNames() =
|
||||||
sequenceOf(this)
|
sequenceOf(this)
|
||||||
.map { it.readText() }
|
.map { it.readText() }
|
||||||
.flatMap { interfaceRegex.findAll(it) }
|
.flatMap { interfaceRegex.findAll(it) }
|
||||||
.map { match -> InterfaceData(match.groupValues[1], match.groupValues.getOrNull(2)) }
|
.map { match -> InterfaceData(match.groupValues[2], match.groupValues.getOrNull(3)) }
|
||||||
.toList()
|
.toList()
|
||||||
|
|
||||||
|
|
||||||
fun String.safeVarName() = when (this) {
|
fun String.safeVarName() = when (this) {
|
||||||
@@ -129,6 +129,41 @@ fun genVisitors(commonData: List<InterfaceData>, uncommonData: List<InterfaceDat
|
|||||||
appendln("}")
|
appendln("}")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
File(JK_OUT_ROOT, "${visitorName}WithCommentsPrinting.kt").writeText(buildString {
|
||||||
|
appendln(pkg)
|
||||||
|
appendln()
|
||||||
|
appendln("import org.jetbrains.kotlin.nj2k.tree.*")
|
||||||
|
appendln()
|
||||||
|
|
||||||
|
appendln("interface ${visitorName}WithCommentsPrinting : ${visitorName}Void {")
|
||||||
|
appendln(
|
||||||
|
"""
|
||||||
|
| fun printLeftNonCodeElements(element: JKNonCodeElementsListOwner)
|
||||||
|
| fun printRightNonCodeElements(element: JKNonCodeElementsListOwner)
|
||||||
|
|
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
|
||||||
|
interfaceData.joinTo(this, separator = "\n\n") { (name, ext) ->
|
||||||
|
val nameWithoutPrefix = name.removePrefix("JK")
|
||||||
|
val argName = nameWithoutPrefix.decapitalize().safeVarName()
|
||||||
|
val arg = "$argName: $name"
|
||||||
|
val rawVisitSuffix = "Raw"
|
||||||
|
val generifyCall = if (name != "JKTreeElement") "= visit${ext!!.removePrefix("JK")}$rawVisitSuffix($argName)" else ""
|
||||||
|
"""
|
||||||
|
| override fun visit$nameWithoutPrefix($arg) {
|
||||||
|
| printLeftNonCodeElements($argName)
|
||||||
|
| visit$nameWithoutPrefix$rawVisitSuffix($argName)
|
||||||
|
| printRightNonCodeElements($argName)
|
||||||
|
| }
|
||||||
|
|
|
||||||
|
| fun visit$nameWithoutPrefix$rawVisitSuffix($arg) $generifyCall
|
||||||
|
""".trimMargin()
|
||||||
|
}
|
||||||
|
appendln()
|
||||||
|
appendln("}")
|
||||||
|
})
|
||||||
|
|
||||||
/*File(JK_OUT_ROOT, "$transformerName.kt").writeText(buildString {
|
/*File(JK_OUT_ROOT, "$transformerName.kt").writeText(buildString {
|
||||||
appendln(pkg)
|
appendln(pkg)
|
||||||
appendln()
|
appendln()
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ interface JKVisitor<out R, in D> {
|
|||||||
fun visitVariable(variable: JKVariable, data: D): R = visitDeclaration(variable, data)
|
fun visitVariable(variable: JKVariable, data: D): R = visitDeclaration(variable, data)
|
||||||
fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: D): R = visitVariable(forLoopVariable, data)
|
fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: D): R = visitVariable(forLoopVariable, data)
|
||||||
fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitVariable(localVariable, data)
|
fun visitLocalVariable(localVariable: JKLocalVariable, data: D): R = visitVariable(localVariable, data)
|
||||||
|
fun visitModifierElement(modifierElement: JKModifierElement, data: D): R = visitTreeElement(modifierElement, data)
|
||||||
|
fun visitMutabilityModifierElement(mutabilityModifierElement: JKMutabilityModifierElement, data: D): R = visitModifierElement(mutabilityModifierElement, data)
|
||||||
|
fun visitModalityModifierElement(modalityModifierElement: JKModalityModifierElement, data: D): R = visitModifierElement(modalityModifierElement, data)
|
||||||
|
fun visitVisibilityModifierElement(visibilityModifierElement: JKVisibilityModifierElement, data: D): R = visitModifierElement(visibilityModifierElement, data)
|
||||||
|
fun visitExtraModifierElement(extraModifierElement: JKExtraModifierElement, data: D): R = visitModifierElement(extraModifierElement, data)
|
||||||
fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: D): R = visitModifiersListOwner(extraModifiersOwner, data)
|
fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: D): R = visitModifiersListOwner(extraModifiersOwner, data)
|
||||||
fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner, data: D): R = visitModifiersListOwner(visibilityOwner, data)
|
fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner, data: D): R = visitModifiersListOwner(visibilityOwner, data)
|
||||||
fun visitModalityOwner(modalityOwner: JKModalityOwner, data: D): R = visitModifiersListOwner(modalityOwner, data)
|
fun visitModalityOwner(modalityOwner: JKModalityOwner, data: D): R = visitModifiersListOwner(modalityOwner, data)
|
||||||
@@ -26,6 +31,7 @@ interface JKVisitor<out R, in D> {
|
|||||||
fun visitTypeElement(typeElement: JKTypeElement, data: D): R = visitTreeElement(typeElement, data)
|
fun visitTypeElement(typeElement: JKTypeElement, data: D): R = visitTreeElement(typeElement, data)
|
||||||
fun visitStatement(statement: JKStatement, data: D): R = visitTreeElement(statement, data)
|
fun visitStatement(statement: JKStatement, data: D): R = visitTreeElement(statement, data)
|
||||||
fun visitBlock(block: JKBlock, data: D): R = visitTreeElement(block, data)
|
fun visitBlock(block: JKBlock, data: D): R = visitTreeElement(block, data)
|
||||||
|
fun visitBodyStub(bodyStub: JKBodyStub, data: D): R = visitBlock(bodyStub, data)
|
||||||
fun visitIdentifier(identifier: JKIdentifier, data: D): R = visitTreeElement(identifier, data)
|
fun visitIdentifier(identifier: JKIdentifier, data: D): R = visitTreeElement(identifier, data)
|
||||||
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): R = visitIdentifier(nameIdentifier, data)
|
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): R = visitIdentifier(nameIdentifier, data)
|
||||||
fun visitExpression(expression: JKExpression, data: D): R = visitTreeElement(expression, data)
|
fun visitExpression(expression: JKExpression, data: D): R = visitTreeElement(expression, data)
|
||||||
@@ -113,7 +119,7 @@ interface JKVisitor<out R, in D> {
|
|||||||
fun visitKtEmptyGetterOrSetter(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter, data: D): R = visitKtGetterOrSetter(ktEmptyGetterOrSetter, data)
|
fun visitKtEmptyGetterOrSetter(ktEmptyGetterOrSetter: JKKtEmptyGetterOrSetter, data: D): R = visitKtGetterOrSetter(ktEmptyGetterOrSetter, data)
|
||||||
fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, data)
|
fun visitKtProperty(ktProperty: JKKtProperty, data: D): R = visitField(ktProperty, data)
|
||||||
fun visitKtFunction(ktFunction: JKKtFunction, data: D): R = visitMethod(ktFunction, data)
|
fun visitKtFunction(ktFunction: JKKtFunction, data: D): R = visitMethod(ktFunction, data)
|
||||||
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitDeclaration(ktConstructor, data)
|
fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R = visitMethod(ktConstructor, data)
|
||||||
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
|
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R = visitKtConstructor(ktPrimaryConstructor, data)
|
||||||
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): R = visitStatement(ktAssignmentStatement, data)
|
fun visitKtAssignmentStatement(ktAssignmentStatement: JKKtAssignmentStatement, data: D): R = visitStatement(ktAssignmentStatement, data)
|
||||||
fun visitKtCall(ktCall: JKKtCall, data: D): R = visitMethodCallExpression(ktCall, data)
|
fun visitKtCall(ktCall: JKKtCall, data: D): R = visitMethodCallExpression(ktCall, data)
|
||||||
|
|||||||
@@ -33,6 +33,16 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: Nothing?) = visitForLoopVariable(forLoopVariable)
|
override fun visitForLoopVariable(forLoopVariable: JKForLoopVariable, data: Nothing?) = visitForLoopVariable(forLoopVariable)
|
||||||
fun visitLocalVariable(localVariable: JKLocalVariable) = visitVariable(localVariable, null)
|
fun visitLocalVariable(localVariable: JKLocalVariable) = visitVariable(localVariable, null)
|
||||||
override fun visitLocalVariable(localVariable: JKLocalVariable, data: Nothing?) = visitLocalVariable(localVariable)
|
override fun visitLocalVariable(localVariable: JKLocalVariable, data: Nothing?) = visitLocalVariable(localVariable)
|
||||||
|
fun visitModifierElement(modifierElement: JKModifierElement) = visitTreeElement(modifierElement, null)
|
||||||
|
override fun visitModifierElement(modifierElement: JKModifierElement, data: Nothing?) = visitModifierElement(modifierElement)
|
||||||
|
fun visitMutabilityModifierElement(mutabilityModifierElement: JKMutabilityModifierElement) = visitModifierElement(mutabilityModifierElement, null)
|
||||||
|
override fun visitMutabilityModifierElement(mutabilityModifierElement: JKMutabilityModifierElement, data: Nothing?) = visitMutabilityModifierElement(mutabilityModifierElement)
|
||||||
|
fun visitModalityModifierElement(modalityModifierElement: JKModalityModifierElement) = visitModifierElement(modalityModifierElement, null)
|
||||||
|
override fun visitModalityModifierElement(modalityModifierElement: JKModalityModifierElement, data: Nothing?) = visitModalityModifierElement(modalityModifierElement)
|
||||||
|
fun visitVisibilityModifierElement(visibilityModifierElement: JKVisibilityModifierElement) = visitModifierElement(visibilityModifierElement, null)
|
||||||
|
override fun visitVisibilityModifierElement(visibilityModifierElement: JKVisibilityModifierElement, data: Nothing?) = visitVisibilityModifierElement(visibilityModifierElement)
|
||||||
|
fun visitExtraModifierElement(extraModifierElement: JKExtraModifierElement) = visitModifierElement(extraModifierElement, null)
|
||||||
|
override fun visitExtraModifierElement(extraModifierElement: JKExtraModifierElement, data: Nothing?) = visitExtraModifierElement(extraModifierElement)
|
||||||
fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner) = visitModifiersListOwner(extraModifiersOwner, null)
|
fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner) = visitModifiersListOwner(extraModifiersOwner, null)
|
||||||
override fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: Nothing?) = visitExtraModifiersOwner(extraModifiersOwner)
|
override fun visitExtraModifiersOwner(extraModifiersOwner: JKExtraModifiersOwner, data: Nothing?) = visitExtraModifiersOwner(extraModifiersOwner)
|
||||||
fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner) = visitModifiersListOwner(visibilityOwner, null)
|
fun visitVisibilityOwner(visibilityOwner: JKVisibilityOwner) = visitModifiersListOwner(visibilityOwner, null)
|
||||||
@@ -49,6 +59,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitStatement(statement: JKStatement, data: Nothing?) = visitStatement(statement)
|
override fun visitStatement(statement: JKStatement, data: Nothing?) = visitStatement(statement)
|
||||||
fun visitBlock(block: JKBlock) = visitTreeElement(block, null)
|
fun visitBlock(block: JKBlock) = visitTreeElement(block, null)
|
||||||
override fun visitBlock(block: JKBlock, data: Nothing?) = visitBlock(block)
|
override fun visitBlock(block: JKBlock, data: Nothing?) = visitBlock(block)
|
||||||
|
fun visitBodyStub(bodyStub: JKBodyStub) = visitBlock(bodyStub, null)
|
||||||
|
override fun visitBodyStub(bodyStub: JKBodyStub, data: Nothing?) = visitBodyStub(bodyStub)
|
||||||
fun visitIdentifier(identifier: JKIdentifier) = visitTreeElement(identifier, null)
|
fun visitIdentifier(identifier: JKIdentifier) = visitTreeElement(identifier, null)
|
||||||
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?) = visitIdentifier(identifier)
|
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?) = visitIdentifier(identifier)
|
||||||
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) = visitIdentifier(nameIdentifier, null)
|
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) = visitIdentifier(nameIdentifier, null)
|
||||||
@@ -223,7 +235,7 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
|
|||||||
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty)
|
override fun visitKtProperty(ktProperty: JKKtProperty, data: Nothing?) = visitKtProperty(ktProperty)
|
||||||
fun visitKtFunction(ktFunction: JKKtFunction) = visitMethod(ktFunction, null)
|
fun visitKtFunction(ktFunction: JKKtFunction) = visitMethod(ktFunction, null)
|
||||||
override fun visitKtFunction(ktFunction: JKKtFunction, data: Nothing?) = visitKtFunction(ktFunction)
|
override fun visitKtFunction(ktFunction: JKKtFunction, data: Nothing?) = visitKtFunction(ktFunction)
|
||||||
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitDeclaration(ktConstructor, null)
|
fun visitKtConstructor(ktConstructor: JKKtConstructor) = visitMethod(ktConstructor, null)
|
||||||
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor)
|
override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor)
|
||||||
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) = visitKtConstructor(ktPrimaryConstructor, null)
|
fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) = visitKtConstructor(ktPrimaryConstructor, null)
|
||||||
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor)
|
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user