New J2K: Fix for conversion due to changing modifier types

This commit is contained in:
Ilya Kirillov
2018-11-28 12:35:33 +03:00
committed by Ilya Kirillov
parent 70225ac3d0
commit b076e7e881
7 changed files with 32 additions and 15 deletions
@@ -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()!!)