JetCodeFragment: increment modification count after inserting import

This commit is contained in:
Natalia Ukhorskaya
2015-03-05 16:36:43 +03:00
parent c4f7bf6815
commit f6162dc726
11 changed files with 46 additions and 33 deletions
@@ -43,7 +43,7 @@ import org.jetbrains.kotlin.psi.JetArrayAccessExpression
class KotlinEditorTextProvider : EditorTextProvider {
override fun getEditorText(elementAtCaret: PsiElement): TextWithImports? {
val expression = findExpressionInner(elementAtCaret, true)
return TextWithImportsImpl(CodeFragmentKind.EXPRESSION, expression?.getText() ?: "", JetCodeFragment.getImportsForElement(elementAtCaret), JetFileType.INSTANCE)
return TextWithImportsImpl(CodeFragmentKind.EXPRESSION, expression?.getText() ?: "", "", JetFileType.INSTANCE)
}
override fun findExpression(elementAtCaret: PsiElement, allowMethodCalls: Boolean): Pair<PsiElement, TextRange>? {
@@ -40,12 +40,11 @@ import com.intellij.openapi.progress.ProgressManager
class KotlinCodeFragmentFactory: CodeFragmentFactory() {
override fun createCodeFragment(item: TextWithImports, context: PsiElement?, project: Project): JavaCodeFragment {
val codeFragment = if (item.getKind() == CodeFragmentKind.EXPRESSION) {
JetExpressionCodeFragment(project, "fragment.kt", item.getText(), getContextElement(context))
JetExpressionCodeFragment(project, "fragment.kt", item.getText(), item.getImports(), getContextElement(context))
}
else {
JetBlockCodeFragment(project, "fragment.kt", item.getText(), getContextElement(context))
JetBlockCodeFragment(project, "fragment.kt", item.getText(), item.getImports(), getContextElement(context))
}
codeFragment.addImportsFromString(item.getImports())
codeFragment.putCopyableUserData(JetCodeFragment.RUNTIME_TYPE_EVALUATOR, {
(expression: JetExpression): JetType? ->
@@ -97,10 +97,6 @@ object KotlinEvaluationBuilder: EvaluatorBuilder {
throw EvaluateExceptionUtil.createEvaluateException("Couldn't evaluate kotlin expression in this context")
}
val packageName = file.getPackageDirective()?.getFqName()?.asString()
if (packageName != null && packageName.isNotEmpty()) {
codeFragment.addImportsFromString("import $packageName.*")
}
return ExpressionEvaluatorImpl(KotlinEvaluator(codeFragment as JetCodeFragment, position))
}
}
@@ -179,7 +179,10 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert
return ImportDescriptorResult.FAIL
}
val imports = file.getImportDirectives()
val imports = if (file is JetCodeFragment)
file.importsAsImportList()?.getImports() ?: listOf()
else
file.getImportDirectives()
//TODO: is that correct? What if function is imported and we need to import class?
if (imports.any { it.getImportedName() == name.asString() }) return ImportDescriptorResult.FAIL
@@ -66,8 +66,6 @@ public abstract class AbstractCodeFragmentHighlightingTest : AbstractJetPsiCheck
.processImportReference(importDirective, scope, scope, null, BindingTraceContext(), LookupMode.EVERYTHING)
.singleOrNull() ?: error("Could not resolve descriptor to import: $it")
ImportInsertHelper.getInstance(getProject()).importDescriptor(file, descriptor)
//TODO: it's a hack! we need to discuss it
(PsiModificationTracker.SERVICE.getInstance(getProject()) as PsiModificationTrackerImpl).incOutOfCodeBlockModificationCounter()
}
}
@@ -90,7 +88,7 @@ public abstract class AbstractCodeFragmentCompletionHandlerTest : AbstractComple
super.doTest(testPath)
val fragment = myFixture.getFile() as JetCodeFragment
val importList = fragment.getImportList()
val importList = fragment.importsAsImportList()
val fragmentAfterFile = File(testPath + ".after.imports")
if (importList != null && fragmentAfterFile.exists()) {
@@ -331,11 +331,7 @@ public abstract class AbstractKotlinEvaluateExpressionTest : KotlinDebuggerTestB
try {
val evaluator =
EvaluatorBuilderImpl.build(TextWithImportsImpl(
codeFragmentKind,
text,
JetCodeFragment.getImportsForElement(contextElement),
JetFileType.INSTANCE),
EvaluatorBuilderImpl.build(TextWithImportsImpl(codeFragmentKind, text, "", JetFileType.INSTANCE),
contextElement,
sourcePosition)