diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java index 602f93b883e..de3344c6b23 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java @@ -31,10 +31,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.JetTypeMapper; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.java.JavaPsiFacadeKotlinHacks; import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.util.QualifiedNamesUtil; @@ -252,7 +252,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade if (cachedFiles == null) { cachedFiles = JetFilesProvider.getInstance(project).allInScope(scope); - jetFiles.put(scope, cachedFiles); + jetFiles.put(scope, cachedFiles); } return cachedFiles; diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetCacheManager.java b/idea/src/org/jetbrains/jet/plugin/caches/JetCacheManager.java index 97fe8123b4e..7981a62f27a 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetCacheManager.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetCacheManager.java @@ -20,6 +20,7 @@ import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.project.Project; import com.intellij.psi.search.PsiShortNamesCache; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.plugin.project.JsModuleDetector; /** @@ -67,8 +68,8 @@ public class JetCacheManager implements ProjectComponent { return myCache; } - public PsiShortNamesCache getShortNamesCache() { - if (JsModuleDetector.isJsProject(myProject)) { + public PsiShortNamesCache getShortNamesCache(@NotNull JetFile jetFile) { + if (JsModuleDetector.isJsModule(jetFile)) { return myCache; } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java index ac18d77f129..4cc8d39e4f8 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java @@ -94,7 +94,7 @@ public class JetClassCompletionContributor extends CompletionContributor { consumer.consume(DescriptorLookupConverter.createLookupElement(bindingContext, jetOnlyClass)); } - if (!JsModuleDetector.isJsProject(parameters.getOriginalFile().getProject())) { + if (!JsModuleDetector.isJsModule((JetFile)parameters.getOriginalFile())) { JavaClassNameCompletionContributor.addAllClasses( parameters, false, @@ -119,12 +119,14 @@ public class JetClassCompletionContributor extends CompletionContributor { } else { GlobalSearchScope globalSearchScope = GlobalSearchScope.allScope(parameters.getOriginalFile().getProject()); - PsiShortNamesCache cache = JetCacheManager.getInstance(parameters.getOriginalFile().getProject()).getShortNamesCache(); + PsiShortNamesCache cache = JetCacheManager.getInstance(parameters.getOriginalFile().getProject()).getShortNamesCache( + (JetFile) parameters.getOriginalFile()); + for (String className : cache.getAllClassNames()) { if (result.getPrefixMatcher().prefixMatches(className)) { for (PsiClass aClass : cache.getClassesByName(className, globalSearchScope)) { if (!addAsJetLookupElement(aClass, bindingContext, consumer)) { - assert false; + assert false : "All classes should be possible to add as kotlin classes in JS project"; } } } diff --git a/idea/src/org/jetbrains/jet/plugin/project/JsModuleDetector.java b/idea/src/org/jetbrains/jet/plugin/project/JsModuleDetector.java index 1b01cfb488e..796791c1179 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/JsModuleDetector.java +++ b/idea/src/org/jetbrains/jet/plugin/project/JsModuleDetector.java @@ -20,9 +20,12 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Pair; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.psi.JetFile; /** * @author Pavel Talanov @@ -41,6 +44,18 @@ public final class JsModuleDetector { return K2JSModuleComponent.getInstance(module).isJavaScriptModule(); } + public static boolean isJsModule(@NotNull JetFile file) { + VirtualFile virtualFile = file.getOriginalFile().getVirtualFile(); + if (virtualFile != null) { + Module module = ProjectRootManager.getInstance(file.getProject()).getFileIndex().getModuleForFile(virtualFile); + if (module != null) { + return isJsModule(module); + } + } + + return false; + } + @NotNull public static Pair getLibLocationAndTargetForProject(@NotNull Project project) { Module module = getJSModule(project); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ImportClassAndFunFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ImportClassAndFunFix.java index 1338560b2ed..2bf9543f068 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ImportClassAndFunFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ImportClassAndFunFix.java @@ -155,18 +155,16 @@ public class ImportClassAndFunFix extends JetHintAction final GlobalSearchScope scope = GlobalSearchScope.allScope(file.getProject()); Set possibleResolveNames = Sets.newHashSet(); - possibleResolveNames.addAll(getJavaClasses(referenceName, file.getProject(), scope)); + possibleResolveNames.addAll(getClassesFromCache(referenceName, file)); // TODO: Do appropriate sorting return Lists.newArrayList(possibleResolveNames); } - private static Collection getJavaClasses(@NotNull final String typeName, - @NotNull Project project, - final GlobalSearchScope scope) { - PsiShortNamesCache cache = JetCacheManager.getInstance(project).getShortNamesCache(); + private static Collection getClassesFromCache(@NotNull final String typeName, @NotNull JetFile file) { + PsiShortNamesCache cache = JetCacheManager.getInstance(file.getProject()).getShortNamesCache(file); - PsiClass[] classes = cache.getClassesByName(typeName, scope); + PsiClass[] classes = cache.getClassesByName(typeName, GlobalSearchScope.allScope(file.getProject())); Collection accessibleClasses = Collections2.filter(Lists.newArrayList(classes), new Predicate() { @Override @@ -190,7 +188,7 @@ public class ImportClassAndFunFix extends JetHintAction private static boolean isAccessible(PsiMember member) { if (member instanceof JetLightClass) { - // TODO: Now light class can't losing accessibility information + // TODO: Now light classes losing accessibility information JetLightClass lightClass = (JetLightClass) member; BindingContext context = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) lightClass.getContainingFile()).getBindingContext(); ClassDescriptor descriptor = context.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, lightClass.getFqName());