CodeFragments: do not add imports from context file
This commit is contained in:
@@ -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" }
|
||||
|
||||
+21
-12
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user