From 370f113b782013bbd9ddd524263f379f2420bae3 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 26 Jun 2019 17:50:39 +0300 Subject: [PATCH] New J2K: run add/remove modifiers post-processings only single time && do not call resolve in them for some corner cases --- .../nj2k/postProcessing/J2kPostProcessor.kt | 14 ++++++++-- .../inspectionLikePostProcessings.kt | 12 +++++--- .../processings/inspeсtionLikeProcessings.kt | 28 +++++++++---------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index aef69ceb1a3..76544cd45c5 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -133,10 +133,18 @@ private val errorsFixingDiagnosticBasedPostProcessingGroup = ) +private val addOrRemoveModifiersInspectionProcessing = + InspectionLikeProcessingGroup( + runSingleTime = true, + processings = listOf( + RemoveRedundantVisibilityModifierProcessing(), + RemoveRedundantModalityModifierProcessing(), + inspectionBasedProcessing(AddOperatorModifierInspection()) + ) + ) + private val inspectionLikePostProcessingGroup = InspectionLikeProcessingGroup( - RemoveRedundantVisibilityModifierProcessing(), - RemoveRedundantModalityModifierProcessing(), RemoveRedundantConstructorKeywordProcessing(), RemoveExplicitOpenInInterfaceProcessing(), generalInspectionBasedProcessing(ExplicitThisInspection()), @@ -174,7 +182,6 @@ private val inspectionLikePostProcessingGroup = inspectionBasedProcessing(IfThenToElvisInspection(highlightStatement = true)), inspectionBasedProcessing(SimplifyNegatedBinaryExpressionInspection()), inspectionBasedProcessing(ReplaceGetOrSetInspection()), - inspectionBasedProcessing(AddOperatorModifierInspection()), intentionBasedProcessing(ObjectLiteralToLambdaIntention()), intentionBasedProcessing(AnonymousFunctionToLambdaIntention()), intentionBasedProcessing(RemoveUnnecessaryParenthesesIntention()), @@ -226,6 +233,7 @@ private val processings: List = listOf( "Cleaning up Kotlin code", listOf( errorsFixingDiagnosticBasedPostProcessingGroup, + addOrRemoveModifiersInspectionProcessing, inspectionLikePostProcessingGroup, cleaningUpDiagnosticBasedPostProcessingGroup ) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt index de236521606..d7d2f9d86fa 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt @@ -32,11 +32,14 @@ import kotlin.reflect.KClass import kotlin.reflect.full.isSubclassOf -class InspectionLikeProcessingGroup(val inspectionLikeProcessings: List) : ProcessingGroup { +class InspectionLikeProcessingGroup( + private val runSingleTime: Boolean = false, + private val processings: List +) : ProcessingGroup { - constructor(vararg inspectionLikeProcessings: InspectionLikeProcessing) : this(inspectionLikeProcessings.toList()) + constructor(vararg processings: InspectionLikeProcessing) : this(false, processings.toList()) - private val processingsToPriorityMap = inspectionLikeProcessings.mapToIndex() + private val processingsToPriorityMap = processings.mapToIndex() fun priority(processing: InspectionLikeProcessing): Int = processingsToPriorityMap.getValue(processing) override suspend fun runProcessing(file: KtFile, rangeMarker: RangeMarker?, converterContext: NewJ2kConverterContext) { @@ -62,6 +65,7 @@ class InspectionLikeProcessingGroup(val inspectionLikeProcessings: List + processings.forEach { processing -> val action = processing.createAction(element, context.converter.settings) if (action != null) { availableActions.add( diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt index 1bb72f498f5..a4acdaa10c1 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt @@ -317,11 +317,11 @@ class RemoveRedundantConstructorKeywordProcessing : class RemoveRedundantModalityModifierProcessing : ApplicabilityBasedInspectionLikeProcessing(KtDeclaration::class) { override fun isApplicableTo(element: KtDeclaration, settings: ConverterSettings?): Boolean { - val modalityModifier = element.modalityModifier() ?: return false - val modalityModifierType = modalityModifier.node.elementType - val implicitModality = element.implicitModality() - - return modalityModifierType == implicitModality + if (element.hasModifier(KtTokens.FINAL_KEYWORD)) { + return !element.hasModifier(KtTokens.OVERRIDE_KEYWORD) + } + val modalityModifierType = element.modalityModifierType() ?: return false + return modalityModifierType == element.implicitModality() } override fun apply(element: KtDeclaration) { @@ -331,16 +331,14 @@ class RemoveRedundantModalityModifierProcessing : ApplicabilityBasedInspectionLi class RemoveRedundantVisibilityModifierProcessing : ApplicabilityBasedInspectionLikeProcessing(KtDeclaration::class) { - override fun isApplicableTo(element: KtDeclaration, settings: ConverterSettings?): Boolean { - val visibilityModifier = element.visibilityModifier() ?: return false - val implicitVisibility = element.implicitVisibility() - return when { - visibilityModifier.node.elementType == implicitVisibility -> - true - element.hasModifier(KtTokens.INTERNAL_KEYWORD) && element.containingClassOrObject?.isLocal == true -> - true - else -> false - } + override fun isApplicableTo(element: KtDeclaration, settings: ConverterSettings?) = when { + element.hasModifier(KtTokens.PUBLIC_KEYWORD) && element.hasModifier(KtTokens.OVERRIDE_KEYWORD) -> + false + element.hasModifier(KtTokens.INTERNAL_KEYWORD) && element.containingClassOrObject?.isLocal == true -> + true + element.visibilityModifierType() == element.implicitVisibility() -> + true + else -> false } override fun apply(element: KtDeclaration) {