diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index cd04c0de3ae..f25a7f43ca2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -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() { + new Function() { @Override - public ClassDescriptor invoke(JetClassOrObject classOrObject) { + public ClassDescriptor fun(JetClassLikeInfo classLikeInfo) { + JetClassOrObject classOrObject = classLikeInfo.getCorrespondingClassOrObject(); + if (classOrObject == null) return null; return getClassDescriptor(classOrObject); } - }); + } + ); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfoUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfoUtil.java index eebd9b5dcc6..212536e9f82 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfoUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/data/JetClassInfoUtil.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.java index 9ac4497fafb..1c4934ef272 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/AbstractPsiBasedDeclarationProvider.java @@ -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 allDeclarations = Lists.newArrayList(); private final Multimap functions = HashMultimap.create(); private final Multimap properties = HashMultimap.create(); - private final Multimap classesAndObjects = ArrayListMultimap.create(); // order matters here + private final Multimap 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 getClassOrObjectDeclarations(@NotNull Name name) { + public Collection getClassOrObjectDeclarations(@NotNull Name name) { return index.invoke().classesAndObjects.get(name); } } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.java index 9094f884ee9..d26af3185e0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/declarations/DeclarationProvider.java @@ -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 getClassOrObjectDeclarations(@NotNull Name name); + Collection getClassOrObjectDeclarations(@NotNull Name name); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java index 4808ee70c34..fd1df1b65b4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java @@ -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 resolveClassDescriptor(@NotNull final Name name) { - Collection classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name); + Collection classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name); - return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function() { + return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function() { @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); } }); } diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt b/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt index 396ed15f5d0..20fb292c476 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/stubindex/resolve/StubBasedPackageMemberDeclarationProvider.kt @@ -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 { + override fun getClassOrObjectDeclarations(name: Name): Collection { return JetFullClassNameIndex.getInstance().get(childName(name), project, searchScope) + .map { JetClassInfoUtil.createClassLikeInfo(it) } } override fun getFunctionDeclarations(name: Name): Collection {