New J2K: Fix for conversion due to changing modifier types
This commit is contained in:
committed by
Ilya Kirillov
parent
70225ac3d0
commit
b076e7e881
@@ -14,6 +14,15 @@ data class ConversionContext(
|
|||||||
val converter: NewJavaToKotlinConverter,
|
val converter: NewJavaToKotlinConverter,
|
||||||
val inConversionContext: (PsiElement) -> Boolean
|
val inConversionContext: (PsiElement) -> Boolean
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val project: Project get() = converter.project
|
val project: Project get() = converter.project
|
||||||
|
val typeFlavorCalculator = TypeFlavorCalculator(object : TypeFlavorConverterFacade {
|
||||||
|
override val referenceSearcher: ReferenceSearcher
|
||||||
|
get() = converter.converterServices.oldServices.referenceSearcher
|
||||||
|
override val javaDataFlowAnalyzerFacade: JavaDataFlowAnalyzerFacade
|
||||||
|
get() = converter.converterServices.oldServices.javaDataFlowAnalyzerFacade
|
||||||
|
override val resolverForConverter: ResolverForConverter
|
||||||
|
get() = converter.converterServices.oldServices.resolverForConverter
|
||||||
|
|
||||||
|
override fun inConversionScope(element: PsiElement): Boolean = inConversionContext(element)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
@@ -27,21 +27,20 @@ object ConversionsRunner {
|
|||||||
+JavaModifiersConversion()
|
+JavaModifiersConversion()
|
||||||
+InternalClassConversion(context)
|
+InternalClassConversion(context)
|
||||||
+ModalityConversion(context)
|
+ModalityConversion(context)
|
||||||
|
+AssignmentAsExpressionToAlsoConversion(context)
|
||||||
|
+AssignmentStatementValCreationConversion(context)
|
||||||
|
+AssignmentStatementOperatorConversion()
|
||||||
|
+AssignmentStatementSimplifyValConversion()
|
||||||
|
+AssignmentStatementSimplifyAlsoConversion()
|
||||||
+OperatorExpressionConversion(context)
|
+OperatorExpressionConversion(context)
|
||||||
+ThrowStatementConversion()
|
+ThrowStatementConversion()
|
||||||
+ArrayInitializerConversion(context)
|
+ArrayInitializerConversion(context)
|
||||||
+TryStatementConversion(context)
|
+TryStatementConversion(context)
|
||||||
+ImplicitInitializerConversion()
|
+ImplicitInitializerConversion()
|
||||||
+DefaultArgumentsConversion(context)
|
+DefaultArgumentsConversion(context)
|
||||||
+TypeMappingConversion(context)
|
|
||||||
+FieldToPropertyConversion(context)
|
+FieldToPropertyConversion(context)
|
||||||
+PrintlnConversion(context)
|
+PrintlnConversion(context)
|
||||||
+BlockToRunConversion(context)
|
+BlockToRunConversion(context)
|
||||||
+AssignmentAsExpressionToAlsoConversion(context)
|
|
||||||
+AssignmentStatementValCreationConversion(context)
|
|
||||||
+AssignmentStatementOperatorConversion()
|
|
||||||
+AssignmentStatementSimplifyValConversion()
|
|
||||||
+AssignmentStatementSimplifyAlsoConversion()
|
|
||||||
+ConstructorConversion(context)
|
+ConstructorConversion(context)
|
||||||
+PrimaryConstructorDetectConversion(context)
|
+PrimaryConstructorDetectConversion(context)
|
||||||
+InsertDefaultPrimaryConstructorConversion(context)
|
+InsertDefaultPrimaryConstructorConversion(context)
|
||||||
@@ -55,6 +54,7 @@ object ConversionsRunner {
|
|||||||
+InstanceOfConversion()
|
+InstanceOfConversion()
|
||||||
+ForConversion(context)
|
+ForConversion(context)
|
||||||
+ForInConversion()
|
+ForInConversion()
|
||||||
|
+TypeMappingConversion(context)
|
||||||
|
|
||||||
//Kotlin --> Kotlin conversions
|
//Kotlin --> Kotlin conversions
|
||||||
+InnerClassConversion()
|
+InnerClassConversion()
|
||||||
|
|||||||
@@ -431,7 +431,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
with(expressionTreeMapper) { typeElement.toJK() },
|
with(expressionTreeMapper) { typeElement.toJK() },
|
||||||
JKNameIdentifierImpl(this.name ?: TODO()),
|
JKNameIdentifierImpl(this.name ?: TODO()),
|
||||||
with(expressionTreeMapper) { initializer.toJK() },
|
with(expressionTreeMapper) { initializer.toJK() },
|
||||||
Mutability.UNKNOWN
|
if (hasModifierProperty(PsiModifier.FINAL)) Mutability.IMMUTABLE else Mutability.UNKNOWN
|
||||||
).also { i ->
|
).also { i ->
|
||||||
symbolProvider.provideUniverseSymbol(this, i)
|
symbolProvider.provideUniverseSymbol(this, i)
|
||||||
i.psi = this
|
i.psi = this
|
||||||
|
|||||||
@@ -37,10 +37,13 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
|||||||
if (loopStatement.initializer is JKEmptyStatement) return whileStatement
|
if (loopStatement.initializer is JKEmptyStatement) return whileStatement
|
||||||
//TODO check for error conflict
|
//TODO check for error conflict
|
||||||
|
|
||||||
return JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
val convertedFromForLoopSyntheticWhileStatement =
|
||||||
loopStatement::initializer.detached(),
|
JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
||||||
JKWhileStatementImpl(condition, whileBody)
|
loopStatement::initializer.detached(),
|
||||||
)
|
whileStatement
|
||||||
|
)
|
||||||
|
return if (loopStatement.parent!! is JKBlock) convertedFromForLoopSyntheticWhileStatement
|
||||||
|
else blockStatement(convertedFromForLoopSyntheticWhileStatement)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createWhileBody(loopStatement: JKJavaForLoopStatement): JKStatement {
|
private fun createWhileBody(loopStatement: JKJavaForLoopStatement): JKStatement {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.j2k
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
import org.jetbrains.kotlin.j2k.conversions.multiResolveFqName
|
import org.jetbrains.kotlin.j2k.conversions.multiResolveFqName
|
||||||
import org.jetbrains.kotlin.j2k.conversions.resolveFqName
|
import org.jetbrains.kotlin.j2k.conversions.resolveFqName
|
||||||
import org.jetbrains.kotlin.j2k.tree.*
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
@@ -14,12 +15,12 @@ import org.jetbrains.kotlin.j2k.tree.impl.*
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
|
|
||||||
fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider): JKClassType {
|
fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider, nullability: Nullability = Nullability.Nullable): JKClassType {
|
||||||
val symbol =
|
val symbol =
|
||||||
symbolProvider.provideDirectSymbol(
|
symbolProvider.provideDirectSymbol(
|
||||||
resolveFqName(ClassId.fromString(name), symbolProvider.symbolsByPsi.keys.first())!!
|
resolveFqName(ClassId.fromString(name), symbolProvider.symbolsByPsi.keys.first())!!
|
||||||
) as JKClassSymbol
|
) as JKClassSymbol
|
||||||
return JKClassTypeImpl(symbol, emptyList())
|
return JKClassTypeImpl(symbol, emptyList(), nullability)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun JKType.classSymbol(symbolProvider: JKSymbolProvider) =
|
private fun JKType.classSymbol(symbolProvider: JKSymbolProvider) =
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ class JKParameterImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
class JKBlockImpl(statements: List<JKStatement> = emptyList()) : JKBlock, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
|
||||||
|
constructor(vararg statements: JKStatement) : this(statements.toList())
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
|
||||||
|
|
||||||
override var statements by children(statements)
|
override var statements by children(statements)
|
||||||
|
|||||||
@@ -153,4 +153,7 @@ fun JKType.updateNullability(newNullability: Nullability): JKType =
|
|||||||
is JKJavaVoidType -> this
|
is JKJavaVoidType -> this
|
||||||
is JKJavaPrimitiveType -> this
|
is JKJavaPrimitiveType -> this
|
||||||
else -> TODO(this::class.toString())
|
else -> TODO(this::class.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun JKJavaMethod.returnTypeNullability(context: ConversionContext): Nullability =
|
||||||
|
context.typeFlavorCalculator.methodNullability(psi()!!)
|
||||||
Reference in New Issue
Block a user