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