Working on integrating lazy resolve with Java interop.

This commit is contained in:
Andrey Breslav
2012-06-07 15:45:12 +04:00
parent 4d1ce46779
commit 37560fac10
5 changed files with 23 additions and 632 deletions
@@ -25,6 +25,9 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import java.util.Collections;
@@ -32,7 +35,7 @@ import java.util.Collections;
* @author abreslav
*/
public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl implements NamespaceDescriptor {
private final LazyPackageMemberScope memberScope;
private final JetScope memberScope;
public LazyPackageDescriptor(
@NotNull NamespaceDescriptorParent containingDeclaration,
@@ -41,7 +44,12 @@ public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl imple
@NotNull PackageMemberDeclarationProvider declarationProvider
) {
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), name);
this.memberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this);
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope for " + name);
//resolveSession.getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope);
LazyPackageMemberScope lazyPackageMemberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this);
scope.importScope(lazyPackageMemberScope);
scope.changeLockLevel(WritableScope.LockLevel.READING);
this.memberScope = scope;
}
@NotNull
@@ -23,6 +23,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForLazyResolve;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -48,14 +49,17 @@ public class ResolveSession {
private final DeclarationProviderFactory declarationProviderFactory;
private final InjectorForLazyResolve injector;
private final ModuleConfiguration moduleConfiguration;
public ResolveSession(
@NotNull Project project,
@NotNull ModuleDescriptor rootDescriptor,
@NotNull ModuleConfiguration moduleConfiguration,
@NotNull DeclarationProviderFactory declarationProviderFactory
) {
this.injector = new InjectorForLazyResolve(project, this, trace);
this.module = rootDescriptor;
this.moduleConfiguration = moduleConfiguration;
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);
@@ -69,6 +73,11 @@ public class ResolveSession {
return injector;
}
@NotNull
public ModuleConfiguration getModuleConfiguration() {
return moduleConfiguration;
}
@Nullable
public NamespaceDescriptor getPackageDescriptor(@NotNull Name shortName) {
return rootPackage.getMemberScope().getNamespace(shortName);