PackageMemberDeclarationProvider introduced

This commit is contained in:
Andrey Breslav
2012-06-05 16:32:20 +04:00
parent 42c29da718
commit e5e3bc0ee5
9 changed files with 38 additions and 18 deletions
@@ -40,6 +40,4 @@ public interface DeclarationProvider {
@Nullable
JetClassOrObject getClassOrObjectDeclaration(@NotNull Name name);
boolean isPackageDeclared(@NotNull Name name);
}
@@ -29,5 +29,5 @@ public interface DeclarationProviderFactory {
ClassMemberDeclarationProvider getClassMemberDeclarationProvider(@NotNull JetClassOrObject jetClassOrObject);
@Nullable
DeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName);
PackageMemberDeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName);
}
@@ -39,7 +39,7 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
private final Multimap<FqName, JetFile> filesByPackage = HashMultimap.create();
private final Set<FqName> definedPackages = Sets.newHashSet();
private final Map<FqName, DeclarationProvider> packageDeclarationProviders = Maps.newHashMap();
private final Map<FqName, PackageMemberDeclarationProvider> packageDeclarationProviders = Maps.newHashMap();
private final Map<JetClassOrObject, ClassMemberDeclarationProvider> classMemberDeclarationProviders = Maps.newHashMap();
private boolean indexed = false;
@@ -77,10 +77,10 @@ public class FileBasedDeclarationProviderFactory implements DeclarationProviderF
}
@Override
public DeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName) {
public PackageMemberDeclarationProvider getPackageMemberDeclarationProvider(@NotNull FqName packageFqName) {
createIndex();
DeclarationProvider declarationProvider = packageDeclarationProviders.get(packageFqName);
PackageMemberDeclarationProvider declarationProvider = packageDeclarationProviders.get(packageFqName);
if (declarationProvider != null) {
return declarationProvider;
}
@@ -26,7 +26,7 @@ import java.util.Collection;
/**
* @author abreslav
*/
public class FileBasedPackageMemberDeclarationProvider extends AbstractPsiBasedDeclarationProvider {
public class FileBasedPackageMemberDeclarationProvider extends AbstractPsiBasedDeclarationProvider implements PackageMemberDeclarationProvider {
private final FqName fqName;
private final FileBasedDeclarationProviderFactory factory;
@@ -38,7 +38,7 @@ public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl imple
@NotNull NamespaceDescriptorParent containingDeclaration,
@NotNull Name name,
@NotNull ResolveSession resolveSession,
@NotNull DeclarationProvider declarationProvider
@NotNull PackageMemberDeclarationProvider declarationProvider
) {
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), name);
this.memberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this);
@@ -34,12 +34,12 @@ import java.util.Set;
/**
* @author abreslav
*/
public class LazyPackageMemberScope extends AbstractLazyMemberScope<NamespaceDescriptor, DeclarationProvider> {
public class LazyPackageMemberScope extends AbstractLazyMemberScope<NamespaceDescriptor, PackageMemberDeclarationProvider> {
private final Map<Name, NamespaceDescriptor> packageDescriptors = Maps.newHashMap();
public LazyPackageMemberScope(@NotNull ResolveSession resolveSession,
@NotNull DeclarationProvider declarationProvider,
@NotNull PackageMemberDeclarationProvider declarationProvider,
@NotNull NamespaceDescriptor thisPackage) {
super(resolveSession, declarationProvider, thisPackage);
}
@@ -52,7 +52,7 @@ public class LazyPackageMemberScope extends AbstractLazyMemberScope<NamespaceDes
if (!declarationProvider.isPackageDeclared(name)) return null;
DeclarationProvider packageMemberDeclarationProvider = resolveSession.getDeclarationProviderFactory().getPackageMemberDeclarationProvider(
PackageMemberDeclarationProvider packageMemberDeclarationProvider = resolveSession.getDeclarationProviderFactory().getPackageMemberDeclarationProvider(
DescriptorUtils.getFQName(thisDescriptor).child(name).toSafe());
assert packageMemberDeclarationProvider != null : "Package is declared, but declaration provider is not found: " + name;
NamespaceDescriptor namespaceDescriptor = new LazyPackageDescriptor(thisDescriptor, name, resolveSession, packageMemberDeclarationProvider);
@@ -0,0 +1,28 @@
/*
* Copyright 2010-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.resolve.lazy;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.Name;
/**
* @author abreslav
*/
public interface PackageMemberDeclarationProvider extends DeclarationProvider {
boolean isPackageDeclared(@NotNull Name name);
}
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetClassObject;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.resolve.name.Name;
/**
* @author abreslav
@@ -57,9 +56,4 @@ public class PsiBasedClassMemberDeclarationProvider extends AbstractPsiBasedDecl
createIndex();
return jetClassObject;
}
@Override
public boolean isPackageDeclared(@NotNull Name name) {
throw new UnsupportedOperationException("Shouldn't be called on a ClassMemberDeclarationProvider");
}
}
@@ -59,7 +59,7 @@ public class ResolveSession {
) {
this.injector = new InjectorForLazyResolve(project, this, trace);
this.module = rootDescriptor;
DeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT);
PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT);
assert provider != null : "No declaration provider for root package in " + rootDescriptor;
this.rootPackage = new LazyPackageDescriptor(rootDescriptor, FqNameUnsafe.ROOT_NAME, this, provider);
rootDescriptor.setRootNamespace(rootPackage);