Minor refactoring after conversion

This commit is contained in:
Valentin Kipyatkov
2015-01-21 21:00:11 +03:00
parent f6df6eaeea
commit 975b67ed29
12 changed files with 27 additions and 38 deletions
@@ -118,7 +118,7 @@ public object ShortenReferences {
file: JetFile, file: JetFile,
fileElements: List<JetElement> = Collections.singletonList(file) fileElements: List<JetElement> = Collections.singletonList(file)
): Map<JetReferenceExpression, BindingContext> { ): Map<JetReferenceExpression, BindingContext> {
ImportInsertHelper.getInstance().optimizeImportsOnTheFly(file) ImportInsertHelper.INSTANCE.optimizeImportsOnTheFly(file)
return JetFileReferencesResolver.resolve(file, fileElements, resolveShortNames = false) 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 if (realTarget.getContainingDeclaration() is ClassDescriptor) return false // do not insert imports for nested classes
optimizeImports() optimizeImports()
ImportInsertHelper.getInstance().writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(realTarget), false), file) ImportInsertHelper.INSTANCE.writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(realTarget), false), file)
return true return true
} }
fun optimizeImports(): Boolean { fun optimizeImports(): Boolean {
if (!optimizeImports) return false if (!optimizeImports) return false
optimizeImports = false optimizeImports = false
return ImportInsertHelper.getInstance().optimizeImportsOnTheFly(file) return ImportInsertHelper.INSTANCE.optimizeImportsOnTheFly(file)
} }
} }
} }
@@ -22,24 +22,22 @@ import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.JetImportDirective import org.jetbrains.kotlin.psi.JetImportDirective
import org.jetbrains.kotlin.resolve.ImportPath 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<JetImportDirective> = file.getImportDirectives()): Boolean
public abstract fun needImport(importPath: ImportPath, file: JetFile, importDirectives: List<JetImportDirective>): Boolean public fun writeImportToFile(importPath: ImportPath, file: JetFile)
public abstract fun writeImportToFile(importPath: ImportPath, file: JetFile)
class object { class object {
public fun getInstance(): ImportInsertHelper { public val INSTANCE: ImportInsertHelper
return ServiceManager.getService<ImportInsertHelper>(javaClass<ImportInsertHelper>()) get() = ServiceManager.getService<ImportInsertHelper>(javaClass<ImportInsertHelper>())
}
} }
} }
@@ -115,7 +115,7 @@ public class JetAddImportAction(
override fun run() { override fun run() {
ApplicationManager.getApplication().runWriteAction { ApplicationManager.getApplication().runWriteAction {
val file = element.getContainingFile() as JetFile 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) }, QuickFixBundle.message("add.import"), null)
@@ -223,7 +223,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Refere
return Collections.emptyList() return Collections.emptyList()
} }
return referenceData.map { return referenceData.map {
if (ImportInsertHelper.getInstance().needImport(it.fqName, file)) { if (ImportInsertHelper.INSTANCE.needImport(it.fqName, file)) {
val referenceExpression = findReference(it, file, bounds) val referenceExpression = findReference(it, file, bounds)
if (referenceExpression != null) createReferenceToRestoreData(referenceExpression, it.fqName) else null if (referenceExpression != null) createReferenceToRestoreData(referenceExpression, it.fqName) else null
} }
@@ -287,7 +287,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Refere
private fun restoreReferences(referencesToRestore: Collection<ReferenceToRestoreData>, file: JetFile) { private fun restoreReferences(referencesToRestore: Collection<ReferenceToRestoreData>, file: JetFile) {
for ((referenceExpression, fqName, shouldLengthen) in referencesToRestore) { for ((referenceExpression, fqName, shouldLengthen) in referencesToRestore) {
if (!shouldLengthen) { if (!shouldLengthen) {
ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(fqName, file) ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(fqName, file)
} }
else { else {
//TODO: try to shorten reference after (sometimes is possible), need shorten reference to support all relevant cases //TODO: try to shorten reference after (sometimes is possible), need shorten reference to support all relevant cases
@@ -150,7 +150,7 @@ private class JetDeclarationRemotenessWeigher(private val file: JetFile) : Looku
val fqName = importPath.fqnPart() val fqName = importPath.fqnPart()
return when { return when {
JavaToKotlinClassMap.INSTANCE.mapPlatformClass(fqName).isNotEmpty() -> Weight.notToBeUsedInKotlin 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.isImportedWithPreciseImport(fqName) -> Weight.preciseImport
importCache.isImportedWithAllUnderImport(fqName) -> Weight.allUnderImport importCache.isImportedWithAllUnderImport(fqName) -> Weight.allUnderImport
importCache.hasPreciseImportFromPackage(fqName.parent()) -> Weight.hasImportFromSamePackage importCache.hasPreciseImportFromPackage(fqName.parent()) -> Weight.hasImportFromSamePackage
@@ -77,7 +77,7 @@ public abstract class KotlinCallableInsertHandler : BaseDeclarationInsertHandler
if (DescriptorUtils.isTopLevelDeclaration(descriptor)) { if (DescriptorUtils.isTopLevelDeclaration(descriptor)) {
ApplicationManager.getApplication()?.runWriteAction { ApplicationManager.getApplication()?.runWriteAction {
ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file) ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file)
} }
} }
} }
@@ -54,8 +54,8 @@ public class KotlinImportOptimizer() : ImportOptimizer {
} }
if (isUseful(importPath, usedQualifiedNames) if (isUseful(importPath, usedQualifiedNames)
&& ImportInsertHelper.getInstance().needImport(importPath, jetFile, directivesBeforeCurrent) && ImportInsertHelper.INSTANCE.needImport(importPath, jetFile, directivesBeforeCurrent)
&& ImportInsertHelper.getInstance().needImport(importPath, jetFile, directivesAfterCurrent) && ImportInsertHelper.INSTANCE.needImport(importPath, jetFile, directivesAfterCurrent)
) { ) {
directivesBeforeCurrent.add(anImport) directivesBeforeCurrent.add(anImport)
} }
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM 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. * Add import directive into the PSI tree for the given package.
* *
@@ -57,7 +57,7 @@ public class ImportInsertHelperImpl : ImportInsertHelper() {
val psiFactory = JetPsiFactory(file.getProject()) val psiFactory = JetPsiFactory(file.getProject())
if (file is JetCodeFragment) { if (file is JetCodeFragment) {
val newDirective = psiFactory.createImportDirective(importPath) val newDirective = psiFactory.createImportDirective(importPath)
(file as JetCodeFragment).addImportsFromString(newDirective.getText()) file.addImportsFromString(newDirective.getText())
return return
} }
@@ -102,7 +102,6 @@ public class ImportInsertHelperImpl : ImportInsertHelper() {
} }
override fun isImportedWithDefault(importPath: ImportPath, contextFile: JetFile): Boolean { override fun isImportedWithDefault(importPath: ImportPath, contextFile: JetFile): Boolean {
val defaultImports = if (ProjectStructureUtil.isJsKotlinModule(contextFile)) val defaultImports = if (ProjectStructureUtil.isJsKotlinModule(contextFile))
TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS TopDownAnalyzerFacadeForJS.DEFAULT_IMPORTS
else else
@@ -110,14 +109,6 @@ public class ImportInsertHelperImpl : ImportInsertHelper() {
return importPath.isImported(defaultImports) 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<JetImportDirective>): Boolean { override fun needImport(importPath: ImportPath, file: JetFile, importDirectives: List<JetImportDirective>): Boolean {
if (isImportedByDefault(importPath, file)) { if (isImportedByDefault(importPath, file)) {
return false return false
@@ -212,7 +212,7 @@ fun postProcessMoveUsages(usages: List<UsageInfo>,
is MoveRenameUsageInfoForExtension -> { is MoveRenameUsageInfoForExtension -> {
val element = counterpart(usage.getReferencedElement()!!) val element = counterpart(usage.getReferencedElement()!!)
val file = with(usage) { if (addImportToOriginalFile) originalFile else counterpart(originalFile) } as JetFile 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 -> { is MoveRenameUsageInfo -> {
@@ -50,7 +50,7 @@ public abstract class AbstractCodeFragmentHighlightingTest : AbstractJetPsiCheck
ApplicationManager.getApplication()?.runWriteAction { ApplicationManager.getApplication()?.runWriteAction {
val fileText = FileUtil.loadFile(File(filePath), true) val fileText = FileUtil.loadFile(File(filePath), true)
InTextDirectivesUtils.findListWithPrefixes(fileText, "// IMPORT: ").forEach { InTextDirectivesUtils.findListWithPrefixes(fileText, "// IMPORT: ").forEach {
ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(FqName(it), (myFixture.getFile() as JetFile)) ImportInsertHelper.INSTANCE.addImportDirectiveIfNeeded(FqName(it), (myFixture.getFile() as JetFile))
} }
} }
@@ -33,7 +33,7 @@ public class OptimizeImportsOnFlyTest extends LightDaemonAnalyzerTestCase {
ApplicationManager.getApplication().runWriteAction(new Runnable() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { public void run() {
ImportInsertHelper.getInstance().addImportDirectiveIfNeeded(new FqName("java.util.HashSet"), (JetFile) getFile()); ImportInsertHelper.OBJECT$.getINSTANCE().addImportDirectiveIfNeeded(new FqName("java.util.HashSet"), (JetFile) getFile());
} }
}); });
} }
@@ -46,7 +46,7 @@ public class ImportClassHelperTest extends LightDaemonAnalyzerTestCase {
ApplicationManager.getApplication().runWriteAction(new Runnable() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { 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() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { 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() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { 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"); checkResultByFile(getTestName(false) + ".kt.after");