Create enumeration LookupMode instead of using boolean onlyClasses
This commit is contained in:
@@ -36,6 +36,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver.LookupMode;
|
||||||
|
|
||||||
public class ImportsResolver {
|
public class ImportsResolver {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -75,30 +76,30 @@ public class ImportsResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void processTypeImports(@NotNull JetScope rootScope) {
|
public void processTypeImports(@NotNull JetScope rootScope) {
|
||||||
processImports(true, rootScope);
|
processImports(LookupMode.ONLY_CLASSES, rootScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processMembersImports(@NotNull JetScope rootScope) {
|
public void processMembersImports(@NotNull JetScope rootScope) {
|
||||||
processImports(false, rootScope);
|
processImports(LookupMode.EVERYTHING, rootScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processImports(boolean onlyClasses, @NotNull JetScope rootScope) {
|
private void processImports(@NotNull LookupMode lookupMode, @NotNull JetScope rootScope) {
|
||||||
for (JetFile file : context.getNamespaceDescriptors().keySet()) {
|
for (JetFile file : context.getNamespaceDescriptors().keySet()) {
|
||||||
WritableScope namespaceScope = context.getNamespaceScopes().get(file);
|
WritableScope namespaceScope = context.getNamespaceScopes().get(file);
|
||||||
processImportsInFile(onlyClasses, namespaceScope, Lists.newArrayList(file.getImportDirectives()), rootScope);
|
processImportsInFile(lookupMode, namespaceScope, Lists.newArrayList(file.getImportDirectives()), rootScope);
|
||||||
}
|
}
|
||||||
for (JetScript script : context.getScripts().keySet()) {
|
for (JetScript script : context.getScripts().keySet()) {
|
||||||
WritableScope scriptScope = context.getScriptScopes().get(script);
|
WritableScope scriptScope = context.getScriptScopes().get(script);
|
||||||
processImportsInFile(onlyClasses, scriptScope, script.getImportDirectives(), rootScope);
|
processImportsInFile(lookupMode, scriptScope, script.getImportDirectives(), rootScope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processImportsInFile(boolean classes, WritableScope scope, List<JetImportDirective> directives, JetScope rootScope) {
|
private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List<JetImportDirective> directives, JetScope rootScope) {
|
||||||
processImportsInFile(classes, scope, directives, rootScope, configuration, trace, qualifiedExpressionResolver, psiBuilder);
|
processImportsInFile(lookupMode, scope, directives, rootScope, configuration, trace, qualifiedExpressionResolver, psiBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void processImportsInFile(
|
public static void processImportsInFile(
|
||||||
boolean onlyClasses,
|
@NotNull LookupMode lookupMode,
|
||||||
@NotNull WritableScope namespaceScope,
|
@NotNull WritableScope namespaceScope,
|
||||||
@NotNull List<JetImportDirective> importDirectives,
|
@NotNull List<JetImportDirective> importDirectives,
|
||||||
@NotNull JetScope rootScope,
|
@NotNull JetScope rootScope,
|
||||||
@@ -109,7 +110,7 @@ public class ImportsResolver {
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(namespaceScope);
|
Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(namespaceScope);
|
||||||
if (!onlyClasses) {
|
if (lookupMode == LookupMode.EVERYTHING) {
|
||||||
namespaceScope.clearImports();
|
namespaceScope.clearImports();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +120,7 @@ public class ImportsResolver {
|
|||||||
|
|
||||||
JetImportDirective defaultImportDirective = psiBuilder.createImportDirective(defaultImportPath);
|
JetImportDirective defaultImportDirective = psiBuilder.createImportDirective(defaultImportPath);
|
||||||
qualifiedExpressionResolver.processImportReference(defaultImportDirective, rootScope, namespaceScope, delayedImporter,
|
qualifiedExpressionResolver.processImportReference(defaultImportDirective, rootScope, namespaceScope, delayedImporter,
|
||||||
temporaryTrace, configuration, onlyClasses);
|
temporaryTrace, configuration, lookupMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives = Maps.newHashMap();
|
Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives = Maps.newHashMap();
|
||||||
@@ -127,19 +128,19 @@ public class ImportsResolver {
|
|||||||
for (JetImportDirective importDirective : importDirectives) {
|
for (JetImportDirective importDirective : importDirectives) {
|
||||||
Collection<? extends DeclarationDescriptor> descriptors =
|
Collection<? extends DeclarationDescriptor> descriptors =
|
||||||
qualifiedExpressionResolver.processImportReference(importDirective, rootScope, namespaceScope, delayedImporter,
|
qualifiedExpressionResolver.processImportReference(importDirective, rootScope, namespaceScope, delayedImporter,
|
||||||
trace, configuration, onlyClasses);
|
trace, configuration, lookupMode);
|
||||||
if (descriptors.size() == 1) {
|
if (descriptors.size() == 1) {
|
||||||
resolvedDirectives.put(importDirective, descriptors.iterator().next());
|
resolvedDirectives.put(importDirective, descriptors.iterator().next());
|
||||||
}
|
}
|
||||||
for (DeclarationDescriptor descriptor : descriptors) {
|
for (DeclarationDescriptor descriptor : descriptors) {
|
||||||
JetExpression importedReference = importDirective.getImportedReference();
|
JetExpression importedReference = importDirective.getImportedReference();
|
||||||
if (onlyClasses || importedReference == null) continue;
|
if (lookupMode == LookupMode.ONLY_CLASSES || importedReference == null) continue;
|
||||||
reportPlatformClassMappedToKotlin(configuration, trace, importedReference, descriptor);
|
reportPlatformClassMappedToKotlin(configuration, trace, importedReference, descriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delayedImporter.processImports();
|
delayedImporter.processImports();
|
||||||
|
|
||||||
if (!onlyClasses) {
|
if (lookupMode == LookupMode.EVERYTHING) {
|
||||||
for (JetImportDirective importDirective : importDirectives) {
|
for (JetImportDirective importDirective : importDirectives) {
|
||||||
reportUselessImport(importDirective, namespaceScope, resolvedDirectives, trace);
|
reportUselessImport(importDirective, namespaceScope, resolvedDirectives, trace);
|
||||||
}
|
}
|
||||||
|
|||||||
+52
-32
@@ -36,6 +36,13 @@ import java.util.Set;
|
|||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
|
|
||||||
public class QualifiedExpressionResolver {
|
public class QualifiedExpressionResolver {
|
||||||
|
public enum LookupMode {
|
||||||
|
// Only classifier and packages are resolved
|
||||||
|
ONLY_CLASSES,
|
||||||
|
|
||||||
|
// Resolve all descriptors
|
||||||
|
EVERYTHING
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<? extends DeclarationDescriptor> analyseImportReference(
|
public Collection<? extends DeclarationDescriptor> analyseImportReference(
|
||||||
@@ -44,7 +51,7 @@ public class QualifiedExpressionResolver {
|
|||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
@NotNull ModuleConfiguration moduleConfiguration
|
@NotNull ModuleConfiguration moduleConfiguration
|
||||||
) {
|
) {
|
||||||
return processImportReference(importDirective, scope, scope, Importer.DO_NOTHING, trace, moduleConfiguration, false);
|
return processImportReference(importDirective, scope, scope, Importer.DO_NOTHING, trace, moduleConfiguration, LookupMode.EVERYTHING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -55,7 +62,7 @@ public class QualifiedExpressionResolver {
|
|||||||
@NotNull Importer importer,
|
@NotNull Importer importer,
|
||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
@NotNull ModuleConfiguration moduleConfiguration,
|
@NotNull ModuleConfiguration moduleConfiguration,
|
||||||
boolean onlyClasses
|
@NotNull LookupMode lookupMode
|
||||||
) {
|
) {
|
||||||
if (importDirective.isAbsoluteInRootNamespace()) {
|
if (importDirective.isAbsoluteInRootNamespace()) {
|
||||||
trace.report(UNSUPPORTED.on(importDirective, "TypeHierarchyResolver")); // TODO
|
trace.report(UNSUPPORTED.on(importDirective, "TypeHierarchyResolver")); // TODO
|
||||||
@@ -69,16 +76,20 @@ public class QualifiedExpressionResolver {
|
|||||||
Collection<? extends DeclarationDescriptor> descriptors;
|
Collection<? extends DeclarationDescriptor> descriptors;
|
||||||
if (importedReference instanceof JetQualifiedExpression) {
|
if (importedReference instanceof JetQualifiedExpression) {
|
||||||
//store result only when we find all descriptors, not only classes on the second phase
|
//store result only when we find all descriptors, not only classes on the second phase
|
||||||
descriptors = lookupDescriptorsForQualifiedExpression((JetQualifiedExpression)importedReference, scope, scopeToCheckVisibility, trace, onlyClasses, !onlyClasses);
|
descriptors = lookupDescriptorsForQualifiedExpression(
|
||||||
|
(JetQualifiedExpression)importedReference, scope, scopeToCheckVisibility, trace,
|
||||||
|
lookupMode, lookupMode == LookupMode.EVERYTHING);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert importedReference instanceof JetSimpleNameExpression;
|
assert importedReference instanceof JetSimpleNameExpression;
|
||||||
descriptors = lookupDescriptorsForSimpleNameReference((JetSimpleNameExpression)importedReference, scope, scopeToCheckVisibility, trace, onlyClasses, true, !onlyClasses);
|
descriptors = lookupDescriptorsForSimpleNameReference(
|
||||||
|
(JetSimpleNameExpression)importedReference, scope, scopeToCheckVisibility, trace,
|
||||||
|
lookupMode, true, lookupMode == LookupMode.EVERYTHING);
|
||||||
}
|
}
|
||||||
|
|
||||||
JetSimpleNameExpression referenceExpression = JetPsiUtil.getLastReference(importedReference);
|
JetSimpleNameExpression referenceExpression = JetPsiUtil.getLastReference(importedReference);
|
||||||
if (importDirective.isAllUnder()) {
|
if (importDirective.isAllUnder()) {
|
||||||
if (referenceExpression == null || !canImportMembersFrom(descriptors, referenceExpression, trace, onlyClasses)) {
|
if (referenceExpression == null || !canImportMembersFrom(descriptors, referenceExpression, trace, lookupMode)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,18 +112,20 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean canImportMembersFrom(@NotNull Collection<? extends DeclarationDescriptor> descriptors,
|
private boolean canImportMembersFrom(@NotNull Collection<? extends DeclarationDescriptor> descriptors,
|
||||||
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, boolean onlyClasses) {
|
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode
|
||||||
|
) {
|
||||||
|
|
||||||
if (onlyClasses) {
|
if (lookupMode == LookupMode.ONLY_CLASSES) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (descriptors.size() == 1) {
|
if (descriptors.size() == 1) {
|
||||||
return canImportMembersFrom(descriptors.iterator().next(), reference, trace, onlyClasses);
|
return canImportMembersFrom(descriptors.iterator().next(), reference, trace, lookupMode);
|
||||||
}
|
}
|
||||||
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace, "trace to find out if members can be imported from", reference);
|
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace, "trace to find out if members can be imported from", reference);
|
||||||
boolean canImport = false;
|
boolean canImport = false;
|
||||||
for (DeclarationDescriptor descriptor : descriptors) {
|
for (DeclarationDescriptor descriptor : descriptors) {
|
||||||
canImport |= canImportMembersFrom(descriptor, reference, temporaryTrace, onlyClasses);
|
canImport |= canImportMembersFrom(descriptor, reference, temporaryTrace, lookupMode);
|
||||||
}
|
}
|
||||||
if (!canImport) {
|
if (!canImport) {
|
||||||
temporaryTrace.commit();
|
temporaryTrace.commit();
|
||||||
@@ -121,9 +134,10 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean canImportMembersFrom(@NotNull DeclarationDescriptor descriptor,
|
private boolean canImportMembersFrom(@NotNull DeclarationDescriptor descriptor,
|
||||||
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, boolean onlyClasses) {
|
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode
|
||||||
|
) {
|
||||||
|
|
||||||
assert !onlyClasses;
|
assert lookupMode == LookupMode.EVERYTHING;
|
||||||
if (descriptor instanceof NamespaceDescriptor) {
|
if (descriptor instanceof NamespaceDescriptor) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -148,24 +162,26 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
JetUserType qualifier = userType.getQualifier();
|
JetUserType qualifier = userType.getQualifier();
|
||||||
if (qualifier == null) {
|
if (qualifier == null) {
|
||||||
return lookupDescriptorsForSimpleNameReference(referenceExpression, outerScope, outerScope, trace, true, false, true);
|
return lookupDescriptorsForSimpleNameReference(referenceExpression, outerScope, outerScope, trace, LookupMode.ONLY_CLASSES, false, true);
|
||||||
}
|
}
|
||||||
Collection<? extends DeclarationDescriptor> declarationDescriptors = lookupDescriptorsForUserType(qualifier, outerScope, trace);
|
Collection<? extends DeclarationDescriptor> declarationDescriptors = lookupDescriptorsForUserType(qualifier, outerScope, trace);
|
||||||
return lookupSelectorDescriptors(referenceExpression, declarationDescriptors, trace, outerScope, true, true);
|
return lookupSelectorDescriptors(referenceExpression, declarationDescriptors, trace, outerScope, LookupMode.ONLY_CLASSES, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForQualifiedExpression(@NotNull JetQualifiedExpression importedReference,
|
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForQualifiedExpression(@NotNull JetQualifiedExpression importedReference,
|
||||||
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, boolean onlyClasses, boolean storeResult) {
|
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode, boolean storeResult) {
|
||||||
|
|
||||||
JetExpression receiverExpression = importedReference.getReceiverExpression();
|
JetExpression receiverExpression = importedReference.getReceiverExpression();
|
||||||
Collection<? extends DeclarationDescriptor> declarationDescriptors;
|
Collection<? extends DeclarationDescriptor> declarationDescriptors;
|
||||||
if (receiverExpression instanceof JetQualifiedExpression) {
|
if (receiverExpression instanceof JetQualifiedExpression) {
|
||||||
declarationDescriptors = lookupDescriptorsForQualifiedExpression((JetQualifiedExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace, onlyClasses, storeResult);
|
declarationDescriptors = lookupDescriptorsForQualifiedExpression((JetQualifiedExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace,
|
||||||
|
lookupMode, storeResult);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert receiverExpression instanceof JetSimpleNameExpression;
|
assert receiverExpression instanceof JetSimpleNameExpression;
|
||||||
declarationDescriptors = lookupDescriptorsForSimpleNameReference((JetSimpleNameExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace, onlyClasses, true, storeResult);
|
declarationDescriptors = lookupDescriptorsForSimpleNameReference((JetSimpleNameExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace,
|
||||||
|
lookupMode, true, storeResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
JetExpression selectorExpression = importedReference.getSelectorExpression();
|
JetExpression selectorExpression = importedReference.getSelectorExpression();
|
||||||
@@ -175,37 +191,40 @@ public class QualifiedExpressionResolver {
|
|||||||
|
|
||||||
JetSimpleNameExpression selector = (JetSimpleNameExpression)selectorExpression;
|
JetSimpleNameExpression selector = (JetSimpleNameExpression)selectorExpression;
|
||||||
JetSimpleNameExpression lastReference = JetPsiUtil.getLastReference(receiverExpression);
|
JetSimpleNameExpression lastReference = JetPsiUtil.getLastReference(receiverExpression);
|
||||||
if (lastReference == null || !canImportMembersFrom(declarationDescriptors, lastReference, trace, onlyClasses)) {
|
if (lastReference == null || !canImportMembersFrom(declarationDescriptors, lastReference, trace, lookupMode)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return lookupSelectorDescriptors(selector, declarationDescriptors, trace, scopeToCheckVisibility, onlyClasses, storeResult);
|
return lookupSelectorDescriptors(selector, declarationDescriptors, trace, scopeToCheckVisibility, lookupMode, storeResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private Collection<? extends DeclarationDescriptor> lookupSelectorDescriptors(@NotNull JetSimpleNameExpression selector,
|
private Collection<? extends DeclarationDescriptor> lookupSelectorDescriptors(@NotNull JetSimpleNameExpression selector,
|
||||||
@NotNull Collection<? extends DeclarationDescriptor> declarationDescriptors, @NotNull BindingTrace trace,
|
@NotNull Collection<? extends DeclarationDescriptor> declarationDescriptors, @NotNull BindingTrace trace,
|
||||||
@NotNull JetScope scopeToCheckVisibility, boolean onlyClasses, boolean storeResult) {
|
@NotNull JetScope scopeToCheckVisibility, @NotNull LookupMode lookupMode, boolean storeResult) {
|
||||||
|
|
||||||
Set<SuccessfulLookupResult> results = Sets.newHashSet();
|
Set<SuccessfulLookupResult> results = Sets.newHashSet();
|
||||||
for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) {
|
for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) {
|
||||||
if (declarationDescriptor instanceof NamespaceDescriptor) {
|
if (declarationDescriptor instanceof NamespaceDescriptor) {
|
||||||
addResult(results, lookupSimpleNameReference(selector, ((NamespaceDescriptor)declarationDescriptor).getMemberScope(), onlyClasses, true));
|
addResult(results, lookupSimpleNameReference(selector, ((NamespaceDescriptor)declarationDescriptor).getMemberScope(),
|
||||||
|
lookupMode, true));
|
||||||
}
|
}
|
||||||
if (declarationDescriptor instanceof ClassDescriptor) {
|
if (declarationDescriptor instanceof ClassDescriptor) {
|
||||||
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope((ClassDescriptor)declarationDescriptor, onlyClasses), onlyClasses, false));
|
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope((ClassDescriptor)declarationDescriptor,
|
||||||
|
lookupMode), lookupMode, false));
|
||||||
ClassDescriptor classObjectDescriptor = ((ClassDescriptor)declarationDescriptor).getClassObjectDescriptor();
|
ClassDescriptor classObjectDescriptor = ((ClassDescriptor)declarationDescriptor).getClassObjectDescriptor();
|
||||||
if (classObjectDescriptor != null) {
|
if (classObjectDescriptor != null) {
|
||||||
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope(classObjectDescriptor, onlyClasses), onlyClasses, false));
|
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope(classObjectDescriptor, lookupMode),
|
||||||
|
lookupMode, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return filterAndStoreResolutionResult(results, selector, trace, scopeToCheckVisibility, onlyClasses, storeResult);
|
return filterAndStoreResolutionResult(results, selector, trace, scopeToCheckVisibility, lookupMode, storeResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private JetScope getAppropriateScope(@NotNull ClassDescriptor classDescriptor, boolean onlyClasses) {
|
private JetScope getAppropriateScope(@NotNull ClassDescriptor classDescriptor, @NotNull LookupMode lookupMode) {
|
||||||
return onlyClasses ? classDescriptor.getUnsubstitutedInnerClassesScope() : classDescriptor.getDefaultType().getMemberScope();
|
return lookupMode == LookupMode.ONLY_CLASSES ? classDescriptor.getUnsubstitutedInnerClassesScope() : classDescriptor.getDefaultType().getMemberScope();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addResult(@NotNull Set<SuccessfulLookupResult> results, @NotNull LookupResult result) {
|
private void addResult(@NotNull Set<SuccessfulLookupResult> results, @NotNull LookupResult result) {
|
||||||
@@ -216,17 +235,18 @@ public class QualifiedExpressionResolver {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression,
|
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression,
|
||||||
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, boolean onlyClasses, boolean namespaceLevel, boolean storeResult) {
|
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode, boolean namespaceLevel, boolean storeResult) {
|
||||||
|
|
||||||
LookupResult lookupResult = lookupSimpleNameReference(referenceExpression, outerScope, onlyClasses, namespaceLevel);
|
LookupResult lookupResult = lookupSimpleNameReference(referenceExpression, outerScope, lookupMode, namespaceLevel);
|
||||||
if (lookupResult == LookupResult.EMPTY) return Collections.emptyList();
|
if (lookupResult == LookupResult.EMPTY) return Collections.emptyList();
|
||||||
return filterAndStoreResolutionResult(Collections.singletonList((SuccessfulLookupResult)lookupResult), referenceExpression, trace, scopeToCheckVisibility,
|
return filterAndStoreResolutionResult(Collections.singletonList((SuccessfulLookupResult)lookupResult), referenceExpression, trace, scopeToCheckVisibility,
|
||||||
onlyClasses, storeResult);
|
lookupMode, storeResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private LookupResult lookupSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression,
|
private LookupResult lookupSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression,
|
||||||
@NotNull JetScope outerScope, boolean onlyClasses, boolean namespaceLevel) {
|
@NotNull JetScope outerScope, @NotNull LookupMode lookupMode, boolean namespaceLevel) {
|
||||||
|
|
||||||
Name referencedName = referenceExpression.getReferencedNameAsName();
|
Name referencedName = referenceExpression.getReferencedNameAsName();
|
||||||
|
|
||||||
Set<DeclarationDescriptor> descriptors = Sets.newHashSet();
|
Set<DeclarationDescriptor> descriptors = Sets.newHashSet();
|
||||||
@@ -240,7 +260,7 @@ public class QualifiedExpressionResolver {
|
|||||||
descriptors.add(classifierDescriptor);
|
descriptors.add(classifierDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onlyClasses) {
|
if (lookupMode == LookupMode.ONLY_CLASSES) {
|
||||||
ClassDescriptor objectDescriptor = outerScope.getObjectDescriptor(referencedName);
|
ClassDescriptor objectDescriptor = outerScope.getObjectDescriptor(referencedName);
|
||||||
if (objectDescriptor != null) {
|
if (objectDescriptor != null) {
|
||||||
descriptors.add(objectDescriptor);
|
descriptors.add(objectDescriptor);
|
||||||
@@ -261,7 +281,7 @@ public class QualifiedExpressionResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private Collection<? extends DeclarationDescriptor> filterAndStoreResolutionResult(@NotNull Collection<SuccessfulLookupResult> lookupResults,
|
private Collection<? extends DeclarationDescriptor> filterAndStoreResolutionResult(@NotNull Collection<SuccessfulLookupResult> lookupResults,
|
||||||
@NotNull JetSimpleNameExpression referenceExpression, @NotNull final BindingTrace trace, @NotNull JetScope scopeToCheckVisibility,
|
@NotNull JetSimpleNameExpression referenceExpression, @NotNull final BindingTrace trace, @NotNull JetScope scopeToCheckVisibility,
|
||||||
boolean onlyClasses, boolean storeResult) {
|
@NotNull LookupMode lookupMode, boolean storeResult) {
|
||||||
|
|
||||||
if (lookupResults.isEmpty()) {
|
if (lookupResults.isEmpty()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -284,7 +304,7 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Collection<DeclarationDescriptor> filteredDescriptors;
|
Collection<DeclarationDescriptor> filteredDescriptors;
|
||||||
if (onlyClasses) {
|
if (lookupMode == LookupMode.ONLY_CLASSES) {
|
||||||
filteredDescriptors = Collections2.filter(descriptors, new Predicate<DeclarationDescriptor>() {
|
filteredDescriptors = Collections2.filter(descriptors, new Predicate<DeclarationDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(@Nullable DeclarationDescriptor descriptor) {
|
public boolean apply(@Nullable DeclarationDescriptor descriptor) {
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ import org.jetbrains.jet.util.QualifiedNamesUtil;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver.LookupMode;
|
||||||
|
|
||||||
public class ResolveSessionUtils {
|
public class ResolveSessionUtils {
|
||||||
|
|
||||||
// This name is used as a key for the case when something has no name _due to a syntactic error_
|
// This name is used as a key for the case when something has no name _due to a syntactic error_
|
||||||
@@ -285,11 +287,11 @@ public class ResolveSessionUtils {
|
|||||||
|
|
||||||
if (element instanceof JetDotQualifiedExpression) {
|
if (element instanceof JetDotQualifiedExpression) {
|
||||||
descriptors = qualifiedExpressionResolver.lookupDescriptorsForQualifiedExpression(
|
descriptors = qualifiedExpressionResolver.lookupDescriptorsForQualifiedExpression(
|
||||||
(JetDotQualifiedExpression) element, rootPackage.getMemberScope(), scope, trace, false, false);
|
(JetDotQualifiedExpression) element, rootPackage.getMemberScope(), scope, trace, LookupMode.EVERYTHING, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
descriptors = qualifiedExpressionResolver.lookupDescriptorsForSimpleNameReference(
|
descriptors = qualifiedExpressionResolver.lookupDescriptorsForSimpleNameReference(
|
||||||
(JetSimpleNameExpression) element, rootPackage.getMemberScope(), scope, trace, false, false, false);
|
(JetSimpleNameExpression) element, rootPackage.getMemberScope(), scope, trace, LookupMode.EVERYTHING, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (DeclarationDescriptor descriptor : descriptors) {
|
for (DeclarationDescriptor descriptor : descriptors) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.*;
|
import org.jetbrains.jet.lang.resolve.scopes.*;
|
||||||
|
|
||||||
@@ -78,7 +79,7 @@ public class ScopeProvider {
|
|||||||
fileScope.importScope(rootPackageDescriptor.getMemberScope());
|
fileScope.importScope(rootPackageDescriptor.getMemberScope());
|
||||||
}
|
}
|
||||||
|
|
||||||
ImportsResolver.processImportsInFile(true, fileScope, Lists.newArrayList(file.getImportDirectives()),
|
ImportsResolver.processImportsInFile(QualifiedExpressionResolver.LookupMode.ONLY_CLASSES, fileScope, Lists.newArrayList(file.getImportDirectives()),
|
||||||
rootPackageDescriptor.getMemberScope(),
|
rootPackageDescriptor.getMemberScope(),
|
||||||
resolveSession.getModuleConfiguration(), resolveSession.getTrace(),
|
resolveSession.getModuleConfiguration(), resolveSession.getTrace(),
|
||||||
resolveSession.getInjector().getQualifiedExpressionResolver(),
|
resolveSession.getInjector().getQualifiedExpressionResolver(),
|
||||||
@@ -119,7 +120,7 @@ public class ScopeProvider {
|
|||||||
|
|
||||||
fileMemberScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
fileMemberScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
|
|
||||||
ImportsResolver.processImportsInFile(false, fileMemberScope, Lists.newArrayList(file.getImportDirectives()),
|
ImportsResolver.processImportsInFile(QualifiedExpressionResolver.LookupMode.EVERYTHING, fileMemberScope, Lists.newArrayList(file.getImportDirectives()),
|
||||||
rootPackageDescriptor.getMemberScope(),
|
rootPackageDescriptor.getMemberScope(),
|
||||||
resolveSession.getModuleConfiguration(), resolveSession.getTrace(),
|
resolveSession.getModuleConfiguration(), resolveSession.getTrace(),
|
||||||
resolveSession.getInjector().getQualifiedExpressionResolver(),
|
resolveSession.getInjector().getQualifiedExpressionResolver(),
|
||||||
|
|||||||
Reference in New Issue
Block a user