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 inConversionContext: (PsiElement) -> Boolean
|
||||
) {
|
||||
|
||||
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()
|
||||
+InternalClassConversion(context)
|
||||
+ModalityConversion(context)
|
||||
+AssignmentAsExpressionToAlsoConversion(context)
|
||||
+AssignmentStatementValCreationConversion(context)
|
||||
+AssignmentStatementOperatorConversion()
|
||||
+AssignmentStatementSimplifyValConversion()
|
||||
+AssignmentStatementSimplifyAlsoConversion()
|
||||
+OperatorExpressionConversion(context)
|
||||
+ThrowStatementConversion()
|
||||
+ArrayInitializerConversion(context)
|
||||
+TryStatementConversion(context)
|
||||
+ImplicitInitializerConversion()
|
||||
+DefaultArgumentsConversion(context)
|
||||
+TypeMappingConversion(context)
|
||||
+FieldToPropertyConversion(context)
|
||||
+PrintlnConversion(context)
|
||||
+BlockToRunConversion(context)
|
||||
+AssignmentAsExpressionToAlsoConversion(context)
|
||||
+AssignmentStatementValCreationConversion(context)
|
||||
+AssignmentStatementOperatorConversion()
|
||||
+AssignmentStatementSimplifyValConversion()
|
||||
+AssignmentStatementSimplifyAlsoConversion()
|
||||
+ConstructorConversion(context)
|
||||
+PrimaryConstructorDetectConversion(context)
|
||||
+InsertDefaultPrimaryConstructorConversion(context)
|
||||
@@ -55,6 +54,7 @@ object ConversionsRunner {
|
||||
+InstanceOfConversion()
|
||||
+ForConversion(context)
|
||||
+ForInConversion()
|
||||
+TypeMappingConversion(context)
|
||||
|
||||
//Kotlin --> Kotlin conversions
|
||||
+InnerClassConversion()
|
||||
|
||||
@@ -431,7 +431,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
with(expressionTreeMapper) { typeElement.toJK() },
|
||||
JKNameIdentifierImpl(this.name ?: TODO()),
|
||||
with(expressionTreeMapper) { initializer.toJK() },
|
||||
Mutability.UNKNOWN
|
||||
if (hasModifierProperty(PsiModifier.FINAL)) Mutability.IMMUTABLE else Mutability.UNKNOWN
|
||||
).also { i ->
|
||||
symbolProvider.provideUniverseSymbol(this, i)
|
||||
i.psi = this
|
||||
|
||||
@@ -37,10 +37,13 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
|
||||
if (loopStatement.initializer is JKEmptyStatement) return whileStatement
|
||||
//TODO check for error conflict
|
||||
|
||||
return JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
||||
loopStatement::initializer.detached(),
|
||||
JKWhileStatementImpl(condition, whileBody)
|
||||
)
|
||||
val convertedFromForLoopSyntheticWhileStatement =
|
||||
JKKtConvertedFromForLoopSyntheticWhileStatementImpl(
|
||||
loopStatement::initializer.detached(),
|
||||
whileStatement
|
||||
)
|
||||
return if (loopStatement.parent!! is JKBlock) convertedFromForLoopSyntheticWhileStatement
|
||||
else blockStatement(convertedFromForLoopSyntheticWhileStatement)
|
||||
}
|
||||
|
||||
private fun createWhileBody(loopStatement: JKJavaForLoopStatement): JKStatement {
|
||||
|
||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.j2k
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
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.resolveFqName
|
||||
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.psi.KtNamedFunction
|
||||
|
||||
fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider): JKClassType {
|
||||
fun kotlinTypeByName(name: String, symbolProvider: JKSymbolProvider, nullability: Nullability = Nullability.Nullable): JKClassType {
|
||||
val symbol =
|
||||
symbolProvider.provideDirectSymbol(
|
||||
resolveFqName(ClassId.fromString(name), symbolProvider.symbolsByPsi.keys.first())!!
|
||||
) as JKClassSymbol
|
||||
return JKClassTypeImpl(symbol, emptyList())
|
||||
return JKClassTypeImpl(symbol, emptyList(), nullability)
|
||||
}
|
||||
|
||||
private fun JKType.classSymbol(symbolProvider: JKSymbolProvider) =
|
||||
|
||||
@@ -93,6 +93,7 @@ class JKParameterImpl(
|
||||
}
|
||||
|
||||
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 var statements by children(statements)
|
||||
|
||||
@@ -153,4 +153,7 @@ fun JKType.updateNullability(newNullability: Nullability): JKType =
|
||||
is JKJavaVoidType -> this
|
||||
is JKJavaPrimitiveType -> this
|
||||
else -> TODO(this::class.toString())
|
||||
}
|
||||
}
|
||||
|
||||
fun JKJavaMethod.returnTypeNullability(context: ConversionContext): Nullability =
|
||||
context.typeFlavorCalculator.methodNullability(psi()!!)
|
||||
Reference in New Issue
Block a user