diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt index 6c0d64731c9..9d669dcab41 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt @@ -118,7 +118,7 @@ public object ShortenReferences { file: JetFile, fileElements: List = Collections.singletonList(file) ): Map { - ImportInsertHelper.getInstance().optimizeImportsOnTheFly(file) + ImportInsertHelper.INSTANCE.optimizeImportsOnTheFly(file) return JetFileReferencesResolver.resolve(file, fileElements, resolveShortNames = false) } @@ -312,14 +312,14 @@ public object ShortenReferences { if (realTarget.getContainingDeclaration() is ClassDescriptor) return false // do not insert imports for nested classes optimizeImports() - ImportInsertHelper.getInstance().writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(realTarget), false), file) + ImportInsertHelper.INSTANCE.writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(realTarget), false), file) return true } fun optimizeImports(): Boolean { if (!optimizeImports) return false optimizeImports = false - return ImportInsertHelper.getInstance().optimizeImportsOnTheFly(file) + return ImportInsertHelper.INSTANCE.optimizeImportsOnTheFly(file) } } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelper.kt index 1e037de4241..2bb678f5cae 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelper.kt @@ -22,24 +22,22 @@ import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetImportDirective import org.jetbrains.kotlin.resolve.ImportPath -public abstract class ImportInsertHelper { +public trait ImportInsertHelper { - public abstract fun addImportDirectiveIfNeeded(importFqn: FqName, file: JetFile) + public fun addImportDirectiveIfNeeded(importFqn: FqName, file: JetFile) - public abstract fun optimizeImportsOnTheFly(file: JetFile): Boolean + public fun optimizeImportsOnTheFly(file: JetFile): Boolean - public abstract fun isImportedWithDefault(importPath: ImportPath, contextFile: JetFile): Boolean + public fun isImportedWithDefault(importPath: ImportPath, contextFile: JetFile): Boolean - public abstract fun needImport(fqName: FqName, file: JetFile): Boolean + public fun needImport(fqName: FqName, file: JetFile): Boolean = needImport(ImportPath(fqName, false), file) - public abstract fun needImport(importPath: ImportPath, file: JetFile): Boolean + public fun needImport(importPath: ImportPath, file: JetFile, importDirectives: List = file.getImportDirectives()): Boolean - public abstract fun needImport(importPath: ImportPath, file: JetFile, importDirectives: List): Boolean - public abstract fun writeImportToFile(importPath: ImportPath, file: JetFile) + public fun writeImportToFile(importPath: ImportPath, file: JetFile) class object { - public fun getInstance(): ImportInsertHelper { - return ServiceManager.getService(javaClass()) - } + public val INSTANCE: ImportInsertHelper + get() = ServiceManager.getService(javaClass()) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/JetAddImportAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/JetAddImportAction.kt index 477c1bea67e..9e4e5e0ded5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/JetAddImportAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/JetAddImportAction.kt @@ -115,7 +115,7 @@ public class JetAddImportAction( override fun run() { ApplicationManager.getApplication().runWriteAction { val file = element.getContainingFile() as JetFile - ImportInsertHelper.getInstance().writeImportToFile(ImportPath(selectedImport, false), file) + ImportInsertHelper.INSTANCE.writeImportToFile(ImportPath(selectedImport, false), file) } } }, QuickFixBundle.message("add.import"), null) diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt index 17ddf225c7e..8596039b838 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -223,7 +223,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor, file: JetFile) { for ((referenceExpression, fqName, shouldLengthen) in referencesToRestore) { if (!shouldLengthen) { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(fqName, file) + ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(fqName, file) } else { //TODO: try to shorten reference after (sometimes is possible), need shorten reference to support all relevant cases diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt b/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt index 80f884266a7..6d32784456d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/CompletionSorting.kt @@ -150,7 +150,7 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku val fqName = importPath.fqnPart() return when { JavaToKotlinClassMap.INSTANCE.mapPlatformClass(fqName).isNotEmpty() -> Weight.notToBeUsedInKotlin - ImportInsertHelper.getInstance().isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport + ImportInsertHelper.INSTANCE.isImportedWithDefault(importPath, file) -> Weight.kotlinDefaultImport importCache.isImportedWithPreciseImport(fqName) -> Weight.preciseImport importCache.isImportedWithAllUnderImport(fqName) -> Weight.allUnderImport importCache.hasPreciseImportFromPackage(fqName.parent()) -> Weight.hasImportFromSamePackage diff --git a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt index 1d173106f35..386807abea5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinCallableInsertHandler.kt @@ -77,7 +77,7 @@ public abstract class KotlinCallableInsertHandler : BaseDeclarationInsertHandler if (DescriptorUtils.isTopLevelDeclaration(descriptor)) { ApplicationManager.getApplication()?.runWriteAction { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file) + ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt index 26685316fcb..054092c92aa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt @@ -54,8 +54,8 @@ public class KotlinImportOptimizer() : ImportOptimizer { } if (isUseful(importPath, usedQualifiedNames) - && ImportInsertHelper.getInstance().needImport(importPath, jetFile, directivesBeforeCurrent) - && ImportInsertHelper.getInstance().needImport(importPath, jetFile, directivesAfterCurrent) + && ImportInsertHelper.INSTANCE.needImport(importPath, jetFile, directivesBeforeCurrent) + && ImportInsertHelper.INSTANCE.needImport(importPath, jetFile, directivesAfterCurrent) ) { directivesBeforeCurrent.add(anImport) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelperImpl.kt index eed57a435ae..16e672a7bf5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportInsertHelperImpl.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM -public class ImportInsertHelperImpl : ImportInsertHelper() { +public class ImportInsertHelperImpl : ImportInsertHelper { /** * Add import directive into the PSI tree for the given package. * @@ -57,7 +57,7 @@ public class ImportInsertHelperImpl : ImportInsertHelper() { val psiFactory = JetPsiFactory(file.getProject()) if (file is JetCodeFragment) { val newDirective = psiFactory.createImportDirective(importPath) - (file as JetCodeFragment).addImportsFromString(newDirective.getText()) + file.addImportsFromString(newDirective.getText()) return } @@ -102,7 +102,6 @@ public class ImportInsertHelperImpl : ImportInsertHelper() { } override fun isImportedWithDefault(importPath: ImportPath, contextFile: JetFile): Boolean { - val defaultImports = if (ProjectStructureUtil.isJsKotlinModule(contextFile)) TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS else @@ -110,14 +109,6 @@ public class ImportInsertHelperImpl : ImportInsertHelper() { return importPath.isImported(defaultImports) } - override fun needImport(fqName: FqName, file: JetFile): Boolean { - return needImport(ImportPath(fqName, false), file) - } - - override fun needImport(importPath: ImportPath, file: JetFile): Boolean { - return needImport(importPath, file, file.getImportDirectives()) - } - override fun needImport(importPath: ImportPath, file: JetFile, importDirectives: List): Boolean { if (isImportedByDefault(importPath, file)) { return false diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index e5b1185f2b5..034b634f54c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -212,7 +212,7 @@ fun postProcessMoveUsages(usages: List, is MoveRenameUsageInfoForExtension -> { val element = counterpart(usage.getReferencedElement()!!) val file = with(usage) { if (addImportToOriginalFile) originalFile else counterpart(originalFile) } as JetFile - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(element.getKotlinFqName()!!, file) + ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(element.getKotlinFqName()!!, file) } is MoveRenameUsageInfo -> { diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt index 7da926fed5f..26365bc2d69 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/AbstractEditorForEvaluateExpressionTest.kt @@ -50,7 +50,7 @@ public abstract class AbstractCodeFragmentHighlightingTest : AbstractJetPsiCheck ApplicationManager.getApplication()?.runWriteAction { val fileText = FileUtil.loadFile(File(filePath), true) InTextDirectivesUtils.findListWithPrefixes(fileText, "// IMPORT: ").forEach { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(FqName(it), (myFixture.getFile() as JetFile)) + ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(FqName(it), (myFixture.getFile() as JetFile)) } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsOnFlyTest.java b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsOnFlyTest.java index 34ea55fa88c..b0df46e9e4a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsOnFlyTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsOnFlyTest.java @@ -33,7 +33,7 @@ public class OptimizeImportsOnFlyTest extends LightDaemonAnalyzerTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(new FqName("java.util.HashSet"), (JetFile) getFile()); + ImportInsertHelper.OBJECT$.getINSTANCE().addImportDirectiveIfNeeded(new FqName("java.util.HashSet"), (JetFile) getFile()); } }); } diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/ImportClassHelperTest.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/ImportClassHelperTest.java index 8337bd3540a..8b3f0ae98c4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/ImportClassHelperTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/ImportClassHelperTest.java @@ -46,7 +46,7 @@ public class ImportClassHelperTest extends LightDaemonAnalyzerTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(new FqName("java.util.ArrayList"), (JetFile) getFile()); + ImportInsertHelper.OBJECT$.getINSTANCE().addImportDirectiveIfNeeded(new FqName("java.util.ArrayList"), (JetFile) getFile()); } }); @@ -58,7 +58,7 @@ public class ImportClassHelperTest extends LightDaemonAnalyzerTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(new FqName("java.util.ArrayList"), (JetFile) getFile()); + ImportInsertHelper.OBJECT$.getINSTANCE().addImportDirectiveIfNeeded(new FqName("java.util.ArrayList"), (JetFile) getFile()); } }); @@ -70,7 +70,7 @@ public class ImportClassHelperTest extends LightDaemonAnalyzerTestCase { ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(new FqName(importString), (JetFile) getFile()); + ImportInsertHelper.OBJECT$.getINSTANCE().addImportDirectiveIfNeeded(new FqName(importString), (JetFile) getFile()); } }); checkResultByFile(getTestName(false) + ".kt.after");