From 934425e86a57fad576404b35be7ce85dd4ed9ee8 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 27 Jun 2019 11:43:46 +0300 Subject: [PATCH] New J2K: rearrange and optimize some post-processings --- .../nj2k/postProcessing/J2kPostProcessor.kt | 36 +++++++++++++----- .../inspectionLikePostProcessings.kt | 37 ++++++++++++------- .../processings/inspeсtionLikeProcessings.kt | 4 +- .../postProcessing/processings/processings.kt | 1 - .../objectArrayWithLength.kt | 2 +- .../arrayType/arrayInitializationStatement.kt | 2 +- ...rayInitializationStatementWithDimension.kt | 2 +- ...yInitializationStatementWithDimension3d.kt | 2 +- .../newJ2k/arrayType/d2StringEmptyArray.kt | 2 +- .../newJ2k/arrayType/d3StringEmptyArray.kt | 2 +- .../newJ2k/classExpression/complexExample.kt | 2 +- .../newJ2k/detectProperties/PropertyType.kt | 2 +- .../newJ2k/function/java8MRSamConstructor.kt | 6 +-- nj2k/testData/newJ2k/issues/kt-19336.kt | 2 +- nj2k/testData/newJ2k/issues/kt-19604.kt | 2 +- nj2k/testData/newJ2k/issues/kt-19606.kt | 2 +- nj2k/testData/newJ2k/issues/kt-8170.kt | 4 +- nj2k/testData/newJ2k/list/ForEach.kt | 2 +- nj2k/testData/newJ2k/list/Lists.kt | 2 +- .../collectionsMethods.kt | 4 +- .../collectionsMethods2.kt | 4 +- .../testData/newJ2k/rawGenerics/kt-540-map.kt | 2 +- .../newJ2k/typeParameters/needTypeArgs.kt | 4 +- 23 files changed, 77 insertions(+), 51 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 76544cd45c5..39e370f54ae 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,25 +133,44 @@ private val errorsFixingDiagnosticBasedPostProcessingGroup = ) -private val addOrRemoveModifiersInspectionProcessing = +private val addOrRemoveModifiersProcessingGroup = InspectionLikeProcessingGroup( runSingleTime = true, processings = listOf( RemoveRedundantVisibilityModifierProcessing(), RemoveRedundantModalityModifierProcessing(), - inspectionBasedProcessing(AddOperatorModifierInspection()) + inspectionBasedProcessing(AddOperatorModifierInspection()), + generalInspectionBasedProcessing(RedundantUnitReturnTypeInspection()) ) ) +private val removeRedundantElementsProcessingGroup = + InspectionLikeProcessingGroup( + runSingleTime = true, + processings = listOf( + RemoveExplicitTypeArgumentsProcessing(), + generalInspectionBasedProcessing(RedundantCompanionReferenceInspection()), + generalInspectionBasedProcessing(ExplicitThisInspection()), + intentionBasedProcessing(RemoveEmptyClassBodyIntention()) + ) + ) + +private val removeRedundantSemicolonProcessing = + InspectionLikeProcessingGroup( + runSingleTime = true, + acceptNonKtElements = true, + processings = listOf( + generalInspectionBasedProcessing(RedundantSemicolonInspection()) + ) + ) + + private val inspectionLikePostProcessingGroup = InspectionLikeProcessingGroup( RemoveRedundantConstructorKeywordProcessing(), RemoveExplicitOpenInInterfaceProcessing(), - generalInspectionBasedProcessing(ExplicitThisInspection()), - RemoveExplicitTypeArgumentsProcessing(), RemoveRedundantOverrideVisibilityProcessing(), inspectionBasedProcessing(MoveLambdaOutsideParenthesesInspection()), - generalInspectionBasedProcessing(RedundantCompanionReferenceInspection()), ConvertToStringTemplateProcessing(), UsePropertyAccessSyntaxProcessing(), UninitializedVariableReferenceFromInitializerToThisReferenceProcessing(), @@ -162,14 +181,11 @@ private val inspectionLikePostProcessingGroup = UseExpressionBodyProcessing(), inspectionBasedProcessing(UnnecessaryVariableInspection()), RemoveExplicitPropertyTypeWithInspectionProcessing(), - generalInspectionBasedProcessing(RedundantUnitReturnTypeInspection()), JavaObjectEqualsToEqOperatorProcessing(), RemoveExplicitPropertyTypeProcessing(), RemoveRedundantNullabilityProcessing(), generalInspectionBasedProcessing(CanBeValInspection(ignoreNotUsedVals = false)), inspectionBasedProcessing(FoldInitializerAndIfToElvisInspection()), - generalInspectionBasedProcessing(RedundantSemicolonInspection()), - intentionBasedProcessing(RemoveEmptyClassBodyIntention()), intentionBasedProcessing(RemoveRedundantCallsOfConversionMethodsIntention()), inspectionBasedProcessing(JavaMapForEachInspection()), intentionBasedProcessing(FoldIfToReturnIntention()) { it.then.isTrivialStatementBody() && it.`else`.isTrivialStatementBody() }, @@ -233,8 +249,10 @@ private val processings: List = listOf( "Cleaning up Kotlin code", listOf( errorsFixingDiagnosticBasedPostProcessingGroup, - addOrRemoveModifiersInspectionProcessing, + addOrRemoveModifiersProcessingGroup, inspectionLikePostProcessingGroup, + removeRedundantSemicolonProcessing, + removeRedundantElementsProcessingGroup, 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 d7d2f9d86fa..2d3d4694942 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 @@ -23,7 +23,9 @@ import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext +import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtVisitorVoid import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.utils.mapToIndex @@ -34,10 +36,15 @@ import kotlin.reflect.full.isSubclassOf class InspectionLikeProcessingGroup( private val runSingleTime: Boolean = false, + private val acceptNonKtElements: Boolean = false, private val processings: List ) : ProcessingGroup { - constructor(vararg processings: InspectionLikeProcessing) : this(false, processings.toList()) + constructor(vararg processings: InspectionLikeProcessing) : this( + runSingleTime = false, + acceptNonKtElements = false, + processings = processings.toList() + ) private val processingsToPriorityMap = processings.mapToIndex() fun priority(processing: InspectionLikeProcessing): Int = processingsToPriorityMap.getValue(processing) @@ -88,22 +95,24 @@ class InspectionLikeProcessingGroup( file.accept(object : PsiRecursiveElementVisitor() { override fun visitElement(element: PsiElement) { - val rangeResult = rangeFilter(element, rangeMarker) - if (rangeResult == RangeFilterResult.SKIP) return + if (element is KtElement || acceptNonKtElements) { + val rangeResult = rangeFilter(element, rangeMarker) + if (rangeResult == RangeFilterResult.SKIP) return - super.visitElement(element) + super.visitElement(element) - if (rangeResult == RangeFilterResult.PROCESS) { - processings.forEach { processing -> - val action = processing.createAction(element, context.converter.settings) - if (action != null) { - availableActions.add( - ActionData( - element, action, - priority(processing), - processing.writeActionNeeded + if (rangeResult == RangeFilterResult.PROCESS) { + processings.forEach { processing -> + val action = processing.createAction(element, context.converter.settings) + if (action != null) { + availableActions.add( + ActionData( + element, action, + priority(processing), + processing.writeActionNeeded + ) ) - ) + } } } } 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 a4acdaa10c1..30913599ad6 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 @@ -199,12 +199,12 @@ class UninitializedVariableReferenceFromInitializerToThisReferenceProcessing : override val writeActionNeeded = true override fun createAction(element: PsiElement, settings: ConverterSettings?): (() -> Unit)? { - if (element !is KtSimpleNameExpression || element.mainReference.resolve() == null) return null + if (element !is KtSimpleNameExpression) return null + val anonymousObject = element.getParentOfType(true)?.takeIf { it.name == null } ?: return null val resolved = element.mainReference.resolve() ?: return null if (resolved.isAncestor(element, strict = true)) { if (resolved is KtVariableDeclaration && resolved.hasInitializer()) { - val anonymousObject = element.getParentOfType(true) ?: return null if (resolved.initializer!!.getChildOfType() == anonymousObject) { return { element.replaced(KtPsiFactory(element).createThisExpression()) } } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt index f3c6536e5d5..c7f46b37ad2 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.psi.psiUtil.elementsInRange val formatCodeProcessing = postProcessing { file, rangeMarker, _ -> - file.commitAndUnblockDocument() val codeStyleManager = CodeStyleManager.getInstance(file.project) if (rangeMarker != null) { if (rangeMarker.isValid) { diff --git a/nj2k/testData/newJ2k/arrayInitializerExpression/objectArrayWithLength.kt b/nj2k/testData/newJ2k/arrayInitializerExpression/objectArrayWithLength.kt index cddd5166a6a..91ced175767 100644 --- a/nj2k/testData/newJ2k/arrayInitializerExpression/objectArrayWithLength.kt +++ b/nj2k/testData/newJ2k/arrayInitializerExpression/objectArrayWithLength.kt @@ -1 +1 @@ -val a: Array = arrayOfNulls(10) \ No newline at end of file +val a = arrayOfNulls(10) \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatement.kt b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatement.kt index f3d373d93a6..743ee76b4ad 100644 --- a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatement.kt +++ b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatement.kt @@ -1 +1 @@ -val d2: Array = arrayOf() \ No newline at end of file +val d2 = arrayOf() \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension.kt b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension.kt index 4a3f34f4de2..1462d0c46d1 100644 --- a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension.kt +++ b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension.kt @@ -1 +1 @@ -val d2: Array = arrayOfNulls(5) \ No newline at end of file +val d2 = arrayOfNulls(5) \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.kt b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.kt index 33b7baeb2f6..c92369fb13f 100644 --- a/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.kt +++ b/nj2k/testData/newJ2k/arrayType/arrayInitializationStatementWithDimension3d.kt @@ -1 +1 @@ -val d3: Array> = Array(5) { arrayOfNulls(5) } \ No newline at end of file +val d3 = Array>(5) { arrayOfNulls(5) } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/d2StringEmptyArray.kt b/nj2k/testData/newJ2k/arrayType/d2StringEmptyArray.kt index 85c3f5b072e..0db72939b6b 100644 --- a/nj2k/testData/newJ2k/arrayType/d2StringEmptyArray.kt +++ b/nj2k/testData/newJ2k/arrayType/d2StringEmptyArray.kt @@ -1 +1 @@ -val ss: Array> = Array(5) { arrayOfNulls(5) } \ No newline at end of file +val ss = Array>(5) { arrayOfNulls(5) } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/arrayType/d3StringEmptyArray.kt b/nj2k/testData/newJ2k/arrayType/d3StringEmptyArray.kt index 5f994cdd840..14d4dd69cf5 100644 --- a/nj2k/testData/newJ2k/arrayType/d3StringEmptyArray.kt +++ b/nj2k/testData/newJ2k/arrayType/d3StringEmptyArray.kt @@ -1 +1 @@ -val sss: Array>> = Array(5) { Array(5) { arrayOfNulls(5) } } \ No newline at end of file +val sss = Array(5) { Array>(5) { arrayOfNulls(5) } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/classExpression/complexExample.kt b/nj2k/testData/newJ2k/classExpression/complexExample.kt index a556e00ed2e..8e23438a627 100644 --- a/nj2k/testData/newJ2k/classExpression/complexExample.kt +++ b/nj2k/testData/newJ2k/classExpression/complexExample.kt @@ -1 +1 @@ -val constrArgTypes: Array> = arrayOf(Array::class.java, String::class.java, Int::class.java, Double::class.java) \ No newline at end of file +val constrArgTypes = arrayOf>(Array::class.java, String::class.java, Int::class.java, Double::class.java) \ No newline at end of file diff --git a/nj2k/testData/newJ2k/detectProperties/PropertyType.kt b/nj2k/testData/newJ2k/detectProperties/PropertyType.kt index 1de4e56507e..e3a6c8aa904 100644 --- a/nj2k/testData/newJ2k/detectProperties/PropertyType.kt +++ b/nj2k/testData/newJ2k/detectProperties/PropertyType.kt @@ -1,7 +1,7 @@ import java.util.ArrayList internal class A { - private val list1: ArrayList = ArrayList() + private val list1 = ArrayList() private val list2: MutableList = ArrayList() private val myList3: MutableList = ArrayList() fun getList1(): List { diff --git a/nj2k/testData/newJ2k/function/java8MRSamConstructor.kt b/nj2k/testData/newJ2k/function/java8MRSamConstructor.kt index 68abd6dbe44..51a6a774508 100644 --- a/nj2k/testData/newJ2k/function/java8MRSamConstructor.kt +++ b/nj2k/testData/newJ2k/function/java8MRSamConstructor.kt @@ -122,10 +122,10 @@ internal class Java8Class { } fun testGenericFunctions() { - val emptyList: JFunction1> = JFunction1 { emptyList() } + val emptyList = JFunction1> { emptyList() } emptyList.foo() - MethodReferenceHelperClass.staticFun1(JFunction1> { emptyList() }) - h.memberFun1(JFunction1> { emptyList() }) + MethodReferenceHelperClass.staticFun1> { emptyList() } + h.memberFun1> { emptyList() } } fun memberFun(): Int { diff --git a/nj2k/testData/newJ2k/issues/kt-19336.kt b/nj2k/testData/newJ2k/issues/kt-19336.kt index d925672751a..1c30926646e 100644 --- a/nj2k/testData/newJ2k/issues/kt-19336.kt +++ b/nj2k/testData/newJ2k/issues/kt-19336.kt @@ -1,6 +1,6 @@ class TestReturnsArray { fun strings(n: Int): Array { - val result: Array = arrayOfNulls(n) + val result = arrayOfNulls(n) for (i in 0 until n) { result[i] = Integer.toString(i) } diff --git a/nj2k/testData/newJ2k/issues/kt-19604.kt b/nj2k/testData/newJ2k/issues/kt-19604.kt index 8bb404a858c..0408a4bab8c 100644 --- a/nj2k/testData/newJ2k/issues/kt-19604.kt +++ b/nj2k/testData/newJ2k/issues/kt-19604.kt @@ -1,7 +1,7 @@ import java.util.HashMap class TestMethodReference { - private val hashMap: HashMap = HashMap() + private val hashMap = HashMap() fun update(key: String, msg: String) { hashMap.merge(key, msg) { obj: String, s: String -> obj + s } } diff --git a/nj2k/testData/newJ2k/issues/kt-19606.kt b/nj2k/testData/newJ2k/issues/kt-19606.kt index 8bb404a858c..0408a4bab8c 100644 --- a/nj2k/testData/newJ2k/issues/kt-19606.kt +++ b/nj2k/testData/newJ2k/issues/kt-19606.kt @@ -1,7 +1,7 @@ import java.util.HashMap class TestMethodReference { - private val hashMap: HashMap = HashMap() + private val hashMap = HashMap() fun update(key: String, msg: String) { hashMap.merge(key, msg) { obj: String, s: String -> obj + s } } diff --git a/nj2k/testData/newJ2k/issues/kt-8170.kt b/nj2k/testData/newJ2k/issues/kt-8170.kt index a567409121e..1aff1e6334e 100644 --- a/nj2k/testData/newJ2k/issues/kt-8170.kt +++ b/nj2k/testData/newJ2k/issues/kt-8170.kt @@ -2,12 +2,12 @@ object ArrayNullable { @JvmStatic fun main(args: Array) { val notNull = 0 - val a1: Array = arrayOfNulls(2) + val a1 = arrayOfNulls(2) a1[0] = null a1[1] = notNull println(a1[0]) println(a1[1]) - val a2: Array = arrayOfNulls(2) + val a2 = arrayOfNulls(2) a2[0] = nullable() a2[1] = notNull println(a2[0]) diff --git a/nj2k/testData/newJ2k/list/ForEach.kt b/nj2k/testData/newJ2k/list/ForEach.kt index 52a3dc5b286..f5f440b62f8 100644 --- a/nj2k/testData/newJ2k/list/ForEach.kt +++ b/nj2k/testData/newJ2k/list/ForEach.kt @@ -3,7 +3,7 @@ import java.util.ArrayList class ForEach { fun test() { - val xs: ArrayList = ArrayList() + val xs = ArrayList() val ys: MutableList = LinkedList() for (x in xs) { ys.add(x) diff --git a/nj2k/testData/newJ2k/list/Lists.kt b/nj2k/testData/newJ2k/list/Lists.kt index d2149e07f7f..d11b79c3f35 100644 --- a/nj2k/testData/newJ2k/list/Lists.kt +++ b/nj2k/testData/newJ2k/list/Lists.kt @@ -5,7 +5,7 @@ class Lists { fun test() { val xs: MutableList = ArrayList() val ys: MutableList = LinkedList() - val zs: ArrayList = ArrayList() + val zs = ArrayList() xs.add(null) ys.add(null) xs.clear() diff --git a/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods.kt b/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods.kt index 4c831a10bf1..40f0a56117c 100644 --- a/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods.kt +++ b/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods.kt @@ -1,8 +1,8 @@ internal class A { fun foo(): Map { - val list1: List = emptyList() + val list1 = emptyList() val list2 = listOf(1) - val set1: Set = emptySet() + val set1 = emptySet() val set2 = setOf("a") return emptyMap() } diff --git a/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods2.kt b/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods2.kt index e22979d3554..3dcf79fb740 100644 --- a/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods2.kt +++ b/nj2k/testData/newJ2k/methodCallExpression/collectionsMethods2.kt @@ -1,6 +1,6 @@ internal class A { fun foo() { - val list: List = listOf(null) - val set: Set = setOf(null) + val list = listOf(null) + val set = setOf(null) } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt b/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt index 5a56eda21e6..b10a19ddbf4 100644 --- a/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt +++ b/nj2k/testData/newJ2k/rawGenerics/kt-540-map.kt @@ -4,7 +4,7 @@ import java.util.HashMap internal class Test { fun main() { - val commonMap: HashMap = HashMap() + val commonMap = HashMap() val rawMap: HashMap<*, *> = HashMap() val superRawMap: HashMap<*, *> = HashMap() } diff --git a/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt b/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt index 3ba80b88166..5c722d7f1dc 100644 --- a/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt +++ b/nj2k/testData/newJ2k/typeParameters/needTypeArgs.kt @@ -2,7 +2,7 @@ import java.util.HashMap internal class A { fun foo() { - val map1: Map = getMap1() + val map1 = getMap1() val map2 = getMap2("a", 1) } @@ -11,7 +11,7 @@ internal class A { } fun getMap2(k: K, v: V): Map { - val map: HashMap = HashMap() + val map = HashMap() map[k] = v return map }