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.j2k.IdeaJavaToKotlinServices
|
||||
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.runReadAction
|
||||
import org.jetbrains.kotlin.idea.util.isRunningInCidrIde
|
||||
@@ -123,7 +122,7 @@ class JavaToKotlinAction : AnAction() {
|
||||
project,
|
||||
ConverterSettings.defaultSettings,
|
||||
IdeaJavaToKotlinServices
|
||||
) else JavaToKotlinConverterFactory.createJavaToKotlinConverter(
|
||||
) else J2kConverterExtension.extension().createJavaToKotlinConverter(
|
||||
project,
|
||||
module,
|
||||
ConverterSettings.defaultSettings,
|
||||
@@ -132,7 +131,7 @@ class JavaToKotlinAction : AnAction() {
|
||||
converterResult = converter.filesToKotlin(
|
||||
javaFiles,
|
||||
if (forceUsingOldJ2k) J2kPostProcessor(formatCode = true)
|
||||
else JavaToKotlinConverterFactory.createPostProcessor(formatCode = true),
|
||||
else J2kConverterExtension.extension().createPostProcessor(formatCode = true),
|
||||
progress = ProgressManager.getInstance().progressIndicator!!
|
||||
)
|
||||
}
|
||||
@@ -144,7 +143,7 @@ class JavaToKotlinAction : AnAction() {
|
||||
val linesCount = javaFiles.sumBy { StringUtil.getLineBreakCount(it.text) }
|
||||
logJ2kConversionStatistics(
|
||||
ConversionType.FILES,
|
||||
JavaToKotlinConverterFactory.isNewJ2k,
|
||||
J2kConverterExtension.isNewJ2k,
|
||||
conversionTime,
|
||||
linesCount,
|
||||
javaFiles.size
|
||||
@@ -220,7 +219,7 @@ class JavaToKotlinAction : AnAction() {
|
||||
|
||||
|
||||
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()
|
||||
|
||||
|
||||
+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.editor.KotlinEditorOptions
|
||||
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.application.runReadAction
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
@@ -83,6 +82,8 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
||||
|
||||
val document = editor.document
|
||||
val targetFile = PsiDocumentManager.getInstance(project).getPsiFile(document) as? KtFile ?: return
|
||||
val useNewJ2k = checkUseNewJ2k(targetFile)
|
||||
|
||||
val targetModule = targetFile.module
|
||||
|
||||
if (isNoConversionPosition(targetFile, bounds.startOffset)) return
|
||||
@@ -97,7 +98,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
||||
val dataForConversion = DataForConversion.prepare(data, project)
|
||||
|
||||
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 text = if (result.textChanged) result.text else null
|
||||
return Result(text, referenceData, result.importsToAdd, result.converterContext)
|
||||
@@ -161,7 +162,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
||||
val newBounds = insertImports(boundsAfterReplace, referenceData, explicitImports)
|
||||
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
runPostProcessing(project, targetFile, newBounds, conversionResult?.converterContext)
|
||||
runPostProcessing(project, targetFile, newBounds, conversionResult?.converterContext, useNewJ2k)
|
||||
|
||||
conversionPerformed = true
|
||||
}
|
||||
@@ -172,7 +173,7 @@ class ConvertJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransferab
|
||||
}
|
||||
logJ2kConversionStatistics(
|
||||
ConversionType.PSI_EXPRESSION,
|
||||
JavaToKotlinConverterFactory.isNewJ2k,
|
||||
J2kConverterExtension.isNewJ2k,
|
||||
conversionTime,
|
||||
dataForConversion.elementsAndTexts.linesCount(),
|
||||
filesCount = 1
|
||||
@@ -227,9 +228,9 @@ internal class ConversionResult(
|
||||
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 =
|
||||
JavaToKotlinConverterFactory.createJavaToKotlinConverter(
|
||||
J2kConverterExtension.extension(useNewJ2k).createJavaToKotlinConverter(
|
||||
project,
|
||||
targetModule,
|
||||
ConverterSettings.defaultSettings,
|
||||
@@ -319,13 +320,24 @@ fun ElementAndTextList.linesCount() =
|
||||
.filterIsInstance<PsiElement>()
|
||||
.sumBy { StringUtil.getLineBreakCount(it.text) }
|
||||
|
||||
fun runPostProcessing(project: Project, file: KtFile, bounds: TextRange?, converterContext: ConverterContext?) {
|
||||
val postProcessor = JavaToKotlinConverterFactory.createPostProcessor(formatCode = true)
|
||||
if (JavaToKotlinConverterFactory.isNewJ2k) {
|
||||
fun checkUseNewJ2k(targetFile: KtFile): Boolean {
|
||||
if (targetFile is KtCodeFragment) return false
|
||||
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(
|
||||
{
|
||||
val processor =
|
||||
JavaToKotlinConverterFactory.createWithProgressIndicator(
|
||||
J2kConverterExtension.extension(useNewJ2k).createWithProgressProcessor(
|
||||
ProgressManager.getInstance().progressIndicator!!,
|
||||
emptyList(),
|
||||
postProcessor.phasesCount
|
||||
|
||||
+8
-7
@@ -34,7 +34,6 @@ import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
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.projectStructure.module
|
||||
import org.jetbrains.kotlin.j2k.ConversionType
|
||||
@@ -98,6 +97,8 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
||||
val psiDocumentManager = PsiDocumentManager.getInstance(project)
|
||||
psiDocumentManager.commitDocument(editor.document)
|
||||
val targetFile = psiDocumentManager.getPsiFile(editor.document) as? KtFile ?: return
|
||||
val useNewJ2k = checkUseNewJ2k(targetFile)
|
||||
|
||||
val targetModule = targetFile.module
|
||||
|
||||
val pasteTarget = detectPasteTarget(targetFile, bounds.startOffset, bounds.endOffset) ?: return
|
||||
@@ -111,9 +112,9 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
||||
|
||||
fun convert() {
|
||||
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 newBounds = runWriteAction {
|
||||
@@ -133,7 +134,7 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
||||
}
|
||||
|
||||
psiDocumentManager.commitAllDocuments()
|
||||
runPostProcessing(project, targetFile, newBounds, convertedResult.converterContext)
|
||||
runPostProcessing(project, targetFile, newBounds, convertedResult.converterContext, useNewJ2k)
|
||||
|
||||
conversionPerformed = true
|
||||
}
|
||||
@@ -143,15 +144,15 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor<TextBlockTransf
|
||||
}
|
||||
logJ2kConversionStatistics(
|
||||
ConversionType.TEXT_EXPRESSION,
|
||||
JavaToKotlinConverterFactory.isNewJ2k,
|
||||
checkUseNewJ2k(targetFile),
|
||||
conversionTime,
|
||||
dataForConversion.elementsAndTexts.linesCount(),
|
||||
filesCount = 1
|
||||
)
|
||||
}
|
||||
|
||||
private fun DataForConversion.convertCodeToKotlin(project: Project, targetModule: Module?): ConversionResult {
|
||||
return elementsAndTexts.convertCodeToKotlin(project, targetModule)
|
||||
private fun DataForConversion.convertCodeToKotlin(project: Project, targetModule: Module?,useNewJ2k: Boolean): ConversionResult {
|
||||
return elementsAndTexts.convertCodeToKotlin(project, targetModule, useNewJ2k)
|
||||
}
|
||||
|
||||
private val KtElement.pasteContext: KotlinContext
|
||||
|
||||
@@ -30,12 +30,13 @@ abstract class J2kConverterExtension : AbstractExtensionPointBean() {
|
||||
): WithProgressProcessor
|
||||
|
||||
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 extension: J2kConverterExtension
|
||||
get() = EP_NAME.extensions.first { it.isNewJ2k == useNewJ2k() }
|
||||
fun extension(useNewJ2k: Boolean = isNewJ2k): J2kConverterExtension =
|
||||
EP_NAME.extensions.first { it.isNewJ2k == useNewJ2k }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user