/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.frontend.typechecker;
import java.util.LinkedList;
import java.util.List;
import abs.frontend.ast.AmbiguousDecl;
import abs.frontend.ast.Decl;
public class ResolvedAmbigiousName extends ResolvedName {
private List<ResolvedName> alternatives = new LinkedList<ResolvedName>();
public ResolvedAmbigiousName(ResolvedName alternative1, ResolvedName alternative2) {
addAlternative(alternative1);
addAlternative(alternative2);
}
private void addAlternative(ResolvedName alternative) {
if (alternative instanceof ResolvedAmbigiousName) {
ResolvedAmbigiousName resolvedAmbigiousName = (ResolvedAmbigiousName) alternative;
alternatives.addAll(resolvedAmbigiousName.alternatives);
} else {
alternatives.add(alternative);
}
}
@Override
public KindedName getQualifiedName() {
return getFirstAlternative().getQualifiedName();
}
public ResolvedName getFirstAlternative() {
return alternatives.get(0);
}
@Override
public ResolvedModuleName getModuleName() {
return getFirstAlternative().getModuleName();
}
@Override
public Decl getDecl() {
return new AmbiguousDecl("", getAlternatives());
}
private List<Decl> getAlternatives() {
List<Decl> result = new LinkedList<Decl>();
for (ResolvedName r : alternatives) {
result.add(r.getDecl());
}
return result;
}
}