New J2K: Use converter settings values in post processing

This commit is contained in:
Ilya Kirillov
2019-01-28 14:07:08 +03:00
committed by Ilya Kirillov
parent f9a08ad770
commit 1e7b1f8716
7 changed files with 36 additions and 12 deletions
@@ -50,6 +50,8 @@ import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix
import org.jetbrains.kotlin.idea.quickfix.RemoveUselessCastFix import org.jetbrains.kotlin.idea.quickfix.RemoveUselessCastFix
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.util.getResolutionScope 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.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.*
@@ -63,7 +65,11 @@ import org.jetbrains.kotlin.utils.mapToIndex
import java.util.* import java.util.*
interface J2kPostProcessing { 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 val writeActionNeeded: Boolean
} }
@@ -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.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
import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.ConverterSettings
import org.jetbrains.kotlin.j2k.PostProcessor import org.jetbrains.kotlin.j2k.PostProcessor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtElement 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<List<J2kPostProcessing>> = fun Processing.flattenToGroups(): List<List<J2kPostProcessing>> =
when (this) { when (this) {
is SingleProcessing -> listOf(listOf(this.processing)) is SingleProcessing -> listOf(listOf(this.processing))
@@ -80,7 +82,7 @@ class J2kPostProcessor(
do { do {
var modificationStamp: Long? = file.modificationStamp var modificationStamp: Long? = file.modificationStamp
val elementToActions = runReadAction { val elementToActions = runReadAction {
collectAvailableActions(processings, file, rangeMarker) collectAvailableActions(processings, file, rangeMarker, settings)
} }
withContext(EDT) { withContext(EDT) {
@@ -127,7 +129,8 @@ class J2kPostProcessor(
private fun collectAvailableActions( private fun collectAvailableActions(
processings: Collection<J2kPostProcessing>, processings: Collection<J2kPostProcessing>,
file: KtFile, file: KtFile,
rangeMarker: RangeMarker? rangeMarker: RangeMarker?,
settings: ConverterSettings??
): List<ActionData> { ): List<ActionData> {
val diagnostics = analyzeFileRange(file, rangeMarker) val diagnostics = analyzeFileRange(file, rangeMarker)
@@ -143,7 +146,7 @@ class J2kPostProcessor(
if (rangeResult == RangeFilterResult.PROCESS) { if (rangeResult == RangeFilterResult.PROCESS) {
processings.forEach { processing -> processings.forEach { processing ->
val action = processing.createAction(element, diagnostics) val action = processing.createAction(element, diagnostics, settings)
if (action != null) { if (action != null) {
availableActions.add( availableActions.add(
ActionData( ActionData(
@@ -52,6 +52,7 @@ import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.idea.references.readWriteAccess
import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.j2k.ConverterSettings
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.*
@@ -105,7 +106,18 @@ object NewJ2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar {
registerInspectionBasedProcessing(ReplacePutWithAssignmentInspection()), registerInspectionBasedProcessing(ReplacePutWithAssignmentInspection()),
SingleProcessing(UseExpressionBodyProcessing()), SingleProcessing(UseExpressionBodyProcessing()),
registerInspectionBasedProcessing(UnnecessaryVariableInspection()), 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()), registerGeneralInspectionBasedProcessing(RedundantUnitReturnTypeInspection()),
SingleProcessing(RemoveExplicitPropertyType()), SingleProcessing(RemoveExplicitPropertyType()),
@@ -392,10 +404,14 @@ object NewJ2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar {
private class RemoveExplicitPropertyType : J2kPostProcessing { private class RemoveExplicitPropertyType : J2kPostProcessing {
override val writeActionNeeded = true 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 if (element !is KtProperty) return null
val needFieldTypes = settings?.specifyFieldTypeByDefault == true
val needLocalVariablesTypes = settings?.specifyLocalVariableTypeByDefault == true
fun check(element: KtProperty): Boolean { fun check(element: KtProperty): Boolean {
if (needLocalVariablesTypes && element.isLocal) return false
if (needFieldTypes && element.isMember) return false
val initializer = element.initializer ?: return false val initializer = element.initializer ?: return false
val withoutExpectedType = initializer.analyzeInContext(initializer.getResolutionScope()) val withoutExpectedType = initializer.analyzeInContext(initializer.getResolutionScope())
val descriptor = element.resolveToDescriptorIfAny() as? CallableDescriptor ?: return false val descriptor = element.resolveToDescriptorIfAny() as? CallableDescriptor ?: return false
@@ -38,7 +38,6 @@ object ConversionsRunner {
+PolyadicExpressionConversion(context) +PolyadicExpressionConversion(context)
+OperatorExpressionConversion(context) +OperatorExpressionConversion(context)
+ThrowStatementConversion() +ThrowStatementConversion()
+EnumClassConversion()
+ArrayInitializerConversion(context) +ArrayInitializerConversion(context)
+TryStatementConversion(context) +TryStatementConversion(context)
+SynchronizedStatementConversion(context) +SynchronizedStatementConversion(context)
@@ -60,7 +59,7 @@ object ConversionsRunner {
+LiteralConversion() +LiteralConversion()
+ForConversion(context) +ForConversion(context)
+LabeledStatementConversion() +LabeledStatementConversion()
+ForInConversion() +ForInConversion(context)
+TypeParametersNullabilityConversion() +TypeParametersNullabilityConversion()
+ArrayOperationsConversion(context) +ArrayOperationsConversion(context)
+BuiltinMembersConversion(context) +BuiltinMembersConversion(context)
@@ -33,6 +33,6 @@ class AfterConversionPass(val project: Project, val postProcessor: PostProcessor
null null
} }
postProcessor.doAdditionalProcessing(kotlinFile, rangeMarker) postProcessor.doAdditionalProcessing(kotlinFile, rangeMarker, null)
} }
} }
@@ -39,7 +39,7 @@ import java.util.*
interface PostProcessor { interface PostProcessor {
fun insertImport(file: KtFile, fqName: FqName) fun insertImport(file: KtFile, fqName: FqName)
fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?) fun doAdditionalProcessing(file: KtFile, rangeMarker: RangeMarker?, settings: ConverterSettings?)
} }
enum class ParseContext { enum class ParseContext {
@@ -36,7 +36,7 @@ abstract class AbstractNewJavaToKotlinConverterSingleFileTest : AbstractJavaToKo
factory.createFileWithLightClassSupport("Dummy.kt", it, file) factory.createFileWithLightClassSupport("Dummy.kt", it, file)
}.map { }.map {
CommandProcessor.getInstance().runUndoTransparentAction { CommandProcessor.getInstance().runUndoTransparentAction {
postProcessor.doAdditionalProcessing(it, null) postProcessor.doAdditionalProcessing(it, null, settings)
} }
it.text it.text
}.single() }.single()