New J2K: Fix converting on copy-past
This commit is contained in:
committed by
Ilya Kirillov
parent
5ab9d6bba8
commit
31aea1e5e9
@@ -496,6 +496,7 @@ class JavaToJKTreeBuilder constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
|
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
|
||||||
|
|
||||||
fun PsiTypeParameterList.toJK(): JKTypeParameterList =
|
fun PsiTypeParameterList.toJK(): JKTypeParameterList =
|
||||||
JKTypeParameterListImpl(typeParameters.map { it.toJK() })
|
JKTypeParameterListImpl(typeParameters.map { it.toJK() })
|
||||||
.also {
|
.also {
|
||||||
@@ -705,7 +706,8 @@ class JavaToJKTreeBuilder constructor(
|
|||||||
|
|
||||||
fun PsiAnnotation.toJK(): JKAnnotation =
|
fun PsiAnnotation.toJK(): JKAnnotation =
|
||||||
JKAnnotationImpl(
|
JKAnnotationImpl(
|
||||||
symbolProvider.provideSymbol(nameReferenceElement!!),
|
symbolProvider.provideSymbol(nameReferenceElement!!).safeAs<JKClassSymbol>()
|
||||||
|
?: JKUnresolvedClassSymbol(nameReferenceElement!!.text),
|
||||||
parameterList.attributes.map { parameter ->
|
parameterList.attributes.map { parameter ->
|
||||||
if (parameter.nameIdentifier != null) {
|
if (parameter.nameIdentifier != null) {
|
||||||
JKAnnotationNameParameterImpl(
|
JKAnnotationNameParameterImpl(
|
||||||
@@ -954,7 +956,14 @@ class JavaToJKTreeBuilder constructor(
|
|||||||
fun buildTree(psi: PsiElement): JKTreeElement? =
|
fun buildTree(psi: PsiElement): JKTreeElement? =
|
||||||
when (psi) {
|
when (psi) {
|
||||||
is PsiJavaFile -> psi.toJK()
|
is PsiJavaFile -> psi.toJK()
|
||||||
else -> error("Cannot convert non-java file")
|
is PsiExpression -> with(expressionTreeMapper) { psi.toJK() }
|
||||||
|
is PsiStatement -> with(declarationMapper) { psi.toJK() }
|
||||||
|
is PsiClass -> with(declarationMapper) { psi.toJK() }
|
||||||
|
is PsiField -> with(declarationMapper) { psi.toJK() }
|
||||||
|
is PsiMethod -> with(declarationMapper) { psi.toJK() }
|
||||||
|
is PsiAnnotation -> with(declarationMapper) { psi.toJK() }
|
||||||
|
else ->
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
private val tokenCache = mutableMapOf<PsiElement, JKNonCodeElement>()
|
private val tokenCache = mutableMapOf<PsiElement, JKNonCodeElement>()
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ package org.jetbrains.kotlin.nj2k
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiExpression
|
||||||
|
import com.intellij.psi.PsiStatement
|
||||||
import org.jetbrains.kotlin.j2k.*
|
import org.jetbrains.kotlin.j2k.*
|
||||||
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.nj2k.tree.prettyDebugPrintTree
|
import org.jetbrains.kotlin.nj2k.tree.prettyDebugPrintTree
|
||||||
@@ -49,7 +51,9 @@ class NewJavaToKotlinConverter(
|
|||||||
symbolProvider.preBuildTree(inputElements)
|
symbolProvider.preBuildTree(inputElements)
|
||||||
val importStorage = ImportStorage()
|
val importStorage = ImportStorage()
|
||||||
val treeBuilder = JavaToJKTreeBuilder(symbolProvider, converterServices, importStorage)
|
val treeBuilder = JavaToJKTreeBuilder(symbolProvider, converterServices, importStorage)
|
||||||
val asts = inputElements.mapNotNull(treeBuilder::buildTree)
|
val asts = inputElements.map { element ->
|
||||||
|
element to treeBuilder.buildTree(element)
|
||||||
|
}
|
||||||
|
|
||||||
val context = ConversionContext(
|
val context = ConversionContext(
|
||||||
symbolProvider,
|
symbolProvider,
|
||||||
@@ -57,17 +61,22 @@ class NewJavaToKotlinConverter(
|
|||||||
{ it.containingFile in inputElements },
|
{ it.containingFile in inputElements },
|
||||||
importStorage
|
importStorage
|
||||||
)
|
)
|
||||||
ConversionsRunner.doApply(asts, context)
|
|
||||||
val kotlinCodes = asts.map { NewCodeBuilder().run { printCodeOut(it) } }
|
ConversionsRunner.doApply(asts.mapNotNull { it.second }, context)
|
||||||
return Result(
|
val results = asts.map { (element, ast) ->
|
||||||
kotlinCodes.map { code ->
|
if (ast == null) return@map null
|
||||||
ElementResult(
|
val code = NewCodeBuilder().run { printCodeOut(ast) }
|
||||||
code,
|
val parseContext = when (element) {
|
||||||
importsToAdd = importStorage.getImports(),
|
is PsiStatement, is PsiExpression -> ParseContext.CODE_BLOCK
|
||||||
parseContext = ParseContext.TOP_LEVEL
|
else -> ParseContext.TOP_LEVEL
|
||||||
)
|
}
|
||||||
},
|
ElementResult(
|
||||||
null
|
code,
|
||||||
)
|
importsToAdd = importStorage.getImports(),
|
||||||
|
parseContext = parseContext
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result(results, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user