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.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" }
|
||||||
|
|||||||
+21
-12
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user