New J2K: store reference to conversionContext & symbolProvider in conversion
This commit is contained in:
@@ -7,11 +7,15 @@ package org.jetbrains.kotlin.nj2k
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
interface BatchBaseConversion {
|
interface Conversion {
|
||||||
|
val context: NewJ2kConverterContext
|
||||||
|
val symbolProvider
|
||||||
|
get() = context.symbolProvider
|
||||||
|
|
||||||
fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean
|
fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SequentialBaseConversion : BatchBaseConversion {
|
interface SequentialBaseConversion : Conversion {
|
||||||
fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean
|
fun runConversion(treeRoot: JKTreeElement, context: NewJ2kConverterContext): Boolean
|
||||||
|
|
||||||
override fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean {
|
override fun runConversion(treeRoots: List<JKTreeElement>, context: NewJ2kConverterContext): Boolean {
|
||||||
|
|||||||
@@ -22,25 +22,25 @@ import org.jetbrains.kotlin.nj2k.tree.JKTreeRoot
|
|||||||
object ConversionsRunner {
|
object ConversionsRunner {
|
||||||
|
|
||||||
private fun createConversions(context: NewJ2kConverterContext) = listOf(
|
private fun createConversions(context: NewJ2kConverterContext) = listOf(
|
||||||
NonCodeElementsConversion(),
|
NonCodeElementsConversion(context),
|
||||||
JavaModifiersConversion(context),
|
JavaModifiersConversion(context),
|
||||||
JavaAnnotationsConversion(context),
|
JavaAnnotationsConversion(context),
|
||||||
AnnotationClassConversion(context),
|
AnnotationClassConversion(context),
|
||||||
AnnotationConversion(context),
|
AnnotationConversion(context),
|
||||||
ModalityConversion(context),
|
ModalityConversion(context),
|
||||||
FunctionAsAnonymousObjectToLambdaConversion(),
|
FunctionAsAnonymousObjectToLambdaConversion(context),
|
||||||
ReturnStatementInLambdaExpressionConversion(),
|
ReturnStatementInLambdaExpressionConversion(context),
|
||||||
BoxedTypeOperationsConversion(context),
|
BoxedTypeOperationsConversion(context),
|
||||||
AssignmentAsExpressionToAlsoConversion(context),
|
AssignmentAsExpressionToAlsoConversion(context),
|
||||||
AssignmentStatementValCreationConversion(context),
|
AssignmentStatementValCreationConversion(context),
|
||||||
AssignmentStatementOperatorConversion(),
|
AssignmentStatementOperatorConversion(context),
|
||||||
AssignmentStatementSimplifyValConversion(),
|
AssignmentStatementSimplifyValConversion(context),
|
||||||
AssignmentStatementSimplifyAlsoConversion(),
|
AssignmentStatementSimplifyAlsoConversion(context),
|
||||||
AssignmentStatementSplitAlsoConversion(),
|
AssignmentStatementSplitAlsoConversion(context),
|
||||||
PolyadicExpressionConversion(),
|
PolyadicExpressionConversion(context),
|
||||||
OperatorExpressionConversion(context),
|
OperatorExpressionConversion(context),
|
||||||
AddParenthesisForLineBreaksInBinaryExpression(),
|
AddParenthesisForLineBreaksInBinaryExpression(context),
|
||||||
ThrowStatementConversion(),
|
ThrowStatementConversion(context),
|
||||||
ArrayInitializerConversion(context),
|
ArrayInitializerConversion(context),
|
||||||
TryStatementConversion(context),
|
TryStatementConversion(context),
|
||||||
EnumFieldAccessConversion(context),
|
EnumFieldAccessConversion(context),
|
||||||
@@ -49,38 +49,38 @@ object ConversionsRunner {
|
|||||||
JetbrainsNullableAnnotationsConverter(context),
|
JetbrainsNullableAnnotationsConverter(context),
|
||||||
DefaultArgumentsConversion(context),
|
DefaultArgumentsConversion(context),
|
||||||
ConstructorConversion(context),
|
ConstructorConversion(context),
|
||||||
StaticInitDeclarationConversion(),
|
StaticInitDeclarationConversion(context),
|
||||||
ImplicitInitializerConversion(context),
|
ImplicitInitializerConversion(context),
|
||||||
ParameterModificationInMethodCallsConversion(context),
|
ParameterModificationInMethodCallsConversion(context),
|
||||||
BlockToRunConversion(context),
|
BlockToRunConversion(context),
|
||||||
PrimaryConstructorDetectConversion(context),
|
PrimaryConstructorDetectConversion(context),
|
||||||
InsertDefaultPrimaryConstructorConversion(context),
|
InsertDefaultPrimaryConstructorConversion(context),
|
||||||
FieldToPropertyConversion(),
|
FieldToPropertyConversion(context),
|
||||||
JavaStandardMethodsConversion(context),
|
JavaStandardMethodsConversion(context),
|
||||||
JavaMethodToKotlinFunctionConversion(context),
|
JavaMethodToKotlinFunctionConversion(context),
|
||||||
MainFunctionConversion(context),
|
MainFunctionConversion(context),
|
||||||
AssertStatementConversion(context),
|
AssertStatementConversion(context),
|
||||||
SwitchStatementConversion(context),
|
SwitchStatementConversion(context),
|
||||||
LiteralConversion(),
|
LiteralConversion(context),
|
||||||
ForConversion(context),
|
ForConversion(context),
|
||||||
LabeledStatementConversion(),
|
LabeledStatementConversion(context),
|
||||||
ArrayOperationsConversion(context),
|
ArrayOperationsConversion(context),
|
||||||
EqualsOperatorConversion(context),
|
EqualsOperatorConversion(context),
|
||||||
TypeMappingConversion(context),
|
TypeMappingConversion(context),
|
||||||
InternalDeclarationConversion(context),
|
InternalDeclarationConversion(context),
|
||||||
|
|
||||||
InnerClassConversion(),
|
InnerClassConversion(context),
|
||||||
StaticsToCompanionExtractConversion(),
|
StaticsToCompanionExtractConversion(context),
|
||||||
InterfaceWithFieldConversion(),
|
InterfaceWithFieldConversion(context),
|
||||||
ClassToObjectPromotionConversion(context),
|
ClassToObjectPromotionConversion(context),
|
||||||
RemoveWrongExtraModifiersForSingleFunctionsConversion(),
|
RemoveWrongExtraModifiersForSingleFunctionsConversion(context),
|
||||||
MethodReferenceToLambdaConversion(context),
|
MethodReferenceToLambdaConversion(context),
|
||||||
BuiltinMembersConversion(context),
|
BuiltinMembersConversion(context),
|
||||||
ImplicitCastsConversion(context),
|
ImplicitCastsConversion(context),
|
||||||
LiteralConversion(),
|
LiteralConversion(context),
|
||||||
CollectImportsConversion(context),
|
CollectImportsConversion(context),
|
||||||
FilterImportsConversion(),
|
FilterImportsConversion(context),
|
||||||
MoveInitBlocksToTheEndConversion(),
|
MoveInitBlocksToTheEndConversion(context),
|
||||||
AddElementsInfoConversion(context)
|
AddElementsInfoConversion(context)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ import org.jetbrains.kotlin.nj2k.symbols.JKUniverseMethodSymbol
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKCapturedType
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKCapturedType
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.nj2k.types.JKParametrizedType
|
|
||||||
import org.jetbrains.kotlin.nj2k.types.JKStarProjectionType
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class AddElementsInfoConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
class AddElementsInfoConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
@@ -55,8 +53,8 @@ class AddElementsInfoConversion(context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
|
|
||||||
private fun JKMethod.superMethods(): Collection<FunctionDescriptor>? {
|
private fun JKMethod.superMethods(): Collection<FunctionDescriptor>? {
|
||||||
val psiMethod = psi<PsiMethod>() ?: return null
|
val psiMethod = psi<PsiMethod>() ?: return null
|
||||||
psiMethod.getJavaMethodDescriptor()?.let {
|
psiMethod.getJavaMethodDescriptor()?.let { descriptor ->
|
||||||
return it.overriddenDescriptors
|
return descriptor.overriddenDescriptors
|
||||||
}
|
}
|
||||||
return psiMethod.findSuperMethods().mapNotNull { superMethod ->
|
return psiMethod.findSuperMethods().mapNotNull { superMethod ->
|
||||||
when (superMethod) {
|
when (superMethod) {
|
||||||
|
|||||||
+3
-2
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
||||||
|
|
||||||
|
|
||||||
class AddParenthesisForLineBreaksInBinaryExpression : RecursiveApplicableConversionBase() {
|
class AddParenthesisForLineBreaksInBinaryExpression(override val context: NewJ2kConverterContext) :
|
||||||
|
RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKBinaryExpression) return recurse(element)
|
if (element !is JKBinaryExpression) return recurse(element)
|
||||||
if (element.parent is JKBinaryExpression) return recurse(element)
|
if (element.parent is JKBinaryExpression) return recurse(element)
|
||||||
@@ -27,5 +29,4 @@ class AddParenthesisForLineBreaksInBinaryExpression : RecursiveApplicableConvers
|
|||||||
}
|
}
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ 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.*
|
||||||
|
|
||||||
class AnnotationClassConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class AnnotationClassConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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.ANNOTATION) return recurse(element)
|
if (element.classKind != JKClass.ClassKind.ANNOTATION) return recurse(element)
|
||||||
@@ -36,8 +36,8 @@ class AnnotationClassConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
private fun JKJavaAnnotationMethod.asKotlinAnnotationParameter(): JKParameterImpl {
|
private fun JKJavaAnnotationMethod.asKotlinAnnotationParameter(): JKParameterImpl {
|
||||||
val type = returnType.type
|
val type = returnType.type
|
||||||
.updateNullabilityRecursively(Nullability.NotNull)
|
.updateNullabilityRecursively(Nullability.NotNull)
|
||||||
.replaceJavaClassWithKotlinClassType(context.symbolProvider)
|
.replaceJavaClassWithKotlinClassType(symbolProvider)
|
||||||
val initializer = this::defaultValue.detached().toExpression(context.symbolProvider)
|
val initializer = this::defaultValue.detached().toExpression(symbolProvider)
|
||||||
val isVarArgs = type is JKJavaArrayType && name.value == "value"
|
val isVarArgs = type is JKJavaArrayType && name.value == "value"
|
||||||
return JKParameterImpl(
|
return JKParameterImpl(
|
||||||
JKTypeElementImpl(
|
JKTypeElementImpl(
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKAnnotationParameterImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtAnnotationArrayInitializerExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtAnnotationArrayInitializerExpressionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKNameIdentifierImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKNameIdentifierImpl
|
||||||
|
|
||||||
class AnnotationConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class AnnotationConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKAnnotation) return recurse(element)
|
if (element !is JKAnnotation) return recurse(element)
|
||||||
fixVarargsInvocation(element)
|
fixVarargsInvocation(element)
|
||||||
for (parameter in element.arguments) {
|
for (parameter in element.arguments) {
|
||||||
parameter.value = parameter.value.toExpression(context.symbolProvider)
|
parameter.value = parameter.value.toExpression(symbolProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.resolve.CollectionLiteralResolver
|
import org.jetbrains.kotlin.resolve.CollectionLiteralResolver
|
||||||
|
|
||||||
|
|
||||||
class ArrayInitializerConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ArrayInitializerConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
var newElement = element
|
var newElement = element
|
||||||
if (element is JKJavaNewArray) {
|
if (element is JKJavaNewArray) {
|
||||||
@@ -29,7 +29,7 @@ class ArrayInitializerConversion(private val context: NewJ2kConverterContext) :
|
|||||||
if (primitiveArrayType == null) JKTypeArgumentListImpl(listOf(element::type.detached()))
|
if (primitiveArrayType == null) JKTypeArgumentListImpl(listOf(element::type.detached()))
|
||||||
else JKTypeArgumentListImpl()
|
else JKTypeArgumentListImpl()
|
||||||
newElement = JKJavaMethodCallExpressionImpl(
|
newElement = JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.$arrayConstructorName"),
|
symbolProvider.provideMethodSymbol("kotlin.$arrayConstructorName"),
|
||||||
element.initializer.also { element.initializer = emptyList() }.toArgumentList(),
|
element.initializer.also { element.initializer = emptyList() }.toArgumentList(),
|
||||||
typeArguments
|
typeArguments
|
||||||
)
|
)
|
||||||
@@ -46,13 +46,13 @@ class ArrayInitializerConversion(private val context: NewJ2kConverterContext) :
|
|||||||
if (dimensions.size == 1) {
|
if (dimensions.size == 1) {
|
||||||
return if (type !is JKJavaPrimitiveType) {
|
return if (type !is JKJavaPrimitiveType) {
|
||||||
JKJavaMethodCallExpressionImpl(
|
JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.arrayOfNulls"),
|
symbolProvider.provideMethodSymbol("kotlin.arrayOfNulls"),
|
||||||
JKArgumentListImpl(dimensions[0]),
|
JKArgumentListImpl(dimensions[0]),
|
||||||
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(type)))
|
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(type)))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
JKJavaNewExpressionImpl(
|
JKJavaNewExpressionImpl(
|
||||||
context.symbolProvider.provideClassSymbol(type.arrayFqName()),
|
symbolProvider.provideClassSymbol(type.arrayFqName()),
|
||||||
JKArgumentListImpl(dimensions[0]),
|
JKArgumentListImpl(dimensions[0]),
|
||||||
JKTypeArgumentListImpl(emptyList())
|
JKTypeArgumentListImpl(emptyList())
|
||||||
)
|
)
|
||||||
@@ -63,7 +63,7 @@ class ArrayInitializerConversion(private val context: NewJ2kConverterContext) :
|
|||||||
JKJavaArrayTypeImpl(currentType)
|
JKJavaArrayTypeImpl(currentType)
|
||||||
}
|
}
|
||||||
return JKJavaNewExpressionImpl(
|
return JKJavaNewExpressionImpl(
|
||||||
context.symbolProvider.provideClassSymbol("kotlin.Array"),
|
symbolProvider.provideClassSymbol("kotlin.Array"),
|
||||||
JKArgumentListImpl(
|
JKArgumentListImpl(
|
||||||
dimensions[0],
|
dimensions[0],
|
||||||
JKLambdaExpressionImpl(
|
JKLambdaExpressionImpl(
|
||||||
@@ -75,19 +75,19 @@ class ArrayInitializerConversion(private val context: NewJ2kConverterContext) :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
var resultType = JKClassTypeImpl(
|
var resultType = JKClassTypeImpl(
|
||||||
context.symbolProvider.provideClassSymbol(type.arrayFqName()),
|
symbolProvider.provideClassSymbol(type.arrayFqName()),
|
||||||
if (type is JKJavaPrimitiveType) emptyList() else listOf(type),
|
if (type is JKJavaPrimitiveType) emptyList() else listOf(type),
|
||||||
Nullability.Default
|
Nullability.Default
|
||||||
)
|
)
|
||||||
for (i in 0 until dimensions.size - 2) {
|
for (i in 0 until dimensions.size - 2) {
|
||||||
resultType = JKClassTypeImpl(
|
resultType = JKClassTypeImpl(
|
||||||
context.symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.array.toSafe()),
|
symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.array.toSafe()),
|
||||||
listOf(resultType),
|
listOf(resultType),
|
||||||
Nullability.Default
|
Nullability.Default
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return JKJavaMethodCallExpressionImpl(
|
return JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.arrayOfNulls"),
|
symbolProvider.provideMethodSymbol("kotlin.arrayOfNulls"),
|
||||||
JKArgumentListImpl(dimensions[0]),
|
JKArgumentListImpl(dimensions[0]),
|
||||||
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType)))
|
JKTypeArgumentListImpl(listOf(JKTypeElementImpl(resultType)))
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
|
|
||||||
class ArrayOperationsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ArrayOperationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKQualifiedExpression) return recurse(element)
|
if (element !is JKQualifiedExpression) return recurse(element)
|
||||||
val selector = element.selector as? JKFieldAccessExpression ?: return recurse(element)
|
val selector = element.selector as? JKFieldAccessExpression ?: return recurse(element)
|
||||||
if (element.receiver.isArrayOrVarargTypeParameter() && selector.identifier.name == "length") {
|
if (element.receiver.isArrayOrVarargTypeParameter() && selector.identifier.name == "length") {
|
||||||
val sizeCall =
|
val sizeCall =
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideFieldSymbol("kotlin.Array.size")
|
symbolProvider.provideFieldSymbol("kotlin.Array.size")
|
||||||
)
|
)
|
||||||
element.selector = sizeCall
|
element.selector = sizeCall
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ class ArrayOperationsConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun JKExpression.isArrayOrVarargTypeParameter(): Boolean {
|
private fun JKExpression.isArrayOrVarargTypeParameter(): Boolean {
|
||||||
if (type(context.symbolProvider) is JKJavaArrayType) return true
|
if (type(symbolProvider) is JKJavaArrayType) return true
|
||||||
val parameter =
|
val parameter =
|
||||||
safeAs<JKFieldAccessExpression>()
|
safeAs<JKFieldAccessExpression>()
|
||||||
?.identifier
|
?.identifier
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKExpressionStatementImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKLambdaExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKLambdaExpressionImpl
|
||||||
|
|
||||||
|
|
||||||
class AssertStatementConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class AssertStatementConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaAssertStatement) return recurse(element)
|
if (element !is JKJavaAssertStatement) return recurse(element)
|
||||||
val messageExpression =
|
val messageExpression =
|
||||||
@@ -29,7 +29,7 @@ class AssertStatementConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
kotlinAssert(
|
kotlinAssert(
|
||||||
element::condition.detached(),
|
element::condition.detached(),
|
||||||
messageExpression,
|
messageExpression,
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-3
@@ -13,7 +13,7 @@ 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.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
|
|
||||||
class AssignmentAsExpressionToAlsoConversion(val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class AssignmentAsExpressionToAlsoConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaAssignmentExpression) return recurse(element)
|
if (element !is JKJavaAssignmentExpression) return recurse(element)
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
@@ -21,11 +21,11 @@ class AssignmentAsExpressionToAlsoConversion(val context: NewJ2kConverterContext
|
|||||||
val alsoExpression = JKKtAlsoCallExpressionImpl(
|
val alsoExpression = JKKtAlsoCallExpressionImpl(
|
||||||
JKBlockStatementImpl(
|
JKBlockStatementImpl(
|
||||||
JKBlockImpl(listOf(JKKtAssignmentStatementImpl(element.field, JKStubExpressionImpl(), element.operator)))
|
JKBlockImpl(listOf(JKKtAssignmentStatementImpl(element.field, JKStubExpressionImpl(), element.operator)))
|
||||||
), context.symbolProvider.provideMethodSymbol("kotlin.also")
|
), symbolProvider.provideMethodSymbol("kotlin.also")
|
||||||
).also {
|
).also {
|
||||||
it.statement.cast<JKBlockStatement>().block.statements.first().cast<JKKtAssignmentStatement>().expression =
|
it.statement.cast<JKBlockStatement>().block.statements.first().cast<JKKtAssignmentStatement>().expression =
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideUniverseSymbol(
|
symbolProvider.provideUniverseSymbol(
|
||||||
JKParameterImpl(JKTypeElementImpl(JKContextType), JKNameIdentifierImpl("it"))
|
JKParameterImpl(JKTypeElementImpl(JKContextType), JKNameIdentifierImpl("it"))
|
||||||
)
|
)
|
||||||
)//TODO introduce symbol
|
)//TODO introduce symbol
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import com.intellij.psi.JavaTokenType
|
import com.intellij.psi.JavaTokenType
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKKtAssignmentStatement
|
import org.jetbrains.kotlin.nj2k.tree.JKKtAssignmentStatement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
@@ -13,7 +14,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaOperatorImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaOperatorImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaOperatorToken
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaOperatorToken
|
||||||
|
|
||||||
class AssignmentStatementOperatorConversion : RecursiveApplicableConversionBase() {
|
class AssignmentStatementOperatorConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKKtAssignmentStatement) return recurse(element)
|
if (element !is JKKtAssignmentStatement) return recurse(element)
|
||||||
val operator = element.operator as? JKJavaOperatorImpl ?: return recurse(element)
|
val operator = element.operator as? JKJavaOperatorImpl ?: return recurse(element)
|
||||||
|
|||||||
+2
-1
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKExpressionStatementImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKExpressionStatementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
||||||
|
|
||||||
class AssignmentStatementSimplifyAlsoConversion : RecursiveApplicableConversionBase() {
|
class AssignmentStatementSimplifyAlsoConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKExpressionStatement) return recurse(element)
|
if (element !is JKExpressionStatement) return recurse(element)
|
||||||
val qualifiedExpression = element.expression as? JKQualifiedExpression ?: return recurse(element)
|
val qualifiedExpression = element.expression as? JKQualifiedExpression ?: return recurse(element)
|
||||||
|
|||||||
+2
-1
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
||||||
|
|
||||||
class AssignmentStatementSimplifyValConversion : RecursiveApplicableConversionBase() {
|
class AssignmentStatementSimplifyValConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKKtAlsoCallExpression) return recurse(element)
|
if (element !is JKKtAlsoCallExpression) return recurse(element)
|
||||||
val codeBlock = (element.statement as? JKBlockStatement)?.block ?: return recurse(element)
|
val codeBlock = (element.statement as? JKBlockStatement)?.block ?: return recurse(element)
|
||||||
|
|||||||
+2
-1
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
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.*
|
||||||
|
|
||||||
class AssignmentStatementSplitAlsoConversion : RecursiveApplicableConversionBase() {
|
class AssignmentStatementSplitAlsoConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
return recurse(
|
return recurse(
|
||||||
when (element) {
|
when (element) {
|
||||||
|
|||||||
+4
-4
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
|||||||
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.*
|
||||||
|
|
||||||
class AssignmentStatementValCreationConversion(val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class AssignmentStatementValCreationConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKKtAlsoCallExpression) return recurse(element)
|
if (element !is JKKtAlsoCallExpression) return recurse(element)
|
||||||
val codeBlock = (element.statement as? JKBlockStatement)?.block ?: return recurse(element)
|
val codeBlock = (element.statement as? JKBlockStatement)?.block ?: return recurse(element)
|
||||||
@@ -29,7 +29,7 @@ class AssignmentStatementValCreationConversion(val context: NewJ2kConverterConte
|
|||||||
ex1,
|
ex1,
|
||||||
JKMutabilityModifierElementImpl(Mutability.IMMUTABLE)
|
JKMutabilityModifierElementImpl(Mutability.IMMUTABLE)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.expression = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
assignableExpr.expression = JKFieldAccessExpressionImpl(symbolProvider.provideUniverseSymbol(it))
|
||||||
}, JKLocalVariableImpl(
|
}, JKLocalVariableImpl(
|
||||||
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
JKTypeElementImpl(JKJavaVoidType/*TODO*/),
|
||||||
JKNameIdentifierImpl("i"),
|
JKNameIdentifierImpl("i"),
|
||||||
@@ -37,7 +37,7 @@ class AssignmentStatementValCreationConversion(val context: NewJ2kConverterConte
|
|||||||
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.indexExpression =
|
assignableExpr.indexExpression =
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
JKFieldAccessExpressionImpl(symbolProvider.provideUniverseSymbol(it))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -55,7 +55,7 @@ class AssignmentStatementValCreationConversion(val context: NewJ2kConverterConte
|
|||||||
ex,
|
ex,
|
||||||
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
JKMutabilityModifierElementImpl(Mutability.UNKNOWN)
|
||||||
).also {
|
).also {
|
||||||
assignableExpr.receiver = JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(it))
|
assignableExpr.receiver = JKFieldAccessExpressionImpl(symbolProvider.provideUniverseSymbol(it))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
|||||||
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.*
|
||||||
|
|
||||||
class BlockToRunConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class BlockToRunConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKBlockStatement) return recurse(element)
|
if (element !is JKBlockStatement) return recurse(element)
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ class BlockToRunConversion(private val context: NewJ2kConverterContext) : Recurs
|
|||||||
emptyList()
|
emptyList()
|
||||||
)
|
)
|
||||||
val call = JKKtCallExpressionImpl(
|
val call = JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.run"),
|
symbolProvider.provideMethodSymbol("kotlin.run"),
|
||||||
JKArgumentListImpl(lambda)
|
JKArgumentListImpl(lambda)
|
||||||
)
|
)
|
||||||
return recurse(JKExpressionStatementImpl(call).withNonCodeElementsFrom(element))
|
return recurse(JKExpressionStatementImpl(call).withNonCodeElementsFrom(element))
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKArgumentListImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKArgumentListImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtCallExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtCallExpressionImpl
|
||||||
|
|
||||||
class BoxedTypeOperationsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class BoxedTypeOperationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
return recurse(
|
return recurse(
|
||||||
when (element) {
|
when (element) {
|
||||||
@@ -39,7 +39,7 @@ class BoxedTypeOperationsConversion(private val context: NewJ2kConverterContext)
|
|||||||
val primitiveTypeName = boxedTypeToPrimitiveType[boxedJavaType] ?: return null
|
val primitiveTypeName = boxedTypeToPrimitiveType[boxedJavaType] ?: return null
|
||||||
if (operationType !in primitiveTypeNames) return null
|
if (operationType !in primitiveTypeNames) return null
|
||||||
return JKKtCallExpressionImpl(
|
return JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol(
|
symbolProvider.provideMethodSymbol(
|
||||||
"kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}"
|
"kotlin.${primitiveTypeName.capitalize()}.to${operationType.capitalize()}"
|
||||||
),
|
),
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class BuiltinMembersConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKExpression) return recurse(element)
|
if (element !is JKExpression) return recurse(element)
|
||||||
return recurse(element.convert() ?: element)
|
return recurse(element.convert() ?: element)
|
||||||
@@ -89,19 +89,19 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
when (from) {
|
when (from) {
|
||||||
is JKMethodCallExpression ->
|
is JKMethodCallExpression ->
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol(fqName),
|
symbolProvider.provideMethodSymbol(fqName),
|
||||||
argumentsProvider(from::arguments.detached()),
|
argumentsProvider(from::arguments.detached()),
|
||||||
from::typeArgumentList.detached()
|
from::typeArgumentList.detached()
|
||||||
).withNonCodeElementsFrom(from)
|
).withNonCodeElementsFrom(from)
|
||||||
is JKFieldAccessExpression ->
|
is JKFieldAccessExpression ->
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol(fqName),
|
symbolProvider.provideMethodSymbol(fqName),
|
||||||
JKArgumentListImpl(),
|
JKArgumentListImpl(),
|
||||||
JKTypeArgumentListImpl()
|
JKTypeArgumentListImpl()
|
||||||
).withNonCodeElementsFrom(from)
|
).withNonCodeElementsFrom(from)
|
||||||
is JKJavaNewExpression ->
|
is JKJavaNewExpression ->
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol(fqName),
|
symbolProvider.provideMethodSymbol(fqName),
|
||||||
argumentsProvider(from::arguments.detached()),
|
argumentsProvider(from::arguments.detached()),
|
||||||
JKTypeArgumentListImpl()
|
JKTypeArgumentListImpl()
|
||||||
).withNonCodeElementsFrom(from)
|
).withNonCodeElementsFrom(from)
|
||||||
@@ -116,11 +116,11 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
when (from) {
|
when (from) {
|
||||||
is JKMethodCallExpression ->
|
is JKMethodCallExpression ->
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideFieldSymbol(fqName)
|
symbolProvider.provideFieldSymbol(fqName)
|
||||||
).withNonCodeElementsFrom(from)
|
).withNonCodeElementsFrom(from)
|
||||||
is JKFieldAccessExpression ->
|
is JKFieldAccessExpression ->
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideFieldSymbol(fqName)
|
symbolProvider.provideFieldSymbol(fqName)
|
||||||
).withNonCodeElementsFrom(from)
|
).withNonCodeElementsFrom(from)
|
||||||
else -> error("Bad conversion")
|
else -> error("Bad conversion")
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
arguments.first()::value.detached().parenthesizeIfBinaryExpression(),
|
arguments.first()::value.detached().parenthesizeIfBinaryExpression(),
|
||||||
JKKtQualifierImpl.DOT,
|
JKKtQualifierImpl.DOT,
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol(fqName),
|
symbolProvider.provideMethodSymbol(fqName),
|
||||||
JKArgumentListImpl(arguments.drop(1)),
|
JKArgumentListImpl(arguments.drop(1)),
|
||||||
from::typeArgumentList.detached()
|
from::typeArgumentList.detached()
|
||||||
)
|
)
|
||||||
@@ -267,11 +267,11 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
Method("java.lang.String.indexOf") convertTo Method("kotlin.text.indexOf"),
|
Method("java.lang.String.indexOf") convertTo Method("kotlin.text.indexOf"),
|
||||||
Method("java.lang.String.lastIndexOf") convertTo Method("kotlin.text.lastIndexOf"),
|
Method("java.lang.String.lastIndexOf") convertTo Method("kotlin.text.lastIndexOf"),
|
||||||
Method("java.lang.String.getBytes") convertTo Method("kotlin.text.toByteArray")
|
Method("java.lang.String.getBytes") convertTo Method("kotlin.text.toByteArray")
|
||||||
withByArgumentsFilter { it.singleOrNull()?.type(context.symbolProvider)?.isStringType() == true }
|
withByArgumentsFilter { it.singleOrNull()?.type(symbolProvider)?.isStringType() == true }
|
||||||
withArgumentsProvider { arguments ->
|
withArgumentsProvider { arguments ->
|
||||||
val argument = arguments.arguments.single()::value.detached()
|
val argument = arguments.arguments.single()::value.detached()
|
||||||
val call = JKKtCallExpressionImpl(
|
val call = JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.text.charset"),
|
symbolProvider.provideMethodSymbol("kotlin.text.charset"),
|
||||||
JKArgumentListImpl(argument)
|
JKArgumentListImpl(argument)
|
||||||
)
|
)
|
||||||
JKArgumentListImpl(call)
|
JKArgumentListImpl(call)
|
||||||
@@ -280,7 +280,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
Method("java.lang.String.valueOf")
|
Method("java.lang.String.valueOf")
|
||||||
convertTo ExtensionMethod("kotlin.Any.toString")
|
convertTo ExtensionMethod("kotlin.Any.toString")
|
||||||
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
||||||
withByArgumentsFilter { it.isNotEmpty() && it.first().type(context.symbolProvider)?.isArrayType() == false },
|
withByArgumentsFilter { it.isNotEmpty() && it.first().type(symbolProvider)?.isArrayType() == false },
|
||||||
|
|
||||||
Method("java.lang.String.getChars")
|
Method("java.lang.String.getChars")
|
||||||
convertTo Method("kotlin.text.toCharArray")
|
convertTo Method("kotlin.text.toCharArray")
|
||||||
@@ -296,12 +296,12 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
Method("java.lang.String.valueOf")
|
Method("java.lang.String.valueOf")
|
||||||
convertTo Method("kotlin.String")
|
convertTo Method("kotlin.String")
|
||||||
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
||||||
withByArgumentsFilter { it.isNotEmpty() && it.first().type(context.symbolProvider)?.isArrayType() == true },
|
withByArgumentsFilter { it.isNotEmpty() && it.first().type(symbolProvider)?.isArrayType() == true },
|
||||||
|
|
||||||
Method("java.lang.String.copyValueOf")
|
Method("java.lang.String.copyValueOf")
|
||||||
convertTo Method("kotlin.String")
|
convertTo Method("kotlin.String")
|
||||||
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER
|
||||||
withByArgumentsFilter { it.isNotEmpty() && it.first().type(context.symbolProvider)?.isArrayType() == true },
|
withByArgumentsFilter { it.isNotEmpty() && it.first().type(symbolProvider)?.isArrayType() == true },
|
||||||
|
|
||||||
Method("java.lang.String.replaceAll")
|
Method("java.lang.String.replaceAll")
|
||||||
convertTo Method("kotlin.text.replace")
|
convertTo Method("kotlin.text.replace")
|
||||||
@@ -309,7 +309,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
val detachedArguments = arguments::arguments.detached()
|
val detachedArguments = arguments::arguments.detached()
|
||||||
val first =
|
val first =
|
||||||
detachedArguments.first()::value.detached().callOn(
|
detachedArguments.first()::value.detached().callOn(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.text.toRegex")
|
symbolProvider.provideMethodSymbol("kotlin.text.toRegex")
|
||||||
)
|
)
|
||||||
JKArgumentListImpl(listOf(JKArgumentImpl(first)) + detachedArguments.drop(1))
|
JKArgumentListImpl(listOf(JKArgumentImpl(first)) + detachedArguments.drop(1))
|
||||||
},
|
},
|
||||||
@@ -319,7 +319,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
val detachedArguments = arguments::arguments.detached()
|
val detachedArguments = arguments::arguments.detached()
|
||||||
val first =
|
val first =
|
||||||
detachedArguments.first()::value.detached().callOn(
|
detachedArguments.first()::value.detached().callOn(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.text.toRegex")
|
symbolProvider.provideMethodSymbol("kotlin.text.toRegex")
|
||||||
|
|
||||||
)
|
)
|
||||||
JKArgumentListImpl(listOf(JKArgumentImpl(first)) + detachedArguments.drop(1))
|
JKArgumentListImpl(listOf(JKArgumentImpl(first)) + detachedArguments.drop(1))
|
||||||
@@ -370,7 +370,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
firstArgument,
|
firstArgument,
|
||||||
secondArgument,
|
secondArgument,
|
||||||
KtTokens.PLUS,
|
KtTokens.PLUS,
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
} withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER,
|
} withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER,
|
||||||
|
|
||||||
@@ -392,14 +392,14 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
arguments.arguments = arguments.arguments.dropLast(1)
|
arguments.arguments = arguments.arguments.dropLast(1)
|
||||||
}.let {
|
}.let {
|
||||||
it.callOn(
|
it.callOn(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.collections.dropLastWhile"),
|
symbolProvider.provideMethodSymbol("kotlin.collections.dropLastWhile"),
|
||||||
JKLambdaExpressionImpl(
|
JKLambdaExpressionImpl(
|
||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
JKUnresolvedField(//TODO replace with `it` parameter
|
JKUnresolvedField(//TODO replace with `it` parameter
|
||||||
"it",
|
"it",
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
).callOn(context.symbolProvider.provideMethodSymbol("kotlin.text.isEmpty"))
|
).callOn(symbolProvider.provideMethodSymbol("kotlin.text.isEmpty"))
|
||||||
.asStatement(),
|
.asStatement(),
|
||||||
emptyList()
|
emptyList()
|
||||||
)
|
)
|
||||||
@@ -409,7 +409,7 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
else -> expression.also {
|
else -> expression.also {
|
||||||
val lastArgument = arguments.arguments.last().value.copyTreeAndDetach()
|
val lastArgument = arguments.arguments.last().value.copyTreeAndDetach()
|
||||||
.callOn(
|
.callOn(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.ranges.coerceAtLeast"),
|
symbolProvider.provideMethodSymbol("kotlin.ranges.coerceAtLeast"),
|
||||||
JKKtLiteralExpressionImpl("0", JKLiteralExpression.LiteralType.INT)
|
JKKtLiteralExpressionImpl("0", JKLiteralExpression.LiteralType.INT)
|
||||||
)
|
)
|
||||||
arguments.arguments = arguments.arguments.dropLast(1) + JKArgumentImpl(lastArgument)
|
arguments.arguments = arguments.arguments.dropLast(1) + JKArgumentImpl(lastArgument)
|
||||||
@@ -432,12 +432,12 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
JKFieldAccessExpressionImpl(
|
JKFieldAccessExpressionImpl(
|
||||||
JKUnresolvedField(//TODO replace with `it` parameter
|
JKUnresolvedField(//TODO replace with `it` parameter
|
||||||
"it",
|
"it",
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
JKKtLiteralExpressionImpl("' '", JKLiteralExpression.LiteralType.CHAR),
|
JKKtLiteralExpressionImpl("' '", JKLiteralExpression.LiteralType.CHAR),
|
||||||
KtTokens.LTEQ,
|
KtTokens.LTEQ,
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
emptyList()
|
emptyList()
|
||||||
@@ -446,9 +446,9 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
},
|
},
|
||||||
Method("java.lang.String.format") convertTo CustomExpression { expression ->
|
Method("java.lang.String.format") convertTo CustomExpression { expression ->
|
||||||
JKClassAccessExpressionImpl(
|
JKClassAccessExpressionImpl(
|
||||||
context.symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.string)
|
symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES.string)
|
||||||
).callOn(
|
).callOn(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.text.String.format"),
|
symbolProvider.provideMethodSymbol("kotlin.text.String.format"),
|
||||||
(expression as JKMethodCallExpression).arguments::arguments.detached()
|
(expression as JKMethodCallExpression).arguments::arguments.detached()
|
||||||
)
|
)
|
||||||
} withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER,
|
} withReplaceType ReplaceType.REPLACE_WITH_QUALIFIER,
|
||||||
@@ -501,5 +501,5 @@ class BuiltinMembersConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
|
|
||||||
|
|
||||||
private fun JKExpression.castToTypedArray() =
|
private fun JKExpression.castToTypedArray() =
|
||||||
callOn(context.symbolProvider.provideMethodSymbol("kotlin.collections.toTypedArray"))
|
callOn(symbolProvider.provideMethodSymbol("kotlin.collections.toTypedArray"))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKClassImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKModalityModifierElementImpl
|
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: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ClassToObjectPromotionConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) {
|
if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) {
|
||||||
val companion = element.getCompanion() ?: return recurse(element)
|
val companion = element.getCompanion() ?: return recurse(element)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
|
|
||||||
class CollectImportsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class CollectImportsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
when (element) {
|
when (element) {
|
||||||
is JKClassAccessExpression -> addSymbol(element.identifier)
|
is JKClassAccessExpression -> addSymbol(element.identifier)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConstructorImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtConstructorImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKStubExpressionImpl
|
||||||
|
|
||||||
class ConstructorConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ConstructorConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaMethod) return recurse(element)
|
if (element !is JKJavaMethod) return recurse(element)
|
||||||
val outerClass = element.parentOfType<JKClass>() ?: return recurse(element)
|
val outerClass = element.parentOfType<JKClass>() ?: return recurse(element)
|
||||||
@@ -29,7 +29,7 @@ class ConstructorConversion(private val context: NewJ2kConverterContext) : Recur
|
|||||||
element.visibilityElement,
|
element.visibilityElement,
|
||||||
element.modalityElement
|
element.modalityElement
|
||||||
).also {
|
).also {
|
||||||
context.symbolProvider.transferSymbol(it, element)
|
symbolProvider.transferSymbol(it, element)
|
||||||
}.withNonCodeElementsFrom(element)
|
}.withNonCodeElementsFrom(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class DefaultArgumentsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class DefaultArgumentsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
private fun JKMethod.canBeGetterOrSetter() =
|
private fun JKMethod.canBeGetterOrSetter() =
|
||||||
name.value.asGetterName() != null
|
name.value.asGetterName() != null
|
||||||
|| name.value.asSetterName() != null
|
|| name.value.asSetterName() != null
|
||||||
@@ -97,7 +97,7 @@ class DefaultArgumentsConversion(private val context: NewJ2kConverterContext) :
|
|||||||
val target = on.identifier.target
|
val target = on.identifier.target
|
||||||
if (target is JKParameter) {
|
if (target is JKParameter) {
|
||||||
val newSymbol =
|
val newSymbol =
|
||||||
context.symbolProvider.provideUniverseSymbol(calledMethod.parameters[method.parameters.indexOf(target)])
|
symbolProvider.provideUniverseSymbol(calledMethod.parameters[method.parameters.indexOf(target)])
|
||||||
return JKFieldAccessExpressionImpl(newSymbol)
|
return JKFieldAccessExpressionImpl(newSymbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ class DefaultArgumentsConversion(private val context: NewJ2kConverterContext) :
|
|||||||
if (method.hasParametersWithDefaultValues()
|
if (method.hasParametersWithDefaultValues()
|
||||||
&& (method.visibility == Visibility.PUBLIC || method.visibility == Visibility.INTERNAL)
|
&& (method.visibility == Visibility.PUBLIC || method.visibility == Visibility.INTERNAL)
|
||||||
) {
|
) {
|
||||||
method.annotationList.annotations += jvmAnnotation("JvmOverloads", context.symbolProvider)
|
method.annotationList.annotations += jvmAnnotation("JvmOverloads", symbolProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKQualifiedExpressionImpl
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
||||||
|
|
||||||
|
|
||||||
class EnumFieldAccessConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class EnumFieldAccessConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKFieldAccessExpression) return recurse(element)
|
if (element !is JKFieldAccessExpression) return recurse(element)
|
||||||
if ((element.parent as? JKQualifiedExpression)?.selector == element) return recurse(element)
|
if ((element.parent as? JKQualifiedExpression)?.selector == element) return recurse(element)
|
||||||
@@ -34,11 +34,11 @@ class EnumFieldAccessConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
private fun JKFieldSymbol.enumClassSymbol(): JKClassSymbol? =
|
private fun JKFieldSymbol.enumClassSymbol(): JKClassSymbol? =
|
||||||
when {
|
when {
|
||||||
this is JKMultiverseFieldSymbol && target is PsiEnumConstant ->
|
this is JKMultiverseFieldSymbol && target is PsiEnumConstant ->
|
||||||
context.symbolProvider.provideDirectSymbol(target.containingClass!!) as JKClassSymbol
|
symbolProvider.provideDirectSymbol(target.containingClass!!) as JKClassSymbol
|
||||||
this is JKMultiverseKtEnumEntrySymbol ->
|
this is JKMultiverseKtEnumEntrySymbol ->
|
||||||
context.symbolProvider.provideDirectSymbol(target.containingClass()!!) as JKClassSymbol
|
symbolProvider.provideDirectSymbol(target.containingClass()!!) as JKClassSymbol
|
||||||
this is JKUniverseFieldSymbol && target is JKEnumConstant ->
|
this is JKUniverseFieldSymbol && target is JKEnumConstant ->
|
||||||
context.symbolProvider.provideUniverseSymbol(target.parentOfType<JKClass>()!!)
|
symbolProvider.provideUniverseSymbol(target.parentOfType<JKClass>()!!)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.nj2k.symbols.deepestFqName
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
||||||
|
|
||||||
class EqualsOperatorConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class EqualsOperatorConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKQualifiedExpression) return recurse(element)
|
if (element !is JKQualifiedExpression) return recurse(element)
|
||||||
if (element.receiver is JKSuperExpression) return recurse(element)
|
if (element.receiver is JKSuperExpression) return recurse(element)
|
||||||
@@ -23,7 +23,7 @@ class EqualsOperatorConversion(private val context: NewJ2kConverterContext) : Re
|
|||||||
equalsExpression(
|
equalsExpression(
|
||||||
element::receiver.detached(),
|
element::receiver.detached(),
|
||||||
argument::value.detached(),
|
argument::value.detached(),
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
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.*
|
||||||
|
|
||||||
class FieldToPropertyConversion : RecursiveApplicableConversionBase() {
|
class FieldToPropertyConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaField) return recurse(element)
|
if (element !is JKJavaField) return recurse(element)
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
|
|||||||
@@ -6,11 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ImportStorage
|
import org.jetbrains.kotlin.nj2k.ImportStorage
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKImportList
|
import org.jetbrains.kotlin.nj2k.tree.JKImportList
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
|
|
||||||
class FilterImportsConversion : RecursiveApplicableConversionBase() {
|
class FilterImportsConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKImportList) return recurse(element)
|
if (element !is JKImportList) return recurse(element)
|
||||||
element.imports = element.imports.filter { import ->
|
element.imports = element.imports.filter { import ->
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
|
||||||
class ForConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ForConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
private val referenceSearcher: ReferenceSearcher
|
private val referenceSearcher: ReferenceSearcher
|
||||||
get() = context.converter.converterServices.oldServices.referenceSearcher
|
get() = context.converter.converterServices.oldServices.referenceSearcher
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
JKExpressionStatementImpl(
|
JKExpressionStatementImpl(
|
||||||
runExpression(
|
runExpression(
|
||||||
convertedFromForLoopSyntheticWhileStatement,
|
convertedFromForLoopSyntheticWhileStatement,
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
!notNeedParentBlock -> blockStatement(convertedFromForLoopSyntheticWhileStatement)
|
!notNeedParentBlock -> blockStatement(convertedFromForLoopSyntheticWhileStatement)
|
||||||
@@ -63,7 +63,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
|
|
||||||
private fun createWhileBody(loopStatement: JKJavaForLoopStatement): JKStatement {
|
private fun createWhileBody(loopStatement: JKJavaForLoopStatement): JKStatement {
|
||||||
if (loopStatement.updaters.singleOrNull() is JKEmptyStatement) return loopStatement::body.detached()
|
if (loopStatement.updaters.singleOrNull() is JKEmptyStatement) return loopStatement::body.detached()
|
||||||
val continueStatementConverter = object : RecursiveApplicableConversionBase() {
|
val continueStatementConverter = object : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKContinueStatement) return recurse(element)
|
if (element !is JKContinueStatement) return recurse(element)
|
||||||
val elementPsi = element.psi<PsiContinueStatement>()!!
|
val elementPsi = element.psi<PsiContinueStatement>()!!
|
||||||
@@ -90,7 +90,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
|
|
||||||
val statements =
|
val statements =
|
||||||
if (hasNameConflict) {
|
if (hasNameConflict) {
|
||||||
listOf(JKExpressionStatementImpl(runExpression(body, context.symbolProvider))) + loopStatement::updaters.detached()
|
listOf(JKExpressionStatementImpl(runExpression(body, symbolProvider))) + loopStatement::updaters.detached()
|
||||||
} else {
|
} else {
|
||||||
body.block::statements.detached() + loopStatement::updaters.detached()
|
body.block::statements.detached() + loopStatement::updaters.detached()
|
||||||
}
|
}
|
||||||
@@ -185,7 +185,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
start,
|
start,
|
||||||
convertBound(bound, if (inclusiveComparison) 0 else -1),
|
convertBound(bound, if (inclusiveComparison) 0 else -1),
|
||||||
JKKtSingleValueOperatorToken(KtTokens.RANGE),
|
JKKtSingleValueOperatorToken(KtTokens.RANGE),
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,7 +203,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
bound,
|
bound,
|
||||||
JKKtLiteralExpressionImpl(abs(correction).toString(), JKLiteralExpression.LiteralType.INT),
|
JKKtLiteralExpressionImpl(abs(correction).toString(), JKLiteralExpression.LiteralType.INT),
|
||||||
JKKtSingleValueOperatorToken(sign),
|
JKKtSingleValueOperatorToken(sign),
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
indices,
|
indices,
|
||||||
JKKtQualifierImpl.DOT,
|
JKKtQualifierImpl.DOT,
|
||||||
JKJavaMethodCallExpressionImpl(
|
JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.collections.reversed"),
|
symbolProvider.provideMethodSymbol("kotlin.collections.reversed"),
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -255,7 +255,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
|
|
||||||
private fun indicesByArrayLength(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
|
private fun indicesByArrayLength(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
|
||||||
val methodCall = javaSizeCall.selector as? JKFieldAccessExpression ?: return null
|
val methodCall = javaSizeCall.selector as? JKFieldAccessExpression ?: return null
|
||||||
val receiverType = javaSizeCall.receiver.type(context.symbolProvider)
|
val receiverType = javaSizeCall.receiver.type(symbolProvider)
|
||||||
if (methodCall.identifier.name == "length" && receiverType is JKJavaArrayType) {
|
if (methodCall.identifier.name == "length" && receiverType is JKJavaArrayType) {
|
||||||
return toIndicesCall(javaSizeCall)
|
return toIndicesCall(javaSizeCall)
|
||||||
}
|
}
|
||||||
@@ -265,7 +265,7 @@ class ForConversion(private val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
|
private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
|
||||||
if (javaSizeCall.psi == null) return null
|
if (javaSizeCall.psi == null) return null
|
||||||
val selector = JKFieldAccessExpressionImpl(
|
val selector = JKFieldAccessExpressionImpl(
|
||||||
context.symbolProvider.provideFieldSymbol("kotlin.collections.indices")
|
symbolProvider.provideFieldSymbol("kotlin.collections.indices")
|
||||||
)
|
)
|
||||||
return JKQualifiedExpressionImpl(javaSizeCall::receiver.detached(), javaSizeCall.operator, selector)
|
return JKQualifiedExpressionImpl(javaSizeCall::receiver.detached(), javaSizeCall.operator, selector)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol
|
import org.jetbrains.kotlin.nj2k.symbols.JKClassSymbol
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKLambdaExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKLambdaExpressionImpl
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class FunctionAsAnonymousObjectToLambdaConversion : RecursiveApplicableConversionBase() {
|
class FunctionAsAnonymousObjectToLambdaConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaNewExpression) return recurse(element)
|
if (element !is JKJavaNewExpression) return recurse(element)
|
||||||
if (element.isAnonymousClass()
|
if (element.isAnonymousClass()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
when (element) {
|
when (element) {
|
||||||
is JKVariable -> convertVariable(element)
|
is JKVariable -> convertVariable(element)
|
||||||
@@ -30,8 +30,8 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
|
|
||||||
private fun convertBinaryExpression(binaryExpression: JKBinaryExpression): JKExpression {
|
private fun convertBinaryExpression(binaryExpression: JKBinaryExpression): JKExpression {
|
||||||
fun JKBinaryExpression.convertBinaryOperationWithChar(): JKBinaryExpression {
|
fun JKBinaryExpression.convertBinaryOperationWithChar(): JKBinaryExpression {
|
||||||
val leftType = left.type(context.symbolProvider)?.asPrimitiveType() ?: return this
|
val leftType = left.type(symbolProvider)?.asPrimitiveType() ?: return this
|
||||||
val rightType = right.type(context.symbolProvider)?.asPrimitiveType() ?: return this
|
val rightType = right.type(symbolProvider)?.asPrimitiveType() ?: return this
|
||||||
|
|
||||||
val leftOperandCastedCasted by lazy {
|
val leftOperandCastedCasted by lazy {
|
||||||
JKBinaryExpressionImpl(
|
JKBinaryExpressionImpl(
|
||||||
@@ -72,7 +72,7 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun convertAssignmentStatement(statement: JKKtAssignmentStatement) {
|
private fun convertAssignmentStatement(statement: JKKtAssignmentStatement) {
|
||||||
val expressionType = statement.field.type(context.symbolProvider) ?: return
|
val expressionType = statement.field.type(symbolProvider) ?: return
|
||||||
statement.expression.castTo(expressionType)?.also {
|
statement.expression.castTo(expressionType)?.also {
|
||||||
statement.expression = it
|
statement.expression = it
|
||||||
}
|
}
|
||||||
@@ -99,13 +99,13 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
|
|
||||||
private fun JKExpression.castStringToRegex(toType: JKType): JKExpression? {
|
private fun JKExpression.castStringToRegex(toType: JKType): JKExpression? {
|
||||||
if (toType.safeAs<JKClassType>()?.classReference?.fqName != "java.util.regex.Pattern") return null
|
if (toType.safeAs<JKClassType>()?.classReference?.fqName != "java.util.regex.Pattern") return null
|
||||||
val expressionType = type(context.symbolProvider) ?: return null
|
val expressionType = type(symbolProvider) ?: return null
|
||||||
if (!expressionType.isStringType()) return null
|
if (!expressionType.isStringType()) return null
|
||||||
return JKQualifiedExpressionImpl(
|
return JKQualifiedExpressionImpl(
|
||||||
copyTreeAndDetach().parenthesizeIfBinaryExpression(),
|
copyTreeAndDetach().parenthesizeIfBinaryExpression(),
|
||||||
JKKtQualifierImpl.DOT,
|
JKKtQualifierImpl.DOT,
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.text.toRegex"),
|
symbolProvider.provideMethodSymbol("kotlin.text.toRegex"),
|
||||||
JKArgumentListImpl(),
|
JKArgumentListImpl(),
|
||||||
JKTypeArgumentListImpl()
|
JKTypeArgumentListImpl()
|
||||||
)
|
)
|
||||||
@@ -120,7 +120,7 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
val casted = expression.castToAsPrimitiveTypes(toType, strict) ?: return null
|
val casted = expression.castToAsPrimitiveTypes(toType, strict) ?: return null
|
||||||
return JKPrefixExpressionImpl(casted, operator)
|
return JKPrefixExpressionImpl(casted, operator)
|
||||||
}
|
}
|
||||||
val expressionTypeAsPrimitive = type(context.symbolProvider)?.asPrimitiveType() ?: return null
|
val expressionTypeAsPrimitive = type(symbolProvider)?.asPrimitiveType() ?: return null
|
||||||
val toTypeAsPrimitive = toType.asPrimitiveType() ?: return null
|
val toTypeAsPrimitive = toType.asPrimitiveType() ?: return null
|
||||||
if (toTypeAsPrimitive == expressionTypeAsPrimitive) return null
|
if (toTypeAsPrimitive == expressionTypeAsPrimitive) return null
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
this.copyTreeAndDetach(),
|
this.copyTreeAndDetach(),
|
||||||
JKKtQualifierImpl.DOT,
|
JKKtQualifierImpl.DOT,
|
||||||
JKJavaMethodCallExpressionImpl(
|
JKJavaMethodCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.$initialTypeName.$conversionFunctionName"),
|
symbolProvider.provideMethodSymbol("kotlin.$initialTypeName.$conversionFunctionName"),
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -155,7 +155,7 @@ class ImplicitCastsConversion(private val context: NewJ2kConverterContext) : Rec
|
|||||||
|
|
||||||
|
|
||||||
private fun JKExpression.castTo(toType: JKType, strict: Boolean = false): JKExpression? {
|
private fun JKExpression.castTo(toType: JKType, strict: Boolean = false): JKExpression? {
|
||||||
val expressionType = type(context.symbolProvider)
|
val expressionType = type(symbolProvider)
|
||||||
if (expressionType == toType) return null
|
if (expressionType == toType) return null
|
||||||
castToAsPrimitiveTypes(toType, strict)?.also { return it }
|
castToAsPrimitiveTypes(toType, strict)?.also { return it }
|
||||||
castStringToRegex(toType)?.also { return it }
|
castStringToRegex(toType)?.also { return it }
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaLiteralExpressionImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaPrimitiveTypeImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKJavaPrimitiveTypeImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKNullLiteral
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKNullLiteral
|
||||||
|
|
||||||
class ImplicitInitializerConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ImplicitInitializerConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
|
|
||||||
enum class InitializationState {
|
enum class InitializationState {
|
||||||
INITIALIZED_IN_ALL_CONSTRUCTORS,
|
INITIALIZED_IN_ALL_CONSTRUCTORS,
|
||||||
@@ -48,11 +48,11 @@ class ImplicitInitializerConversion(private val context: NewJ2kConverterContext)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun JKJavaField.initializationState(): InitializationState {
|
private fun JKJavaField.initializationState(): InitializationState {
|
||||||
val fieldSymbol = context.symbolProvider.provideUniverseSymbol(this)
|
val fieldSymbol = symbolProvider.provideUniverseSymbol(this)
|
||||||
val containingClass = parentOfType<JKClass>() ?: return InitializationState.NON_INITIALIZED
|
val containingClass = parentOfType<JKClass>() ?: return InitializationState.NON_INITIALIZED
|
||||||
val symbolToConstructor = containingClass.declarationList
|
val symbolToConstructor = containingClass.declarationList
|
||||||
.filterIsInstance<JKKtConstructor>()
|
.filterIsInstance<JKKtConstructor>()
|
||||||
.map { context.symbolProvider.provideUniverseSymbol(it) to it }
|
.map { symbolProvider.provideUniverseSymbol(it) to it }
|
||||||
.toMap()
|
.toMap()
|
||||||
|
|
||||||
fun JKMethodSymbol.parentConstructor(): JKMethodSymbol? =
|
fun JKMethodSymbol.parentConstructor(): JKMethodSymbol? =
|
||||||
@@ -61,7 +61,7 @@ class ImplicitInitializerConversion(private val context: NewJ2kConverterContext)
|
|||||||
|
|
||||||
val constructors = containingClass.declarationList
|
val constructors = containingClass.declarationList
|
||||||
.filterIsInstance<JKKtConstructor>()
|
.filterIsInstance<JKKtConstructor>()
|
||||||
.map { context.symbolProvider.provideUniverseSymbol(it) to false }
|
.map { symbolProvider.provideUniverseSymbol(it) to false }
|
||||||
.toMap()
|
.toMap()
|
||||||
.toMutableMap()
|
.toMutableMap()
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ class ImplicitInitializerConversion(private val context: NewJ2kConverterContext)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (constructor in constructorsWithInitializers) {
|
for (constructor in constructorsWithInitializers) {
|
||||||
constructors[context.symbolProvider.provideUniverseSymbol(constructor)] = true
|
constructors[symbolProvider.provideUniverseSymbol(constructor)] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
val constructorsToInitialize = mutableListOf<JKMethodSymbol>()
|
val constructorsToInitialize = mutableListOf<JKMethodSymbol>()
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.OtherModifier
|
import org.jetbrains.kotlin.nj2k.tree.OtherModifier
|
||||||
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.JKOtherModifierElementImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKOtherModifierElementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.isLocalClass
|
import org.jetbrains.kotlin.nj2k.tree.isLocalClass
|
||||||
|
|
||||||
class InnerClassConversion : RecursiveApplicableConversionBase() {
|
class InnerClassConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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)
|
||||||
return recurseArmed(element, element)
|
return recurseArmed(element, element)
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
class InsertDefaultPrimaryConstructorConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class InsertDefaultPrimaryConstructorConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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.CLASS) return recurse(element)
|
if (element.classKind != JKClass.ClassKind.CLASS) return recurse(element)
|
||||||
@@ -35,7 +35,7 @@ class InsertDefaultPrimaryConstructorConversion(private val context: NewJ2kConve
|
|||||||
|
|
||||||
if (superClassSymbol is JKUniverseClassSymbol) {
|
if (superClassSymbol is JKUniverseClassSymbol) {
|
||||||
val superClass = recurse(superClassSymbol.target)
|
val superClass = recurse(superClassSymbol.target)
|
||||||
val superConstructor = context.symbolProvider.provideUniverseSymbol(
|
val superConstructor = symbolProvider.provideUniverseSymbol(
|
||||||
superClass.declarationList.singleOrNull { it is JKKtConstructor && it.parameters.isEmpty() } as? JKMethod ?: return recurse(
|
superClass.declarationList.singleOrNull { it is JKKtConstructor && it.parameters.isEmpty() } as? JKMethod ?: return recurse(
|
||||||
element
|
element
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.getOrCreateCompanionObject
|
import org.jetbrains.kotlin.nj2k.getOrCreateCompanionObject
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
|
||||||
|
|
||||||
class InterfaceWithFieldConversion : RecursiveApplicableConversionBase() {
|
class InterfaceWithFieldConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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.INTERFACE
|
if (element.classKind != JKClass.ClassKind.INTERFACE
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.nj2k.visibility
|
import org.jetbrains.kotlin.nj2k.visibility
|
||||||
|
|
||||||
class InternalDeclarationConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class InternalDeclarationConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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>()
|
val containingClass = element.parentOfType<JKClass>()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKFieldAccessExpressionImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtLiteralExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtLiteralExpressionImpl
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class JavaAnnotationsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class JavaAnnotationsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element is JKAnnotationList) {
|
if (element is JKAnnotationList) {
|
||||||
for (annotation in element.annotations) {
|
for (annotation in element.annotations) {
|
||||||
@@ -29,14 +29,14 @@ class JavaAnnotationsConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
|
|
||||||
private fun processAnnotation(annotation: JKAnnotation) {
|
private fun processAnnotation(annotation: JKAnnotation) {
|
||||||
if (annotation.classSymbol.fqName == "java.lang.Deprecated") {
|
if (annotation.classSymbol.fqName == "java.lang.Deprecated") {
|
||||||
annotation.classSymbol = context.symbolProvider.provideClassSymbol("kotlin.Deprecated")
|
annotation.classSymbol = symbolProvider.provideClassSymbol("kotlin.Deprecated")
|
||||||
if (annotation.arguments.isEmpty()) {
|
if (annotation.arguments.isEmpty()) {
|
||||||
annotation.arguments +=
|
annotation.arguments +=
|
||||||
JKAnnotationParameterImpl(JKKtLiteralExpressionImpl("\"\"", JKLiteralExpression.LiteralType.STRING))
|
JKAnnotationParameterImpl(JKKtLiteralExpressionImpl("\"\"", JKLiteralExpression.LiteralType.STRING))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (annotation.classSymbol.fqName == "java.lang.annotation.Target") {
|
if (annotation.classSymbol.fqName == "java.lang.annotation.Target") {
|
||||||
annotation.classSymbol = context.symbolProvider.provideClassSymbol("kotlin.annotation.Target")
|
annotation.classSymbol = symbolProvider.provideClassSymbol("kotlin.annotation.Target")
|
||||||
|
|
||||||
val arguments = annotation.arguments.singleOrNull()?.let { parameter ->
|
val arguments = annotation.arguments.singleOrNull()?.let { parameter ->
|
||||||
val value = parameter.value
|
val value = parameter.value
|
||||||
@@ -51,7 +51,7 @@ class JavaAnnotationsConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
value.fieldAccessFqName()
|
value.fieldAccessFqName()
|
||||||
?.let { targetMappings[it] }
|
?.let { targetMappings[it] }
|
||||||
?.map { fqName ->
|
?.map { fqName ->
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideFieldSymbol(fqName))
|
JKFieldAccessExpressionImpl(symbolProvider.provideFieldSymbol(fqName))
|
||||||
} ?: listOf(value.copyTreeAndDetach())
|
} ?: listOf(value.copyTreeAndDetach())
|
||||||
}
|
}
|
||||||
annotation.arguments = newArguments.map { JKAnnotationParameterImpl(it) }
|
annotation.arguments = newArguments.map { JKAnnotationParameterImpl(it) }
|
||||||
|
|||||||
+3
-3
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
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
|
||||||
|
|
||||||
class JavaMethodToKotlinFunctionConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class JavaMethodToKotlinFunctionConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaMethod) return recurse(element)
|
if (element !is JKJavaMethod) return recurse(element)
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ class JavaMethodToKotlinFunctionConversion(private val context: NewJ2kConverterC
|
|||||||
it.annotations +=
|
it.annotations +=
|
||||||
throwAnnotation(
|
throwAnnotation(
|
||||||
element.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
|
element.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
|
||||||
context.symbolProvider
|
symbolProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -48,7 +48,7 @@ class JavaMethodToKotlinFunctionConversion(private val context: NewJ2kConverterC
|
|||||||
element.modalityElement
|
element.modalityElement
|
||||||
).also {
|
).also {
|
||||||
it.psi = element.psi
|
it.psi = element.psi
|
||||||
context.symbolProvider.transferSymbol(it, element)
|
symbolProvider.transferSymbol(it, element)
|
||||||
it.leftParen.takeNonCodeElementsFrom(element.leftParen)
|
it.leftParen.takeNonCodeElementsFrom(element.leftParen)
|
||||||
it.rightParen.takeNonCodeElementsFrom(element.rightParen)
|
it.rightParen.takeNonCodeElementsFrom(element.rightParen)
|
||||||
}.withNonCodeElementsFrom(element)
|
}.withNonCodeElementsFrom(element)
|
||||||
|
|||||||
@@ -10,38 +10,37 @@ import org.jetbrains.kotlin.nj2k.annotationByFqName
|
|||||||
import org.jetbrains.kotlin.nj2k.jvmAnnotation
|
import org.jetbrains.kotlin.nj2k.jvmAnnotation
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
|
||||||
class JavaModifiersConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class JavaModifiersConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element is JKModalityOwner && element is JKAnnotationListOwner) {
|
if (element is JKModalityOwner && element is JKAnnotationListOwner) {
|
||||||
val overrideAnnotation = element.annotationList.annotationByFqName("java.lang.Override")
|
val overrideAnnotation = element.annotationList.annotationByFqName("java.lang.Override")
|
||||||
if (overrideAnnotation != null) {
|
if (overrideAnnotation != null) {
|
||||||
element.annotationList.annotations -= overrideAnnotation
|
element.annotationList.annotations -= overrideAnnotation
|
||||||
//TODO change modality to OVERRIDE???
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (element is JKOtherModifiersOwner && element is JKAnnotationListOwner) {
|
if (element is JKOtherModifiersOwner && element is JKAnnotationListOwner) {
|
||||||
element.elementByModifier(OtherModifier.VOLATILE)?.also { modifierElement ->
|
element.elementByModifier(OtherModifier.VOLATILE)?.also { modifierElement ->
|
||||||
element.otherModifierElements -= modifierElement
|
element.otherModifierElements -= modifierElement
|
||||||
element.annotationList.annotations +=
|
element.annotationList.annotations +=
|
||||||
jvmAnnotation("Volatile", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
jvmAnnotation("Volatile", symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
element.elementByModifier(OtherModifier.TRANSIENT)?.also { modifierElement ->
|
element.elementByModifier(OtherModifier.TRANSIENT)?.also { modifierElement ->
|
||||||
element.otherModifierElements -= modifierElement
|
element.otherModifierElements -= modifierElement
|
||||||
element.annotationList.annotations +=
|
element.annotationList.annotations +=
|
||||||
jvmAnnotation("Transient", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
jvmAnnotation("Transient", symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
element.elementByModifier(OtherModifier.STRICTFP)?.also { modifierElement ->
|
element.elementByModifier(OtherModifier.STRICTFP)?.also { modifierElement ->
|
||||||
element.otherModifierElements -= modifierElement
|
element.otherModifierElements -= modifierElement
|
||||||
element.annotationList.annotations +=
|
element.annotationList.annotations +=
|
||||||
jvmAnnotation("Strictfp", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
jvmAnnotation("Strictfp", symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
element.elementByModifier(OtherModifier.SYNCHRONIZED)?.also { modifierElement ->
|
element.elementByModifier(OtherModifier.SYNCHRONIZED)?.also { modifierElement ->
|
||||||
element.otherModifierElements -= modifierElement
|
element.otherModifierElements -= modifierElement
|
||||||
element.annotationList.annotations +=
|
element.annotationList.annotations +=
|
||||||
jvmAnnotation("Synchronized", context.symbolProvider).withNonCodeElementsFrom(modifierElement)
|
jvmAnnotation("Synchronized", symbolProvider).withNonCodeElementsFrom(modifierElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
element.elementByModifier(OtherModifier.NATIVE)?.also { modifierElement ->
|
element.elementByModifier(OtherModifier.NATIVE)?.also { modifierElement ->
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.symbols.JKUnresolvedClassSymbol
|
|||||||
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.*
|
||||||
|
|
||||||
class JavaStandardMethodsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class JavaStandardMethodsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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)
|
||||||
for (declaration in element.classBody.declarations) {
|
for (declaration in element.classBody.declarations) {
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeElementImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeElementImpl
|
||||||
|
|
||||||
|
|
||||||
class JetbrainsNullableAnnotationsConverter(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class JetbrainsNullableAnnotationsConverter(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKAnnotationListOwner) return recurse(element)
|
if (element !is JKAnnotationListOwner) return recurse(element)
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.asStatement
|
import org.jetbrains.kotlin.nj2k.asStatement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementWithoutBracketsImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKBlockStatementWithoutBracketsImpl
|
||||||
@@ -13,7 +14,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
|
|
||||||
class LabeledStatementConversion : RecursiveApplicableConversionBase() {
|
class LabeledStatementConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKExpressionStatement) return recurse(element)
|
if (element !is JKExpressionStatement) return recurse(element)
|
||||||
val labeledStatement = element.expression as? JKLabeledStatement ?: return recurse(element)
|
val labeledStatement = element.expression as? JKLabeledStatement ?: return recurse(element)
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtLiteralExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtLiteralExpressionImpl
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
|
|
||||||
class LiteralConversion : RecursiveApplicableConversionBase() {
|
class LiteralConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaLiteralExpression) return recurse(element)
|
if (element !is JKJavaLiteralExpression) return recurse(element)
|
||||||
return element.convertLiteral()
|
return element.convertLiteral()
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeElementImpl
|
|||||||
|
|
||||||
|
|
||||||
//TODO temporary
|
//TODO temporary
|
||||||
class MainFunctionConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class MainFunctionConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKMethod) return recurse(element)
|
if (element !is JKMethod) return recurse(element)
|
||||||
if (element.isMainFunctionDeclaration()) {
|
if (element.isMainFunctionDeclaration()) {
|
||||||
@@ -30,7 +30,7 @@ class MainFunctionConversion(private val context: NewJ2kConverterContext) : Recu
|
|||||||
}
|
}
|
||||||
element.annotationList.annotations +=
|
element.annotationList.annotations +=
|
||||||
JKAnnotationImpl(
|
JKAnnotationImpl(
|
||||||
context.symbolProvider.provideClassSymbol("kotlin.jvm.JvmStatic"),
|
symbolProvider.provideClassSymbol("kotlin.jvm.JvmStatic"),
|
||||||
emptyList()
|
emptyList()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.SequentialBaseConversion
|
import org.jetbrains.kotlin.nj2k.SequentialBaseConversion
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
abstract class MatchBasedConversion : SequentialBaseConversion {
|
abstract class MatchBasedConversion(override val context: NewJ2kConverterContext) : SequentialBaseConversion {
|
||||||
|
|
||||||
fun <R : JKTreeElement, T> applyRecursive(element: R, data: T, func: (JKTreeElement, T) -> JKTreeElement): R =
|
fun <R : JKTreeElement, T> applyRecursive(element: R, data: T, func: (JKTreeElement, T) -> JKTreeElement): R =
|
||||||
org.jetbrains.kotlin.nj2k.tree.applyRecursive(element, data, ::onElementChanged, func)
|
org.jetbrains.kotlin.nj2k.tree.applyRecursive(element, data, ::onElementChanged, func)
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
|
|
||||||
class MethodReferenceToLambdaConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class MethodReferenceToLambdaConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKMethodReferenceExpression) return recurse(element)
|
if (element !is JKMethodReferenceExpression) return recurse(element)
|
||||||
val symbol = element.identifier
|
val symbol = element.identifier
|
||||||
@@ -59,7 +59,7 @@ class MethodReferenceToLambdaConversion(private val context: NewJ2kConverterCont
|
|||||||
} else emptyList()
|
} else emptyList()
|
||||||
|
|
||||||
val arguments = parameters.map { parameter ->
|
val arguments = parameters.map { parameter ->
|
||||||
val parameterSymbol = context.symbolProvider.provideUniverseSymbol(parameter)
|
val parameterSymbol = symbolProvider.provideUniverseSymbol(parameter)
|
||||||
JKArgumentImpl(JKFieldAccessExpressionImpl(parameterSymbol))
|
JKArgumentImpl(JKFieldAccessExpressionImpl(parameterSymbol))
|
||||||
}
|
}
|
||||||
val callExpression =
|
val callExpression =
|
||||||
@@ -75,7 +75,7 @@ class MethodReferenceToLambdaConversion(private val context: NewJ2kConverterCont
|
|||||||
}
|
}
|
||||||
val qualifier = when {
|
val qualifier = when {
|
||||||
receiverParameter != null ->
|
receiverParameter != null ->
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(receiverParameter))
|
JKFieldAccessExpressionImpl(symbolProvider.provideUniverseSymbol(receiverParameter))
|
||||||
element.isConstructorCall -> element.qualifier.safeAs<JKQualifiedExpression>()?.let { it::receiver.detached() }
|
element.isConstructorCall -> element.qualifier.safeAs<JKQualifiedExpression>()?.let { it::receiver.detached() }
|
||||||
else -> element::qualifier.detached().nullIfStubExpression()
|
else -> element::qualifier.detached().nullIfStubExpression()
|
||||||
}
|
}
|
||||||
@@ -111,12 +111,12 @@ class MethodReferenceToLambdaConversion(private val context: NewJ2kConverterCont
|
|||||||
.firstOrNull { !it.hasModifier(JvmModifier.STATIC) }
|
.firstOrNull { !it.hasModifier(JvmModifier.STATIC) }
|
||||||
?.parameterList
|
?.parameterList
|
||||||
?.parameters
|
?.parameters
|
||||||
?.map { it.type.toJK(context.symbolProvider).substituteTypeParameters(this) }
|
?.map { it.type.toJK(symbolProvider).substituteTypeParameters(this) }
|
||||||
is JKMultiverseKtClassSymbol -> reference.target.body
|
is JKMultiverseKtClassSymbol -> reference.target.body
|
||||||
?.functions
|
?.functions
|
||||||
?.singleOrNull()
|
?.singleOrNull()
|
||||||
?.valueParameters
|
?.valueParameters
|
||||||
?.map { it.typeReference?.toJK(context.symbolProvider)?.substituteTypeParameters(this) ?: return null }
|
?.map { it.typeReference?.toJK(symbolProvider)?.substituteTypeParameters(this) ?: return null }
|
||||||
is JKUniverseClassSymbol -> reference.target.classBody.declarations.firstIsInstanceOrNull<JKMethod>()
|
is JKUniverseClassSymbol -> reference.target.classBody.declarations.firstIsInstanceOrNull<JKMethod>()
|
||||||
?.parameters
|
?.parameters
|
||||||
?.map { it.type.type.substituteTypeParameters(this) }
|
?.map { it.type.type.substituteTypeParameters(this) }
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKOtherModifierElementImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKOtherModifierElementImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
|
|
||||||
class ModalityConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ModalityConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
when (element) {
|
when (element) {
|
||||||
is JKClass -> processClass(element)
|
is JKClass -> processClass(element)
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKClassBody
|
import org.jetbrains.kotlin.nj2k.tree.JKClassBody
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKKtInitDeclaration
|
import org.jetbrains.kotlin.nj2k.tree.JKKtInitDeclaration
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
class MoveInitBlocksToTheEndConversion : RecursiveApplicableConversionBase() {
|
class MoveInitBlocksToTheEndConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKClassBody) return recurse(element)
|
if (element !is JKClassBody) return recurse(element)
|
||||||
element.declarations = element.declarations.sortedBy {
|
element.declarations = element.declarations.sortedBy {
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
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
|
||||||
|
|
||||||
class NonCodeElementsConversion : RecursiveApplicableConversionBase() {
|
class NonCodeElementsConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
when (element) {
|
when (element) {
|
||||||
is JKClass -> {
|
is JKClass -> {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
class OperatorExpressionConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class OperatorExpressionConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKOperatorExpression) return recurse(element)
|
if (element !is JKOperatorExpression) return recurse(element)
|
||||||
val operator = element.operator as? JKJavaOperatorImpl ?: return recurse(element)
|
val operator = element.operator as? JKJavaOperatorImpl ?: return recurse(element)
|
||||||
@@ -34,7 +34,7 @@ class OperatorExpressionConversion(private val context: NewJ2kConverterContext)
|
|||||||
is JKPostfixExpression -> {
|
is JKPostfixExpression -> {
|
||||||
val operatorToken = operator.token.toKtToken()
|
val operatorToken = operator.token.toKtToken()
|
||||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||||
recurse(kotlinPostfixExpression(operand, operatorToken, context.symbolProvider))
|
recurse(kotlinPostfixExpression(operand, operatorToken, symbolProvider))
|
||||||
}
|
}
|
||||||
else -> TODO(element.javaClass.toString())
|
else -> TODO(element.javaClass.toString())
|
||||||
}.withNonCodeElementsFrom(element)
|
}.withNonCodeElementsFrom(element)
|
||||||
@@ -43,13 +43,13 @@ class OperatorExpressionConversion(private val context: NewJ2kConverterContext)
|
|||||||
|
|
||||||
private fun convertPrefixExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl) =
|
private fun convertPrefixExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl) =
|
||||||
convertTildeExpression(operand, javaOperator)
|
convertTildeExpression(operand, javaOperator)
|
||||||
?: kotlinPrefixExpression(operand, javaOperator.token.toKtToken(), context.symbolProvider)
|
?: kotlinPrefixExpression(operand, javaOperator.token.toKtToken(), symbolProvider)
|
||||||
|
|
||||||
private fun convertTildeExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl): JKExpression? =
|
private fun convertTildeExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl): JKExpression? =
|
||||||
if (javaOperator.token.psiToken == JavaTokenType.TILDE) {
|
if (javaOperator.token.psiToken == JavaTokenType.TILDE) {
|
||||||
val invCall =
|
val invCall =
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.Int.inv"),//TODO check if Long
|
symbolProvider.provideMethodSymbol("kotlin.Int.inv"),//TODO check if Long
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
)
|
)
|
||||||
JKQualifiedExpressionImpl(
|
JKQualifiedExpressionImpl(
|
||||||
@@ -61,21 +61,21 @@ class OperatorExpressionConversion(private val context: NewJ2kConverterContext)
|
|||||||
|
|
||||||
private fun convertBinaryExpression(left: JKExpression, right: JKExpression, token: JKKtOperatorToken): JKBinaryExpression =
|
private fun convertBinaryExpression(left: JKExpression, right: JKExpression, token: JKKtOperatorToken): JKBinaryExpression =
|
||||||
convertStringImplicitConcatenation(left, right, token)
|
convertStringImplicitConcatenation(left, right, token)
|
||||||
?: kotlinBinaryExpression(left, right, token, context.symbolProvider)
|
?: kotlinBinaryExpression(left, right, token, symbolProvider)
|
||||||
|
|
||||||
|
|
||||||
private fun convertStringImplicitConcatenation(left: JKExpression, right: JKExpression, token: JKKtOperatorToken): JKBinaryExpression? =
|
private fun convertStringImplicitConcatenation(left: JKExpression, right: JKExpression, token: JKKtOperatorToken): JKBinaryExpression? =
|
||||||
if (token is JKKtSingleValueOperatorToken
|
if (token is JKKtSingleValueOperatorToken
|
||||||
&& token.psiToken == KtTokens.PLUS
|
&& token.psiToken == KtTokens.PLUS
|
||||||
&& right.type(context.symbolProvider)?.isStringType() == true
|
&& right.type(symbolProvider)?.isStringType() == true
|
||||||
&& left.type(context.symbolProvider)?.isStringType() == false
|
&& left.type(symbolProvider)?.isStringType() == false
|
||||||
) {
|
) {
|
||||||
val toStringCall =
|
val toStringCall =
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.Any.toString"),
|
symbolProvider.provideMethodSymbol("kotlin.Any.toString"),
|
||||||
JKArgumentListImpl()
|
JKArgumentListImpl()
|
||||||
)
|
)
|
||||||
val qualifiedCall = JKQualifiedExpressionImpl(left, JKKtQualifierImpl.DOT, toStringCall)
|
val qualifiedCall = JKQualifiedExpressionImpl(left, JKKtQualifierImpl.DOT, toStringCall)
|
||||||
kotlinBinaryExpression(qualifiedCall, right, KtTokens.PLUS, context.symbolProvider)
|
kotlinBinaryExpression(qualifiedCall, right, KtTokens.PLUS, symbolProvider)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
+3
-3
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
class ParameterModificationInMethodCallsConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class ParameterModificationInMethodCallsConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKMethod) return recurse(element)
|
if (element !is JKMethod) return recurse(element)
|
||||||
val newVariables =
|
val newVariables =
|
||||||
@@ -21,7 +21,7 @@ class ParameterModificationInMethodCallsConversion(private val context: NewJ2kCo
|
|||||||
val parameterType =
|
val parameterType =
|
||||||
if (parameter.isVarArgs) {
|
if (parameter.isVarArgs) {
|
||||||
JKClassTypeImpl(
|
JKClassTypeImpl(
|
||||||
context.symbolProvider.provideClassSymbol(parameter.type.type.arrayFqName()),
|
symbolProvider.provideClassSymbol(parameter.type.type.arrayFqName()),
|
||||||
if (parameter.type.type is JKJavaPrimitiveType) emptyList()
|
if (parameter.type.type is JKJavaPrimitiveType) emptyList()
|
||||||
else listOf(
|
else listOf(
|
||||||
JKVarianceTypeParameterTypeImpl(
|
JKVarianceTypeParameterTypeImpl(
|
||||||
@@ -36,7 +36,7 @@ class ParameterModificationInMethodCallsConversion(private val context: NewJ2kCo
|
|||||||
JKLocalVariableImpl(
|
JKLocalVariableImpl(
|
||||||
JKTypeElementImpl(parameterType),
|
JKTypeElementImpl(parameterType),
|
||||||
JKNameIdentifierImpl(parameter.name.value),
|
JKNameIdentifierImpl(parameter.name.value),
|
||||||
JKFieldAccessExpressionImpl(context.symbolProvider.provideUniverseSymbol(parameter)),
|
JKFieldAccessExpressionImpl(symbolProvider.provideUniverseSymbol(parameter)),
|
||||||
JKMutabilityModifierElementImpl(Mutability.MUTABLE)
|
JKMutabilityModifierElementImpl(Mutability.MUTABLE)
|
||||||
)
|
)
|
||||||
} else null
|
} else null
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.parenthesizeIfBinaryExpression
|
import org.jetbrains.kotlin.nj2k.parenthesizeIfBinaryExpression
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKBinaryExpressionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKParenthesizedExpressionImpl
|
||||||
|
|
||||||
|
|
||||||
class PolyadicExpressionConversion : RecursiveApplicableConversionBase() {
|
class PolyadicExpressionConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaPolyadicExpression) return recurse(element)
|
if (element !is JKJavaPolyadicExpression) return recurse(element)
|
||||||
val needParenthesis = element.operands.any { it.containsNewLine() }
|
val needParenthesis = element.operands.any { it.containsNewLine() }
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtPrimaryConstructorImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtPrimaryConstructorImpl
|
||||||
|
|
||||||
class PrimaryConstructorDetectConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class PrimaryConstructorDetectConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element is JKClass &&
|
if (element is JKClass &&
|
||||||
(element.classKind == JKClass.ClassKind.CLASS || element.classKind == JKClass.ClassKind.ENUM)
|
(element.classKind == JKClass.ClassKind.CLASS || element.classKind == JKClass.ClassKind.ENUM)
|
||||||
@@ -54,7 +54,7 @@ class PrimaryConstructorDetectConversion(private val context: NewJ2kConverterCon
|
|||||||
primaryConstructorCandidate.modalityElement
|
primaryConstructorCandidate.modalityElement
|
||||||
).withNonCodeElementsFrom(primaryConstructorCandidate)
|
).withNonCodeElementsFrom(primaryConstructorCandidate)
|
||||||
|
|
||||||
context.symbolProvider.transferSymbol(primaryConstructor, primaryConstructorCandidate)
|
symbolProvider.transferSymbol(primaryConstructor, primaryConstructorCandidate)
|
||||||
|
|
||||||
element.classBody.declarations += primaryConstructor
|
element.classBody.declarations += primaryConstructor
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.nj2k.conversions
|
|||||||
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
|
|
||||||
abstract class RecursiveApplicableConversionBase : MatchBasedConversion() {
|
abstract class RecursiveApplicableConversionBase(context: NewJ2kConverterContext) : MatchBasedConversion(context) {
|
||||||
override fun onElementChanged(new: JKTreeElement, old: JKTreeElement) {
|
override fun onElementChanged(new: JKTreeElement, old: JKTreeElement) {
|
||||||
somethingChanged = true
|
somethingChanged = true
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -5,9 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
|
||||||
class RemoveWrongExtraModifiersForSingleFunctionsConversion : RecursiveApplicableConversionBase() {
|
class RemoveWrongExtraModifiersForSingleFunctionsConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKOtherModifiersOwner) return recurse(element)
|
if (element !is JKOtherModifiersOwner) return recurse(element)
|
||||||
if (element.parentOfType<JKClass>() == null) {
|
if (element.parentOfType<JKClass>() == null) {
|
||||||
|
|||||||
+2
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.asStatement
|
import org.jetbrains.kotlin.nj2k.asStatement
|
||||||
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
import org.jetbrains.kotlin.nj2k.copyTreeAndDetach
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
@@ -13,7 +14,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKLabeledStatementImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKNameIdentifierImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKNameIdentifierImpl
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class ReturnStatementInLambdaExpressionConversion : RecursiveApplicableConversionBase() {
|
class ReturnStatementInLambdaExpressionConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
companion object {
|
companion object {
|
||||||
const val DEFAULT_LABEL_NAME = "label"
|
const val DEFAULT_LABEL_NAME = "label"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
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.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtInitDeclarationImpl
|
||||||
|
|
||||||
class StaticInitDeclarationConversion : RecursiveApplicableConversionBase() {
|
class StaticInitDeclarationConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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)
|
||||||
val staticInitDeclarations =
|
val staticInitDeclarations =
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
|
|
||||||
class StaticMemberAccessConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class StaticMemberAccessConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
val symbol =
|
val symbol =
|
||||||
when (element) {
|
when (element) {
|
||||||
@@ -71,17 +71,17 @@ class StaticMemberAccessConversion(private val context: NewJ2kConverterContext)
|
|||||||
target.getStrictParentOfType<KtClassOrObject>()?.let { klass ->
|
target.getStrictParentOfType<KtClassOrObject>()?.let { klass ->
|
||||||
if (klass is KtObjectDeclaration && klass.isCompanion()) klass.containingClass()
|
if (klass is KtObjectDeclaration && klass.isCompanion()) klass.containingClass()
|
||||||
else klass
|
else klass
|
||||||
}?.let { context.symbolProvider.provideDirectSymbol(it) }
|
}?.let { symbolProvider.provideDirectSymbol(it) }
|
||||||
|
|
||||||
is PsiElement -> target.getContainingClass()?.let {
|
is PsiElement -> target.getContainingClass()?.let {
|
||||||
context.symbolProvider.provideDirectSymbol(it)
|
symbolProvider.provideDirectSymbol(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
is JKTreeElement ->
|
is JKTreeElement ->
|
||||||
target.parentOfType<JKClass>()?.let { klass ->
|
target.parentOfType<JKClass>()?.let { klass ->
|
||||||
if (klass.classKind == JKClass.ClassKind.COMPANION) klass.parentOfType<JKClass>()
|
if (klass.classKind == JKClass.ClassKind.COMPANION) klass.parentOfType<JKClass>()
|
||||||
else klass
|
else klass
|
||||||
}?.let { context.symbolProvider.provideUniverseSymbol(it) }
|
}?.let { symbolProvider.provideUniverseSymbol(it) }
|
||||||
else -> error("bad isStaticMember")
|
else -> error("bad isStaticMember")
|
||||||
} as JKClassSymbol?
|
} as JKClassSymbol?
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.getOrCreateCompanionObject
|
import org.jetbrains.kotlin.nj2k.getOrCreateCompanionObject
|
||||||
import org.jetbrains.kotlin.nj2k.tree.*
|
import org.jetbrains.kotlin.nj2k.tree.*
|
||||||
|
|
||||||
class StaticsToCompanionExtractConversion : RecursiveApplicableConversionBase() {
|
class StaticsToCompanionExtractConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
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
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.nj2k.tree.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
import org.jetbrains.kotlin.nj2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
class SwitchStatementConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class SwitchStatementConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaSwitchStatementImpl) return recurse(element)
|
if (element !is JKJavaSwitchStatementImpl) return recurse(element)
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
@@ -86,7 +86,7 @@ class SwitchStatementConversion(private val context: NewJ2kConverterContext) : R
|
|||||||
when (statement) {
|
when (statement) {
|
||||||
is JKBlockStatement ->
|
is JKBlockStatement ->
|
||||||
JKExpressionStatementImpl(
|
JKExpressionStatementImpl(
|
||||||
runExpression(statement, context.symbolProvider)
|
runExpression(statement, symbolProvider)
|
||||||
)
|
)
|
||||||
else -> statement
|
else -> statement
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.withNonCodeElementsFrom
|
import org.jetbrains.kotlin.nj2k.tree.withNonCodeElementsFrom
|
||||||
|
|
||||||
|
|
||||||
class SynchronizedStatementConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class SynchronizedStatementConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaSynchronizedStatement) return recurse(element)
|
if (element !is JKJavaSynchronizedStatement) return recurse(element)
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
@@ -22,7 +22,7 @@ class SynchronizedStatementConversion(private val context: NewJ2kConverterContex
|
|||||||
)
|
)
|
||||||
val synchronizedCall =
|
val synchronizedCall =
|
||||||
JKKtCallExpressionImpl(
|
JKKtCallExpressionImpl(
|
||||||
context.symbolProvider.provideMethodSymbol("kotlin.synchronized"),
|
symbolProvider.provideMethodSymbol("kotlin.synchronized"),
|
||||||
JKArgumentListImpl(
|
JKArgumentListImpl(
|
||||||
element.lockExpression,
|
element.lockExpression,
|
||||||
lambdaBody
|
lambdaBody
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKJavaThrowStatement
|
import org.jetbrains.kotlin.nj2k.tree.JKJavaThrowStatement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.detached
|
import org.jetbrains.kotlin.nj2k.tree.detached
|
||||||
@@ -12,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.JKExpressionStatementImpl
|
|||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtThrowExpressionImpl
|
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtThrowExpressionImpl
|
||||||
|
|
||||||
|
|
||||||
class ThrowStatementConversion : RecursiveApplicableConversionBase() {
|
class ThrowStatementConversion(context : NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaThrowStatement) return recurse(element)
|
if (element !is JKJavaThrowStatement) return recurse(element)
|
||||||
val throwExpression = JKKtThrowExpressionImpl(element::exception.detached())
|
val throwExpression = JKKtThrowExpressionImpl(element::exception.detached())
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.nj2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.nj2k.useExpression
|
import org.jetbrains.kotlin.nj2k.useExpression
|
||||||
|
|
||||||
|
|
||||||
class TryStatementConversion(private val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class TryStatementConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element !is JKJavaTryStatement) return recurse(element)
|
if (element !is JKJavaTryStatement) return recurse(element)
|
||||||
return if (element.resourceDeclarations.isEmpty())
|
return if (element.resourceDeclarations.isEmpty())
|
||||||
@@ -59,7 +59,7 @@ class TryStatementConversion(private val context: NewJ2kConverterContext) : Recu
|
|||||||
receiver = (variable as JKLocalVariable)::initializer.detached(),
|
receiver = (variable as JKLocalVariable)::initializer.detached(),
|
||||||
variableIdentifier = variable::name.detached(),
|
variableIdentifier = variable::name.detached(),
|
||||||
body = inner,
|
body = inner,
|
||||||
symbolProvider = context.symbolProvider
|
symbolProvider = symbolProvider
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import com.intellij.psi.PsiMethod
|
|
||||||
import com.intellij.psi.PsiVariable
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.j2k.*
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Mutability
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
import org.jetbrains.kotlin.j2k.toKotlinMutableTypesMap
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.kotlinTypeByName
|
import org.jetbrains.kotlin.nj2k.kotlinTypeByName
|
||||||
@@ -21,7 +17,7 @@ import org.jetbrains.kotlin.nj2k.symbols.JKUniverseClassSymbol
|
|||||||
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.*
|
||||||
|
|
||||||
class TypeMappingConversion(val context: NewJ2kConverterContext) : RecursiveApplicableConversionBase() {
|
class TypeMappingConversion(context: NewJ2kConverterContext) : RecursiveApplicableConversionBase(context) {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
when (element) {
|
when (element) {
|
||||||
is JKTypeElement -> {
|
is JKTypeElement -> {
|
||||||
@@ -56,7 +52,7 @@ class TypeMappingConversion(val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
JKTypeElementImpl(
|
JKTypeElementImpl(
|
||||||
kotlinTypeByName(
|
kotlinTypeByName(
|
||||||
KotlinBuiltIns.FQ_NAMES.any.toSafe().asString(),
|
KotlinBuiltIns.FQ_NAMES.any.toSafe().asString(),
|
||||||
context.symbolProvider,
|
symbolProvider,
|
||||||
Nullability.Nullable
|
Nullability.Nullable
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -86,12 +82,12 @@ class TypeMappingConversion(val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
is JKJavaVoidType ->
|
is JKJavaVoidType ->
|
||||||
kotlinTypeByName(
|
kotlinTypeByName(
|
||||||
KotlinBuiltIns.FQ_NAMES.unit.toSafe().asString(),
|
KotlinBuiltIns.FQ_NAMES.unit.toSafe().asString(),
|
||||||
context.symbolProvider,
|
symbolProvider,
|
||||||
Nullability.NotNull
|
Nullability.NotNull
|
||||||
)
|
)
|
||||||
is JKJavaArrayType ->
|
is JKJavaArrayType ->
|
||||||
JKClassTypeImpl(
|
JKClassTypeImpl(
|
||||||
context.symbolProvider.provideClassSymbol(type.arrayFqName()),
|
symbolProvider.provideClassSymbol(type.arrayFqName()),
|
||||||
if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)),
|
if (type is JKJavaPrimitiveType) emptyList() else listOf(type.mapType(typeElement)),
|
||||||
nullability
|
nullability
|
||||||
)
|
)
|
||||||
@@ -115,7 +111,7 @@ class TypeMappingConversion(val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
val newFqName = kotlinCollectionClassName()
|
val newFqName = kotlinCollectionClassName()
|
||||||
?: kotlinStandardType()
|
?: kotlinStandardType()
|
||||||
?: fqName
|
?: fqName
|
||||||
return context.symbolProvider.provideClassSymbol(newFqName)
|
return symbolProvider.provideClassSymbol(newFqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JKClassType.mapClassType(typeElement: JKTypeElement?): JKClassType =
|
private fun JKClassType.mapClassType(typeElement: JKTypeElement?): JKClassType =
|
||||||
@@ -136,7 +132,7 @@ class TypeMappingConversion(val context: NewJ2kConverterContext) : RecursiveAppl
|
|||||||
private fun JKJavaPrimitiveType.mapPrimitiveType(): JKClassType {
|
private fun JKJavaPrimitiveType.mapPrimitiveType(): JKClassType {
|
||||||
val fqName = jvmPrimitiveType.primitiveType.typeFqName
|
val fqName = jvmPrimitiveType.primitiveType.typeFqName
|
||||||
return JKClassTypeImpl(
|
return JKClassTypeImpl(
|
||||||
context.symbolProvider.provideClassSymbol(fqName),
|
symbolProvider.provideClassSymbol(fqName),
|
||||||
nullability = Nullability.NotNull
|
nullability = Nullability.NotNull
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user