CodeFragments: do not add imports from context file

This commit is contained in:
Natalia Ukhorskaya
2015-10-09 14:33:32 +03:00
parent e9b138557b
commit 391af972d7
3 changed files with 36 additions and 32 deletions
@@ -27,7 +27,7 @@ import com.intellij.testFramework.LightVirtualFile
import org.jetbrains.kotlin.idea.JetFileType import org.jetbrains.kotlin.idea.JetFileType
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.utils.addToStdlib.check import org.jetbrains.kotlin.utils.addToStdlib.check
import java.util.LinkedHashSet import java.util.*
public abstract class JetCodeFragment( public abstract class JetCodeFragment(
private val _project: Project, private val _project: Project,
@@ -48,7 +48,7 @@ public abstract class JetCodeFragment(
getViewProvider().forceCachedPsi(this) getViewProvider().forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType) init(TokenType.CODE_FRAGMENT, elementType)
if (context != null) { if (context != null) {
initImports(context, imports) initImports(imports)
} }
} }
@@ -123,20 +123,7 @@ public abstract class JetCodeFragment(
return true return true
} }
private fun initImports(context: PsiElement, imports: String?) { private fun initImports(imports: String?) {
val containingFile = context.getContainingFile()
if (containingFile !is JetFile) return
val importListForContextElement = containingFile.getImportList()
if (importListForContextElement != null) {
myImports.addAll(importListForContextElement.getImports().map { it.getText() })
}
val packageName = containingFile.getPackageDirective()?.getFqName()?.asString()
if (packageName != null && packageName.isNotEmpty()) {
myImports.add("import $packageName.*")
}
if (imports != null && !imports.isEmpty()) { if (imports != null && !imports.isEmpty()) {
myImports.addAll(imports.split(IMPORT_SEPARATOR).map { it.check { it.startsWith("import ") } ?: "import $it" }) myImports.addAll(imports.split(IMPORT_SEPARATOR).map { it.check { it.startsWith("import ") } ?: "import $it" })
} }
@@ -470,10 +470,18 @@ private val packageInternalName = PackageClassUtils.getPackageClassInternalName(
private fun createFileForDebugger(codeFragment: JetCodeFragment, private fun createFileForDebugger(codeFragment: JetCodeFragment,
extractedFunction: JetNamedFunction extractedFunction: JetNamedFunction
): JetFile { ): JetFile {
var fileText = template.replace("!IMPORT_LIST!", val containingContextFile = (codeFragment.context as? JetElement)?.getContainingJetFile()
codeFragment.importsToString() val importsFromContextFile = containingContextFile?.importList?.let { it.text + "\n" } ?: ""
.split(JetCodeFragment.IMPORT_SEPARATOR) val packageFromContextFile = containingContextFile?.packageName?.let {
.joinToString("\n")) if (it.isNotBlank()) "import $it.*\n" else null
} ?: ""
var fileText = template.replace(
"!IMPORT_LIST!",
packageFromContextFile
+ importsFromContextFile
+ codeFragment.importsToString().split(JetCodeFragment.IMPORT_SEPARATOR).joinToString("\n")
)
val extractedFunctionText = extractedFunction.text val extractedFunctionText = extractedFunction.text
assert(extractedFunctionText != null) { "Text of extracted function shouldn't be null" } assert(extractedFunctionText != null) { "Text of extracted function shouldn't be null" }
@@ -16,25 +16,24 @@
package org.jetbrains.kotlin.idea.debugger.evaluate package org.jetbrains.kotlin.idea.debugger.evaluate
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.ErrorMessage
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.Status
import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil
import org.jetbrains.kotlin.idea.util.application.runReadAction import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.impl.PsiModificationTrackerImpl import com.intellij.psi.impl.PsiModificationTrackerImpl
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention
import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.idea.core.refactoring.createTempCopy import org.jetbrains.kotlin.idea.core.refactoring.createTempCopy
import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.* import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.*
import java.util.* import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.ErrorMessage
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AnalysisResult.Status
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
fun getFunctionForExtractedFragment( fun getFunctionForExtractedFragment(
codeFragment: JetCodeFragment, codeFragment: JetCodeFragment,
@@ -120,7 +119,17 @@ private fun addImportsToFile(newImportList: JetImportList?, tmpFile: JetFile) {
tmpFile.addAfter(newImportList, tmpFile.getPackageDirective()) tmpFile.addAfter(newImportList, tmpFile.getPackageDirective())
} }
else { else {
tmpFileImportList.replace(newImportList) val tmpFileImports = tmpFileImportList.imports
if (tmpFileImports.isEmpty()) {
tmpFileImportList.replace(newImportList)
}
else {
val lastImport = tmpFileImports.last()
newImportList.imports.forEach {
tmpFileImportList.addAfter(it, lastImport)
}
tmpFileImportList.addAfter(psiFactory.createNewLine(), lastImport)
}
} }
tmpFile.addAfter(psiFactory.createNewLine(), packageDirective) tmpFile.addAfter(psiFactory.createNewLine(), packageDirective)
} }