Expose lazy scopes to enable calling forceResolveAllContents()
This commit is contained in:
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
|||||||
import org.jetbrains.jet.lang.psi.JetImportDirective;
|
import org.jetbrains.jet.lang.psi.JetImportDirective;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.Importer;
|
import org.jetbrains.jet.lang.resolve.Importer;
|
||||||
|
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.JetModuleUtil;
|
import org.jetbrains.jet.lang.resolve.JetModuleUtil;
|
||||||
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;
|
||||||
@@ -42,7 +43,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver.LookupMode;
|
import static org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver.LookupMode;
|
||||||
|
|
||||||
public class LazyImportScope implements JetScope {
|
public class LazyImportScope implements JetScope, LazyEntity {
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final PackageViewDescriptor packageDescriptor;
|
private final PackageViewDescriptor packageDescriptor;
|
||||||
private final ImportsProvider importsProvider;
|
private final ImportsProvider importsProvider;
|
||||||
@@ -158,6 +159,13 @@ public class LazyImportScope implements JetScope {
|
|||||||
packageDescriptor.getFqName().isRoot());
|
packageDescriptor.getFqName().isRoot());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forceResolveAllContents() {
|
||||||
|
for (JetImportDirective importDirective : importsProvider.getAllImports()) {
|
||||||
|
getImportScope(importDirective, LookupMode.EVERYTHING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private <D extends DeclarationDescriptor> D selectFirstFromImports(
|
private <D extends DeclarationDescriptor> D selectFirstFromImports(
|
||||||
final Name name,
|
final Name name,
|
||||||
|
|||||||
@@ -40,17 +40,17 @@ import java.util.List;
|
|||||||
public class ScopeProvider {
|
public class ScopeProvider {
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
|
|
||||||
private final MemoizedFunctionToNotNull<JetFile, JetScope> fileScopes;
|
private final MemoizedFunctionToNotNull<JetFile, LazyImportScope> explicitImportScopes;
|
||||||
|
|
||||||
private final NotNullLazyValue<JetScope> defaultImportsScope;
|
private final NotNullLazyValue<JetScope> defaultImportsScope;
|
||||||
|
|
||||||
public ScopeProvider(@NotNull ResolveSession resolveSession) {
|
public ScopeProvider(@NotNull ResolveSession resolveSession) {
|
||||||
this.resolveSession = resolveSession;
|
this.resolveSession = resolveSession;
|
||||||
|
|
||||||
this.fileScopes = resolveSession.getStorageManager().createMemoizedFunction(new Function1<JetFile, JetScope>() {
|
this.explicitImportScopes = resolveSession.getStorageManager().createMemoizedFunction(new Function1<JetFile, LazyImportScope>() {
|
||||||
@Override
|
@Override
|
||||||
public JetScope invoke(@NotNull JetFile file) {
|
public LazyImportScope invoke(@NotNull JetFile file) {
|
||||||
return createFileScope(file);
|
return createExplicitImportScope(file);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -62,30 +62,30 @@ public class ScopeProvider {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
private LazyImportScope createExplicitImportScope(@NotNull JetFile file) {
|
||||||
public JetScope getFileScope(JetFile file) {
|
return LazyImportScope.createImportScopeForFile(
|
||||||
return fileScopes.invoke(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private JetScope createFileScope(@NotNull JetFile file) {
|
|
||||||
PackageViewDescriptor packageDescriptor = getFilePackageDescriptor(file);
|
|
||||||
|
|
||||||
JetScope importsScope = LazyImportScope.createImportScopeForFile(
|
|
||||||
resolveSession,
|
resolveSession,
|
||||||
packageDescriptor,
|
getFilePackageDescriptor(file),
|
||||||
file,
|
file,
|
||||||
resolveSession.getTrace(),
|
resolveSession.getTrace(),
|
||||||
"Lazy Imports Scope for file " + file.getName());
|
"Lazy Imports Scope for file " + file.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JetScope getFileScope(@NotNull JetFile file) {
|
||||||
return new ChainedScope(resolveSession.getPackageFragment(JetPsiUtil.getFQName(file)),
|
return new ChainedScope(resolveSession.getPackageFragment(JetPsiUtil.getFQName(file)),
|
||||||
"File scope: " + file.getName(),
|
"File scope: " + file.getName(),
|
||||||
packageDescriptor.getMemberScope(),
|
getFilePackageDescriptor(file).getMemberScope(),
|
||||||
JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()),
|
JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()),
|
||||||
importsScope,
|
explicitImportScopes.invoke(file),
|
||||||
defaultImportsScope.invoke());
|
defaultImportsScope.invoke());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public LazyImportScope getExplicitImportsScopeForFile(@NotNull JetFile file) {
|
||||||
|
return explicitImportScopes.invoke(file);
|
||||||
|
}
|
||||||
|
|
||||||
private JetScope createScopeWithDefaultImports() {
|
private JetScope createScopeWithDefaultImports() {
|
||||||
PackageViewDescriptor rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT);
|
PackageViewDescriptor rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT);
|
||||||
if (rootPackage == null) {
|
if (rootPackage == null) {
|
||||||
|
|||||||
@@ -145,10 +145,8 @@ public class ResolveElementCache {
|
|||||||
}
|
}
|
||||||
else if (resolveElement instanceof JetImportDirective) {
|
else if (resolveElement instanceof JetImportDirective) {
|
||||||
JetImportDirective importDirective = (JetImportDirective) resolveElement;
|
JetImportDirective importDirective = (JetImportDirective) resolveElement;
|
||||||
JetScope scope = resolveSession.getScopeProvider().getFileScope((JetFile) importDirective.getContainingFile());
|
LazyImportScope scope = resolveSession.getScopeProvider().getExplicitImportsScopeForFile((JetFile) importDirective.getContainingFile());
|
||||||
|
scope.forceResolveAllContents();
|
||||||
// Get all descriptors to force resolving all imports
|
|
||||||
scope.getAllDescriptors();
|
|
||||||
}
|
}
|
||||||
else if (resolveElement instanceof JetAnnotationEntry) {
|
else if (resolveElement instanceof JetAnnotationEntry) {
|
||||||
annotationAdditionalResolve(resolveSession, (JetAnnotationEntry) resolveElement);
|
annotationAdditionalResolve(resolveSession, (JetAnnotationEntry) resolveElement);
|
||||||
|
|||||||
Reference in New Issue
Block a user