KT-1051 Java interoperability completion (class and subpackages completion)
This commit is contained in:
@@ -146,7 +146,7 @@ public class JavaElementFinder extends PsiElementFinder {
|
||||
final List<JetFile> psiFiles = collectProjectJetFiles(project, GlobalSearchScope.allScope(project));
|
||||
|
||||
for (JetFile psiFile : psiFiles) {
|
||||
if (qualifiedName.equals(JetPsiUtil.getFQName(psiFile))) {
|
||||
if (JetPsiUtil.getFQName(psiFile).startsWith(qualifiedName)) {
|
||||
return new PsiPackageImpl(psiFile.getManager(), qualifiedName);
|
||||
}
|
||||
}
|
||||
@@ -154,6 +154,23 @@ public class JavaElementFinder extends PsiElementFinder {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiPackage[] getSubPackages(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
|
||||
final List<JetFile> psiFiles = collectProjectJetFiles(project, GlobalSearchScope.allScope(project));
|
||||
|
||||
Set<PsiPackage> answer = new HashSet<PsiPackage>();
|
||||
|
||||
for (JetFile psiFile : psiFiles) {
|
||||
String jetRootNamespace = JetPsiUtil.getFQName(psiFile);
|
||||
if (isInPackage(psiPackage.getQualifiedName(), jetRootNamespace)) {
|
||||
answer.add(new JetLightPackage(psiFile.getManager(), jetRootNamespace));
|
||||
}
|
||||
}
|
||||
|
||||
return answer.toArray(new PsiPackage[answer.size()]);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiClass[] getClasses(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
|
||||
@@ -174,6 +191,24 @@ public class JavaElementFinder extends PsiElementFinder {
|
||||
return answer.toArray(new PsiClass[answer.size()]);
|
||||
}
|
||||
|
||||
private static boolean isInPackage(String packageName, String fqn) {
|
||||
return fqn.startsWith(packageName + ".");
|
||||
}
|
||||
|
||||
private static String subPackageName(String packageName, String packageFQN) {
|
||||
if (!isInPackage(packageName, packageFQN)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int nextDotIndex = packageFQN.indexOf('.', (packageName + ".").length());
|
||||
|
||||
if (nextDotIndex != -1) {
|
||||
return packageFQN.substring((packageName + ".").length(), nextDotIndex);
|
||||
}
|
||||
|
||||
return packageFQN.substring((packageName + ".").length());
|
||||
}
|
||||
|
||||
private synchronized void invalidateJetFilesCache() {
|
||||
jetFiles.clear();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.jetbrains.jet.asJava;
|
||||
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.file.PsiPackageImpl;
|
||||
|
||||
/**
|
||||
* @author Nikolay Krasko
|
||||
*/
|
||||
public class JetLightPackage extends PsiPackageImpl {
|
||||
public JetLightPackage(PsiManager manager, String qualifiedName) {
|
||||
super(manager, qualifiedName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user