New J2K: Use converter settings values in post processing
This commit is contained in:
committed by
Ilya Kirillov
parent
f9a08ad770
commit
1e7b1f8716
@@ -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 {
|
||||||
|
|||||||
+1
-1
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user