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.types.JetType
import org.jetbrains.kotlin.utils.addToStdlib.check
import java.util.LinkedHashSet
import java.util.*
public abstract class JetCodeFragment(
private val _project: Project,
@@ -48,7 +48,7 @@ public abstract class JetCodeFragment(
getViewProvider().forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType)
if (context != null) {
initImports(context, imports)
initImports(imports)
}
}
@@ -123,20 +123,7 @@ public abstract class JetCodeFragment(
return true
}
private fun initImports(context: PsiElement, 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.*")
}
private fun initImports(imports: String?) {
if (imports != null && !imports.isEmpty()) {
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,
extractedFunction: JetNamedFunction
): JetFile {
var fileText = template.replace("!IMPORT_LIST!",
codeFragment.importsToString()
.split(JetCodeFragment.IMPORT_SEPARATOR)
.joinToString("\n"))
val containingContextFile = (codeFragment.context as? JetElement)?.getContainingJetFile()
val importsFromContextFile = containingContextFile?.importList?.let { it.text + "\n" } ?: ""
val packageFromContextFile = containingContextFile?.packageName?.let {
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
assert(extractedFunctionText != null) { "Text of extracted function shouldn't be null" }
@@ -16,25 +16,24 @@
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 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.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.caches.resolve.analyze
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
import org.jetbrains.kotlin.idea.core.refactoring.createTempCopy
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention
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(
codeFragment: JetCodeFragment,
@@ -120,7 +119,17 @@ private fun addImportsToFile(newImportList: JetImportList?, tmpFile: JetFile) {
tmpFile.addAfter(newImportList, tmpFile.getPackageDirective())
}
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)
}