DeclarationProvider now returns ClassLikeInfo's instead of PSI
This commit is contained in:
@@ -23,8 +23,6 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.Function0;
|
||||
import kotlin.Function1;
|
||||
import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.ReadOnly;
|
||||
@@ -210,14 +208,17 @@ public class ResolveSession implements KotlinCodeAnalyzer {
|
||||
PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(fqName.parent());
|
||||
if (provider == null) return Collections.emptyList();
|
||||
|
||||
return KotlinPackage.map(
|
||||
return ContainerUtil.mapNotNull(
|
||||
provider.getClassOrObjectDeclarations(fqName.shortName()),
|
||||
new Function1<JetClassOrObject, ClassDescriptor>() {
|
||||
new Function<JetClassLikeInfo, ClassDescriptor>() {
|
||||
@Override
|
||||
public ClassDescriptor invoke(JetClassOrObject classOrObject) {
|
||||
public ClassDescriptor fun(JetClassLikeInfo classLikeInfo) {
|
||||
JetClassOrObject classOrObject = classLikeInfo.getCorrespondingClassOrObject();
|
||||
if (classOrObject == null) return null;
|
||||
return getClassDescriptor(classOrObject);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
|
||||
|
||||
public class JetClassInfoUtil {
|
||||
|
||||
@NotNull
|
||||
public static JetClassLikeInfo createClassLikeInfo(@NotNull JetClassOrObject classOrObject) {
|
||||
if (classOrObject instanceof JetClass) {
|
||||
return new JetClassInfo((JetClass) classOrObject);
|
||||
|
||||
+8
-3
@@ -23,6 +23,8 @@ import com.google.common.collect.Multimap;
|
||||
import kotlin.Function0;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.storage.NotNullLazyValue;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
@@ -39,7 +41,7 @@ public abstract class AbstractPsiBasedDeclarationProvider implements Declaration
|
||||
private final List<JetDeclaration> allDeclarations = Lists.newArrayList();
|
||||
private final Multimap<Name, JetNamedFunction> functions = HashMultimap.create();
|
||||
private final Multimap<Name, JetProperty> properties = HashMultimap.create();
|
||||
private final Multimap<Name, JetClassOrObject> classesAndObjects = ArrayListMultimap.create(); // order matters here
|
||||
private final Multimap<Name, JetClassLikeInfo> classesAndObjects = ArrayListMultimap.create(); // order matters here
|
||||
|
||||
public void putToIndex(@NotNull JetDeclaration declaration) {
|
||||
if (declaration instanceof JetClassInitializer) {
|
||||
@@ -56,7 +58,10 @@ public abstract class AbstractPsiBasedDeclarationProvider implements Declaration
|
||||
}
|
||||
else if (declaration instanceof JetClassOrObject) {
|
||||
JetClassOrObject classOrObject = (JetClassOrObject) declaration;
|
||||
classesAndObjects.put(safeNameForLazyResolve(classOrObject.getNameAsName()), classOrObject);
|
||||
classesAndObjects.put(
|
||||
safeNameForLazyResolve(classOrObject.getNameAsName()),
|
||||
JetClassInfoUtil.createClassLikeInfo(classOrObject)
|
||||
);
|
||||
}
|
||||
else if (declaration instanceof JetParameter ||
|
||||
declaration instanceof JetTypedef ||
|
||||
@@ -105,7 +110,7 @@ public abstract class AbstractPsiBasedDeclarationProvider implements Declaration
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<JetClassOrObject> getClassOrObjectDeclarations(@NotNull Name name) {
|
||||
public Collection<JetClassLikeInfo> getClassOrObjectDeclarations(@NotNull Name name) {
|
||||
return index.invoke().classesAndObjects.get(name);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -18,10 +18,10 @@ package org.jetbrains.jet.lang.resolve.lazy.declarations;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.ReadOnly;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||
import org.jetbrains.jet.lang.psi.JetNamedFunction;
|
||||
import org.jetbrains.jet.lang.psi.JetProperty;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -42,5 +42,5 @@ public interface DeclarationProvider {
|
||||
|
||||
@ReadOnly
|
||||
@NotNull
|
||||
Collection<JetClassOrObject> getClassOrObjectDeclarations(@NotNull Name name);
|
||||
Collection<JetClassLikeInfo> getClassOrObjectDeclarations(@NotNull Name name);
|
||||
}
|
||||
|
||||
+5
-5
@@ -28,7 +28,7 @@ import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProvider;
|
||||
import org.jetbrains.jet.lang.resolve.name.LabelName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
@@ -104,12 +104,12 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
||||
|
||||
@Nullable
|
||||
private List<ClassDescriptor> resolveClassDescriptor(@NotNull final Name name) {
|
||||
Collection<JetClassOrObject> classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name);
|
||||
Collection<JetClassLikeInfo> classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name);
|
||||
|
||||
return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function<JetClassOrObject, ClassDescriptor>() {
|
||||
return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function<JetClassLikeInfo, ClassDescriptor>() {
|
||||
@Override
|
||||
public ClassDescriptor fun(JetClassOrObject classOrObject) {
|
||||
return new LazyClassDescriptor(resolveSession, thisDescriptor, name, JetClassInfoUtil.createClassLikeInfo(classOrObject));
|
||||
public ClassDescriptor fun(JetClassLikeInfo classLikeInfo) {
|
||||
return new LazyClassDescriptor(resolveSession, thisDescriptor, name, classLikeInfo);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+4
-1
@@ -27,6 +27,8 @@ import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex
|
||||
import org.jetbrains.jet.plugin.stubindex.JetTopLevelFunctionsFqnNameIndex
|
||||
import org.jetbrains.jet.plugin.stubindex.JetTopLevelPropertiesFqnNameIndex
|
||||
import org.jetbrains.jet.plugin.stubindex.PackageIndexUtil
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo
|
||||
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil
|
||||
|
||||
public class StubBasedPackageMemberDeclarationProvider(
|
||||
private val fqName: FqName,
|
||||
@@ -42,8 +44,9 @@ public class StubBasedPackageMemberDeclarationProvider(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getClassOrObjectDeclarations(name: Name): Collection<JetClassOrObject> {
|
||||
override fun getClassOrObjectDeclarations(name: Name): Collection<JetClassLikeInfo> {
|
||||
return JetFullClassNameIndex.getInstance().get(childName(name), project, searchScope)
|
||||
.map { JetClassInfoUtil.createClassLikeInfo(it) }
|
||||
}
|
||||
|
||||
override fun getFunctionDeclarations(name: Name): Collection<JetNamedFunction> {
|
||||
|
||||
Reference in New Issue
Block a user