From 1e7b1f8716704fbf6d1f801c1c579639abd59efb Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 28 Jan 2019 14:07:08 +0300 Subject: [PATCH] New J2K: Use converter settings values in post processing --- .../kotlin/idea/j2k/J2kPostProcessings.kt | 8 +++++++- .../kotlin/idea/j2k/J2kPostProcessor.kt | 11 ++++++---- .../kotlin/idea/j2k/NewJ2kPostProcessings.kt | 20 +++++++++++++++++-- .../jetbrains/kotlin/j2k/ConversionsRunner.kt | 3 +-- .../kotlin/j2k/AfterConversionPass.kt | 2 +- .../kotlin/j2k/JavaToKotlinConverter.kt | 2 +- ...tNewJavaToKotlinConverterSingleFileTest.kt | 2 +- 7 files changed, 36 insertions(+), 12 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt index 82e173dc024..f9d95740b4a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt @@ -50,6 +50,8 @@ import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix import org.jetbrains.kotlin.idea.quickfix.RemoveUselessCastFix import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.getResolutionScope +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -63,7 +65,11 @@ import org.jetbrains.kotlin.utils.mapToIndex import java.util.* interface J2kPostProcessing { - fun createAction(element: KtElement, diagnostics: Diagnostics): (() -> Unit)? + fun createAction(element: KtElement, diagnostics: Diagnostics, settings: ConverterSettings?): (() -> Unit)? = + createAction(element, diagnostics) + + fun createAction(element: KtElement, diagnostics: Diagnostics): (() -> Unit)? = + createAction(element, diagnostics, null) val writeActionNeeded: Boolean } diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt index 4790d71af75..62557808ca9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt @@ -32,6 +32,8 @@ import org.jetbrains.kotlin.idea.core.util.EDT import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.PostProcessor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtElement @@ -60,7 +62,7 @@ class J2kPostProcessor( } - override fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?) { + override fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?,settings: ConverterSettings??) { fun Processing.flattenToGroups(): List> = when (this) { is SingleProcessing -> listOf(listOf(this.processing)) @@ -80,7 +82,7 @@ class J2kPostProcessor( do { var modificationStamp: Long? = file.modificationStamp val elementToActions = runReadAction { - collectAvailableActions(processings, file, rangeMarker) + collectAvailableActions(processings, file, rangeMarker, settings) } withContext(EDT) { @@ -127,7 +129,8 @@ class J2kPostProcessor( private fun collectAvailableActions( processings: Collection, file: KtFile, - rangeMarker: RangeMarker? + rangeMarker: RangeMarker?, + settings: ConverterSettings?? ): List { val diagnostics = analyzeFileRange(file, rangeMarker) @@ -143,7 +146,7 @@ class J2kPostProcessor( if (rangeResult == RangeFilterResult.PROCESS) { processings.forEach { processing -> - val action = processing.createAction(element, diagnostics) + val action = processing.createAction(element, diagnostics, settings) if (action != null) { availableActions.add( ActionData( diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt index a7ec7fe1b26..6b67fd575db 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.idea.util.getResolutionScope +import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -105,7 +106,18 @@ object NewJ2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar { registerInspectionBasedProcessing(ReplacePutWithAssignmentInspection()), SingleProcessing(UseExpressionBodyProcessing()), registerInspectionBasedProcessing(UnnecessaryVariableInspection()), - registerGeneralInspectionBasedProcessing(RedundantExplicitTypeInspection()), + SingleProcessing( + object : J2kPostProcessing { + override val writeActionNeeded: Boolean = true + private val processing = registerGeneralInspectionBasedProcessing(RedundantExplicitTypeInspection()) + + override fun createAction(element: KtElement, diagnostics: Diagnostics, settings: ConverterSettings?): (() -> Unit)? { + if (settings?.specifyLocalVariableTypeByDefault == true) return null + + return processing.processing.createAction(element, diagnostics) + } + } + ), registerGeneralInspectionBasedProcessing(RedundantUnitReturnTypeInspection()), SingleProcessing(RemoveExplicitPropertyType()), @@ -392,10 +404,14 @@ object NewJ2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar { private class RemoveExplicitPropertyType : J2kPostProcessing { override val writeActionNeeded = true - override fun createAction(element: KtElement, diagnostics: Diagnostics): (() -> Unit)? { + override fun createAction(element: KtElement, diagnostics: Diagnostics, settings: ConverterSettings?): (() -> Unit)? { if (element !is KtProperty) return null + val needFieldTypes = settings?.specifyFieldTypeByDefault == true + val needLocalVariablesTypes = settings?.specifyLocalVariableTypeByDefault == true fun check(element: KtProperty): Boolean { + if (needLocalVariablesTypes && element.isLocal) return false + if (needFieldTypes && element.isMember) return false val initializer = element.initializer ?: return false val withoutExpectedType = initializer.analyzeInContext(initializer.getResolutionScope()) val descriptor = element.resolveToDescriptorIfAny() as? CallableDescriptor ?: return false diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index 623d118d653..7453ab396b8 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -38,7 +38,6 @@ object ConversionsRunner { +PolyadicExpressionConversion(context) +OperatorExpressionConversion(context) +ThrowStatementConversion() - +EnumClassConversion() +ArrayInitializerConversion(context) +TryStatementConversion(context) +SynchronizedStatementConversion(context) @@ -60,7 +59,7 @@ object ConversionsRunner { +LiteralConversion() +ForConversion(context) +LabeledStatementConversion() - +ForInConversion() + +ForInConversion(context) +TypeParametersNullabilityConversion() +ArrayOperationsConversion(context) +BuiltinMembersConversion(context) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/AfterConversionPass.kt b/j2k/src/org/jetbrains/kotlin/j2k/AfterConversionPass.kt index c388262b346..6bd551a656e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/AfterConversionPass.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/AfterConversionPass.kt @@ -33,6 +33,6 @@ class AfterConversionPass(val project: Project, val postProcessor: PostProcessor null } - postProcessor.doAdditionalProcessing(kotlinFile, rangeMarker) + postProcessor.doAdditionalProcessing(kotlinFile, rangeMarker, null) } } diff --git a/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt index 06e7669c08d..01791b0de37 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt @@ -39,7 +39,7 @@ import java.util.* interface PostProcessor { fun insertImport(file: KtFile, fqName: FqName) - fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?) + fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?, settings: ConverterSettings?) } enum class ParseContext { diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt index 916abde6b3a..f8a42aac9dd 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt +++ b/j2k/tests/org/jetbrains/kotlin/j2k/AbstractNewJavaToKotlinConverterSingleFileTest.kt @@ -36,7 +36,7 @@ abstract class AbstractNewJavaToKotlinConverterSingleFileTest : AbstractJavaToKo factory.createFileWithLightClassSupport("Dummy.kt", it, file) }.map { CommandProcessor.getInstance().runUndoTransparentAction { - postProcessor.doAdditionalProcessing(it, null) + postProcessor.doAdditionalProcessing(it, null, settings) } it.text }.single()