New J2K: optimize imports in post-processings

This commit is contained in:
Ilya Kirillov
2019-05-30 18:53:52 +03:00
parent 269ca20950
commit c136e81427
2 changed files with 25 additions and 1 deletions
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.isNullable import org.jetbrains.kotlin.types.isNullable
import org.jetbrains.kotlin.types.typeUtil.isSignedOrUnsignedNumberType
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
@@ -250,5 +251,6 @@ private val processings: List<GeneralPostProcessing> = listOf(
}, },
RemoveForExpressionLoopParameterTypeProcessing() RemoveForExpressionLoopParameterTypeProcessing()
), ),
formatCodeProcessing formatCodeProcessing,
optimizeImportsProcessing
) )
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.nj2k.postProcessing.processings package org.jetbrains.kotlin.nj2k.postProcessing.processings
import com.intellij.codeInsight.actions.OptimizeImportsProcessor
import com.intellij.openapi.util.TextRange
import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument
@@ -13,6 +15,11 @@ import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.NullabilityAnalysisFacade
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.nullabilityByUndefinedNullabilityComment import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.nullabilityByUndefinedNullabilityComment
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.prepareTypeElementByMakingAllTypesNullableConsideringNullabilityComment import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.prepareTypeElementByMakingAllTypesNullableConsideringNullabilityComment
import org.jetbrains.kotlin.nj2k.postProcessing.postProcessing import org.jetbrains.kotlin.nj2k.postProcessing.postProcessing
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtImportList
import org.jetbrains.kotlin.psi.KtPackageDirective
import org.jetbrains.kotlin.psi.psiUtil.elementsInRange
val formatCodeProcessing = val formatCodeProcessing =
postProcessing { file, rangeMarker, _ -> postProcessing { file, rangeMarker, _ ->
@@ -46,3 +53,18 @@ val shortenReferencesProcessing =
} }
} }
val optimizeImportsProcessing =
postProcessing { file, rangeMarker, _ ->
val elements = if (rangeMarker != null) {
file.elementsInRange(TextRange(rangeMarker.startOffset, rangeMarker.endOffset))
} else file.children.asList()
val needFormat = elements.any { element ->
element is KtElement
&& element !is KtImportDirective
&& element !is KtImportList
&& element !is KtPackageDirective
}
if (needFormat) {
OptimizeImportsProcessor(file.project, file).run()
}
}