Namespace aliases fixed

This commit is contained in:
Andrey Breslav
2011-10-13 15:06:12 +04:00
parent a1be8afd61
commit d0c2c82197
4 changed files with 21 additions and 3 deletions
@@ -256,6 +256,9 @@ public class TypeHierarchyResolver {
} }
String aliasName = importDirective.getAliasName(); String aliasName = importDirective.getAliasName();
if (aliasName == null) {
aliasName = referenceExpression != null ? referenceExpression.getReferencedName() : null;
}
if (classifierDescriptor != null) { if (classifierDescriptor != null) {
context.getTrace().record(BindingContext.REFERENCE_TARGET, referenceExpression, classifierDescriptor); context.getTrace().record(BindingContext.REFERENCE_TARGET, referenceExpression, classifierDescriptor);
@@ -27,9 +27,13 @@ public class WritableScopeImpl extends WritableScopeWithImports {
@Nullable @Nullable
private SetMultimap<String, FunctionDescriptor> functionGroups; private SetMultimap<String, FunctionDescriptor> functionGroups;
@Nullable @Nullable
private Map<String, DeclarationDescriptor> variableClassOrNamespaceDescriptors; private Map<String, DeclarationDescriptor> variableClassOrNamespaceDescriptors;
@Nullable
private Map<String, NamespaceDescriptor> namespaceAliases;
@Nullable @Nullable
private Map<String, List<DeclarationDescriptor>> labelsToDescriptors; private Map<String, List<DeclarationDescriptor>> labelsToDescriptors;
@@ -129,6 +133,14 @@ public class WritableScopeImpl extends WritableScopeWithImports {
return variableClassOrNamespaceDescriptors; return variableClassOrNamespaceDescriptors;
} }
@NotNull
private Map<String, NamespaceDescriptor> getNamespaceAliases() {
if (namespaceAliases == null) {
namespaceAliases = Maps.newHashMap();
}
return namespaceAliases;
}
@Override @Override
public void addVariableDescriptor(@NotNull VariableDescriptor variableDescriptor) { public void addVariableDescriptor(@NotNull VariableDescriptor variableDescriptor) {
Map<String, DeclarationDescriptor> variableClassOrNamespaceDescriptors = getVariableClassOrNamespaceDescriptors(); Map<String, DeclarationDescriptor> variableClassOrNamespaceDescriptors = getVariableClassOrNamespaceDescriptors();
@@ -203,7 +215,7 @@ public class WritableScopeImpl extends WritableScopeWithImports {
@Override @Override
public void addNamespaceAlias(@NotNull String name, @NotNull NamespaceDescriptor namespaceDescriptor) { public void addNamespaceAlias(@NotNull String name, @NotNull NamespaceDescriptor namespaceDescriptor) {
checkForRedeclaration(name, namespaceDescriptor); checkForRedeclaration(name, namespaceDescriptor);
getVariableClassOrNamespaceDescriptors().put(name, namespaceDescriptor); getNamespaceAliases().put(name, namespaceDescriptor);
allDescriptors.add(namespaceDescriptor); allDescriptors.add(namespaceDescriptor);
} }
@@ -258,6 +270,9 @@ public class WritableScopeImpl extends WritableScopeWithImports {
NamespaceDescriptor declaredNamespace = getDeclaredNamespace(name); NamespaceDescriptor declaredNamespace = getDeclaredNamespace(name);
if (declaredNamespace != null) return declaredNamespace; if (declaredNamespace != null) return declaredNamespace;
NamespaceDescriptor aliased = getNamespaceAliases().get(name);
if (aliased != null) return aliased;
NamespaceDescriptor namespace = getWorkerScope().getNamespace(name); NamespaceDescriptor namespace = getWorkerScope().getNamespace(name);
if (namespace != null) return namespace; if (namespace != null) return namespace;
return super.getNamespace(name); return super.getNamespace(name);
+2 -2
View File
@@ -55,10 +55,10 @@ namespace null_safety {
val command = parse("") val command = parse("")
command<error>.</error>foo command.foo
command.equals(null) command.equals(null)
command<warning>?.</warning>equals(null) command?.equals(null)
command.equals1(null) command.equals1(null)
command<warning>?.</warning>equals1(null) command<warning>?.</warning>equals1(null)