Working on integrating lazy resolve with Java interop.
This commit is contained in:
+10
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user