New J2K: use old J2K for evaluate expression instead of new one
#KT-32693 fixed
This commit is contained in:
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.j2k
|
|
||||||
|
|
||||||
import com.intellij.openapi.module.Module
|
|
||||||
import com.intellij.openapi.progress.ProgressIndicator
|
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import com.intellij.psi.PsiJavaFile
|
|
||||||
import org.jetbrains.kotlin.j2k.*
|
|
||||||
|
|
||||||
object JavaToKotlinConverterFactory {
|
|
||||||
fun createJavaToKotlinConverter(
|
|
||||||
project: Project,
|
|
||||||
targetModule: Module?,
|
|
||||||
settings: ConverterSettings,
|
|
||||||
services: JavaToKotlinConverterServices
|
|
||||||
): JavaToKotlinConverter =
|
|
||||||
J2kConverterExtension.extension.createJavaToKotlinConverter(project, targetModule, settings, services)
|
|
||||||
|
|
||||||
fun createPostProcessor(formatCode: Boolean): PostProcessor =
|
|
||||||
J2kConverterExtension.extension.createPostProcessor(formatCode)
|
|
||||||
|
|
||||||
fun createWithProgressIndicator(
|
|
||||||
progress: ProgressIndicator?,
|
|
||||||
files: List<PsiJavaFile>?,
|
|
||||||
phasesCount: Int
|
|
||||||
): WithProgressProcessor =
|
|
||||||
J2kConverterExtension.extension.createWithProgressProcessor(progress, files, phasesCount)
|
|
||||||
|
|
||||||
|
|
||||||
fun doCheckBeforeConversion(project: Project, module: Module): Boolean =
|
|
||||||
J2kConverterExtension.extension.doCheckBeforeConversion(project, module)
|
|
||||||
|
|
||||||
val isNewJ2k: Boolean
|
|
||||||
get() = J2kConverterExtension.extension.isNewJ2k
|
|
||||||
}
|
|
||||||
@@ -50,7 +50,6 @@ import org.jetbrains.kotlin.idea.KotlinFileType
|
|||||||
import org.jetbrains.kotlin.idea.core.util.toPsiFile
|
import org.jetbrains.kotlin.idea.core.util.toPsiFile
|
||||||
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
|
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
|
||||||
import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor
|
import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor
|
||||||
import org.jetbrains.kotlin.idea.j2k.JavaToKotlinConverterFactory
|
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.idea.util.isRunningInCidrIde
|
import org.jetbrains.kotlin.idea.util.isRunningInCidrIde
|
||||||
@@ -123,7 +122,7 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
project,
|
project,
|
||||||
ConverterSettings.defaultSettings,
|
ConverterSettings.defaultSettings,
|
||||||
IdeaJavaToKotlinServices
|
IdeaJavaToKotlinServices
|
||||||
) else JavaToKotlinConverterFactory.createJavaToKotlinConverter(
|
) else J2kConverterExtension.extension().createJavaToKotlinConverter(
|
||||||
project,
|
project,
|
||||||
module,
|
module,
|
||||||
ConverterSettings.defaultSettings,
|
ConverterSettings.defaultSettings,
|
||||||
@@ -132,7 +131,7 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
converterResult = converter.filesToKotlin(
|
converterResult = converter.filesToKotlin(
|
||||||
javaFiles,
|
javaFiles,
|
||||||
if (forceUsingOldJ2k) J2kPostProcessor(formatCode = true)
|
if (forceUsingOldJ2k) J2kPostProcessor(formatCode = true)
|
||||||
else JavaToKotlinConverterFactory.createPostProcessor(formatCode = true),
|
else J2kConverterExtension.extension().createPostProcessor(formatCode = true),
|
||||||
progress = ProgressManager.getInstance().progressIndicator!!
|
progress = ProgressManager.getInstance().progressIndicator!!
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -144,7 +143,7 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
val linesCount = javaFiles.sumBy { StringUtil.getLineBreakCount(it.text) }
|
val linesCount = javaFiles.sumBy { StringUtil.getLineBreakCount(it.text) }
|
||||||
logJ2kConversionStatistics(
|
logJ2kConversionStatistics(
|
||||||
ConversionType.FILES,
|
ConversionType.FILES,
|
||||||
JavaToKotlinConverterFactory.isNewJ2k,
|
J2kConverterExtension.isNewJ2k,
|
||||||
conversionTime,
|
conversionTime,
|
||||||
linesCount,
|
linesCount,
|
||||||
javaFiles.size
|
javaFiles.size
|
||||||
@@ -220,7 +219,7 @@ class JavaToKotlinAction : AnAction() {
|
|||||||
|
|
||||||
|
|
||||||
val module = e.getData(LangDataKeys.MODULE)!!
|
val module = e.getData(LangDataKeys.MODULE)!!
|
||||||
if (!JavaToKotlinConverterFactory.doCheckBeforeConversion(project, module)) return
|
if (!J2kConverterExtension.extension().doCheckBeforeConversion(project, module)) return
|
||||||
|
|
||||||
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
|
val firstSyntaxError = javaFiles.asSequence().map { PsiTreeUtil.findChildOfType(it, PsiErrorElement::class.java) }.firstOrNull()
|
||||||
|
|
||||||
|
|||||||
+22
-10
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.idea.core.util.range
|
|||||||
import org.jetbrains.kotlin.idea.core.util.start
|
import org.jetbrains.kotlin.idea.core.util.start
|
||||||
import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions
|
import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions
|
||||||
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
|
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
|
||||||
import org.jetbrains.kotlin.idea.j2k.JavaToKotlinConverterFactory
|
|
||||||
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
@@ -83,6 +82,8 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
|||||||
|
|
||||||
val document = editor.document
|
val document = editor.document
|
||||||
val targetFile = PsiDocumentManager.getInstance(project).getPsiFile(document) as? KtFile ?: return
|
val targetFile = PsiDocumentManager.getInstance(project).getPsiFile(document) as? KtFile ?: return
|
||||||
|
val useNewJ2k = checkUseNewJ2k(targetFile)
|
||||||
|
|
||||||
val targetModule = targetFile.module
|
val targetModule = targetFile.module
|
||||||
|
|
||||||
if (isNoConversionPosition(targetFile, bounds.startOffset)) return
|
if (isNoConversionPosition(targetFile, bounds.startOffset)) return
|
||||||
@@ -97,7 +98,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
|||||||
val dataForConversion = DataForConversion.prepare(data, project)
|
val dataForConversion = DataForConversion.prepare(data, project)
|
||||||
|
|
||||||
fun doConversion(): Result {
|
fun doConversion(): Result {
|
||||||
val result = dataForConversion.elementsAndTexts.convertCodeToKotlin(project, targetModule)
|
val result = dataForConversion.elementsAndTexts.convertCodeToKotlin(project, targetModule, useNewJ2k)
|
||||||
val referenceData = buildReferenceData(result.text, result.parseContext, dataForConversion.importsAndPackage, targetFile)
|
val referenceData = buildReferenceData(result.text, result.parseContext, dataForConversion.importsAndPackage, targetFile)
|
||||||
val text = if (result.textChanged) result.text else null
|
val text = if (result.textChanged) result.text else null
|
||||||
return Result(text, referenceData, result.importsToAdd, result.converterContext)
|
return Result(text, referenceData, result.importsToAdd, result.converterContext)
|
||||||
@@ -161,7 +162,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
|||||||
val newBounds = insertImports(boundsAfterReplace, referenceData, explicitImports)
|
val newBounds = insertImports(boundsAfterReplace, referenceData, explicitImports)
|
||||||
|
|
||||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||||
runPostProcessing(project, targetFile, newBounds, conversionResult?.converterContext)
|
runPostProcessing(project, targetFile, newBounds, conversionResult?.converterContext, useNewJ2k)
|
||||||
|
|
||||||
conversionPerformed = true
|
conversionPerformed = true
|
||||||
}
|
}
|
||||||
@@ -172,7 +173,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
|||||||
}
|
}
|
||||||
logJ2kConversionStatistics(
|
logJ2kConversionStatistics(
|
||||||
ConversionType.PSI_EXPRESSION,
|
ConversionType.PSI_EXPRESSION,
|
||||||
JavaToKotlinConverterFactory.isNewJ2k,
|
J2kConverterExtension.isNewJ2k,
|
||||||
conversionTime,
|
conversionTime,
|
||||||
dataForConversion.elementsAndTexts.linesCount(),
|
dataForConversion.elementsAndTexts.linesCount(),
|
||||||
filesCount = 1
|
filesCount = 1
|
||||||
@@ -227,9 +228,9 @@ internal class ConversionResult(
|
|||||||
val converterContext: ConverterContext?
|
val converterContext: ConverterContext?
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun ElementAndTextList.convertCodeToKotlin(project: Project, targetModule: Module?): ConversionResult {
|
internal fun ElementAndTextList.convertCodeToKotlin(project: Project, targetModule: Module?, useNewJ2k: Boolean): ConversionResult {
|
||||||
val converter =
|
val converter =
|
||||||
JavaToKotlinConverterFactory.createJavaToKotlinConverter(
|
J2kConverterExtension.extension(useNewJ2k).createJavaToKotlinConverter(
|
||||||
project,
|
project,
|
||||||
targetModule,
|
targetModule,
|
||||||
ConverterSettings.defaultSettings,
|
ConverterSettings.defaultSettings,
|
||||||
@@ -319,13 +320,24 @@ fun ElementAndTextList.linesCount() =
|
|||||||
.filterIsInstance<PsiElement>()
|
.filterIsInstance<PsiElement>()
|
||||||
.sumBy { StringUtil.getLineBreakCount(it.text) }
|
.sumBy { StringUtil.getLineBreakCount(it.text) }
|
||||||
|
|
||||||
fun runPostProcessing(project: Project, file: KtFile, bounds: TextRange?, converterContext: ConverterContext?) {
|
fun checkUseNewJ2k(targetFile: KtFile): Boolean {
|
||||||
val postProcessor = JavaToKotlinConverterFactory.createPostProcessor(formatCode = true)
|
if (targetFile is KtCodeFragment) return false
|
||||||
if (JavaToKotlinConverterFactory.isNewJ2k) {
|
return J2kConverterExtension.isNewJ2k
|
||||||
|
}
|
||||||
|
|
||||||
|
fun runPostProcessing(
|
||||||
|
project: Project,
|
||||||
|
file: KtFile,
|
||||||
|
bounds: TextRange?,
|
||||||
|
converterContext: ConverterContext?,
|
||||||
|
useNewJ2k: Boolean
|
||||||
|
) {
|
||||||
|
val postProcessor = J2kConverterExtension.extension(useNewJ2k).createPostProcessor(formatCode = true)
|
||||||
|
if (useNewJ2k) {
|
||||||
ProgressManager.getInstance().runProcessWithProgressSynchronously(
|
ProgressManager.getInstance().runProcessWithProgressSynchronously(
|
||||||
{
|
{
|
||||||
val processor =
|
val processor =
|
||||||
JavaToKotlinConverterFactory.createWithProgressIndicator(
|
J2kConverterExtension.extension(useNewJ2k).createWithProgressProcessor(
|
||||||
ProgressManager.getInstance().progressIndicator!!,
|
ProgressManager.getInstance().progressIndicator!!,
|
||||||
emptyList(),
|
emptyList(),
|
||||||
postProcessor.phasesCount
|
postProcessor.phasesCount
|
||||||
|
|||||||
+8
-7
@@ -34,7 +34,6 @@ import org.jetbrains.annotations.TestOnly
|
|||||||
import org.jetbrains.kotlin.asJava.toLightClass
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions
|
import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions
|
||||||
import org.jetbrains.kotlin.idea.j2k.JavaToKotlinConverterFactory
|
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
||||||
import org.jetbrains.kotlin.j2k.ConversionType
|
import org.jetbrains.kotlin.j2k.ConversionType
|
||||||
@@ -98,6 +97,8 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
|||||||
val psiDocumentManager = PsiDocumentManager.getInstance(project)
|
val psiDocumentManager = PsiDocumentManager.getInstance(project)
|
||||||
psiDocumentManager.commitDocument(editor.document)
|
psiDocumentManager.commitDocument(editor.document)
|
||||||
val targetFile = psiDocumentManager.getPsiFile(editor.document) as? KtFile ?: return
|
val targetFile = psiDocumentManager.getPsiFile(editor.document) as? KtFile ?: return
|
||||||
|
val useNewJ2k = checkUseNewJ2k(targetFile)
|
||||||
|
|
||||||
val targetModule = targetFile.module
|
val targetModule = targetFile.module
|
||||||
|
|
||||||
val pasteTarget = detectPasteTarget(targetFile, bounds.startOffset, bounds.endOffset) ?: return
|
val pasteTarget = detectPasteTarget(targetFile, bounds.startOffset, bounds.endOffset) ?: return
|
||||||
@@ -111,9 +112,9 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
|||||||
|
|
||||||
fun convert() {
|
fun convert() {
|
||||||
val additionalImports = dataForConversion.tryResolveImports(targetFile)
|
val additionalImports = dataForConversion.tryResolveImports(targetFile)
|
||||||
var convertedImportsText = additionalImports.convertCodeToKotlin(project, targetModule).text
|
var convertedImportsText = additionalImports.convertCodeToKotlin(project, targetModule, useNewJ2k).text
|
||||||
|
|
||||||
val convertedResult = dataForConversion.convertCodeToKotlin(project, targetModule)
|
val convertedResult = dataForConversion.convertCodeToKotlin(project, targetModule, useNewJ2k)
|
||||||
val convertedText = convertedResult.text
|
val convertedText = convertedResult.text
|
||||||
|
|
||||||
val newBounds = runWriteAction {
|
val newBounds = runWriteAction {
|
||||||
@@ -133,7 +134,7 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
|||||||
}
|
}
|
||||||
|
|
||||||
psiDocumentManager.commitAllDocuments()
|
psiDocumentManager.commitAllDocuments()
|
||||||
runPostProcessing(project, targetFile, newBounds, convertedResult.converterContext)
|
runPostProcessing(project, targetFile, newBounds, convertedResult.converterContext, useNewJ2k)
|
||||||
|
|
||||||
conversionPerformed = true
|
conversionPerformed = true
|
||||||
}
|
}
|
||||||
@@ -143,15 +144,15 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
|||||||
}
|
}
|
||||||
logJ2kConversionStatistics(
|
logJ2kConversionStatistics(
|
||||||
ConversionType.TEXT_EXPRESSION,
|
ConversionType.TEXT_EXPRESSION,
|
||||||
JavaToKotlinConverterFactory.isNewJ2k,
|
checkUseNewJ2k(targetFile),
|
||||||
conversionTime,
|
conversionTime,
|
||||||
dataForConversion.elementsAndTexts.linesCount(),
|
dataForConversion.elementsAndTexts.linesCount(),
|
||||||
filesCount = 1
|
filesCount = 1
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DataForConversion.convertCodeToKotlin(project: Project, targetModule: Module?): ConversionResult {
|
private fun DataForConversion.convertCodeToKotlin(project: Project, targetModule: Module?,useNewJ2k: Boolean): ConversionResult {
|
||||||
return elementsAndTexts.convertCodeToKotlin(project, targetModule)
|
return elementsAndTexts.convertCodeToKotlin(project, targetModule, useNewJ2k)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val KtElement.pasteContext: KotlinContext
|
private val KtElement.pasteContext: KotlinContext
|
||||||
|
|||||||
@@ -30,12 +30,13 @@ abstract class J2kConverterExtension : AbstractExtensionPointBean() {
|
|||||||
): WithProgressProcessor
|
): WithProgressProcessor
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private fun useNewJ2k() = Registry.`is`("kotlin.use.new.j2k", true)
|
val isNewJ2k
|
||||||
|
get() = Registry.`is`("kotlin.use.new.j2k", true)
|
||||||
|
|
||||||
val EP_NAME = ExtensionPointName.create<J2kConverterExtension>("org.jetbrains.kotlin.j2kConverterExtension")
|
val EP_NAME = ExtensionPointName.create<J2kConverterExtension>("org.jetbrains.kotlin.j2kConverterExtension")
|
||||||
|
|
||||||
val extension: J2kConverterExtension
|
fun extension(useNewJ2k: Boolean = isNewJ2k): J2kConverterExtension =
|
||||||
get() = EP_NAME.extensions.first { it.isNewJ2k == useNewJ2k() }
|
EP_NAME.extensions.first { it.isNewJ2k == useNewJ2k }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user