Evaluate expression: add ability to import class

This commit is contained in:
Natalia Ukhorskaya
2014-04-28 14:06:57 +04:00
parent 3f95cdb7bb
commit 98532f321d
18 changed files with 200 additions and 60 deletions
@@ -40,6 +40,9 @@ public abstract class JetCodeFragment(
{
getViewProvider().forceCachedPsi(this)
init(TokenType.CODE_FRAGMENT, elementType)
if (_context != null) {
addImportsFromString(getImportsForElement(_context))
}
}
private var _resolveScope: GlobalSearchScope? = null
@@ -89,11 +92,15 @@ public abstract class JetCodeFragment(
}
override fun addImportsFromString(imports: String?) {
if (imports == null) return
if (imports == null || imports.isEmpty()) return
_myImports.addAll(imports.split(IMPORT_SEPARATOR))
}
fun importsAsImportList(): JetImportList? {
return JetPsiFactory.createFile(_project, _myImports.makeString("\n")).getImportList()
}
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) { }
override fun getVisibilityChecker() = JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE
@@ -110,5 +117,14 @@ public abstract class JetCodeFragment(
class object {
val IMPORT_SEPARATOR = ","
fun getImportsForElement(elementAtCaret: PsiElement): String {
val containingFile = elementAtCaret.getContainingFile()
if (containingFile !is JetFile) return ""
return containingFile.getImportList()?.getImports()
?.map { it.getText() }
?.makeString(JetCodeFragment.IMPORT_SEPARATOR) ?: ""
}
}
}
@@ -24,8 +24,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetCodeFragment;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.psi.JetImportList;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.name.LabelName;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -158,10 +160,19 @@ public class LazyImportScope implements JetScope, LazyEntity {
@NotNull BindingTrace traceForImportResolve,
@NotNull String debugName
) {
List<JetImportDirective> importDirectives;
if (jetFile instanceof JetCodeFragment) {
JetImportList importList = ((JetCodeFragment) jetFile).importsAsImportList();
importDirectives = importList != null ? importList.getImports() : Collections.<JetImportDirective>emptyList();
}
else {
importDirectives = jetFile.getImportDirectives();
}
return new LazyImportScope(
resolveSession,
packageDescriptor,
Lists.reverse(jetFile.getImportDirectives()),
Lists.reverse(importDirectives),
traceForImportResolve,
debugName,
packageDescriptor.getFqName().isRoot());