package dk.brics.jsrefactoring.nodes;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import dk.brics.jsparser.AstUtil;
import dk.brics.jsparser.Literals;
import dk.brics.jsparser.node.ACatchClause;
import dk.brics.jsparser.node.TId;
import dk.brics.jsrefactoring.Master;
import dk.brics.jsrefactoring.hosts.ScopeHost;
public class CatchAccess extends AccessVariable {
private ACatchClause node;
public CatchAccess(ACatchClause node) {
this.node = node;
}
@Override
public List<ScopeHost> getSearchedScopes(Master input, String name) {
return ScopeHost.getScopeChain(name, input.getCatchScope(node));
}
@Override
public Set<ScopeHost> getAffectedScopes(Master input, String name) {
List<ScopeHost> searchedScopes = getSearchedScopes(input, name);
return Collections.singleton(searchedScopes.get(searchedScopes.size() - 1));
}
@Override
public ACatchClause getNode() {
return node;
}
@Override
public String getName() {
return Literals.parseIdentifier(node.getName().getText());
}
@Override
public void replaceName(String newName) {
AstUtil.replaceNode(node.getName(), new TId(newName));
}
@Override
public boolean isPrototypeSensitive() {
return false;
}
@Override
public boolean isLValue() {
return true;
}
@Override
public boolean isRValue() {
return false;
}
@Override
public <Q, A> A apply(AccessWithNameVisitor<Q, A> v, Q arg) {
return v.caseCatch(this, arg);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((node == null) ? 0 : node.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CatchAccess other = (CatchAccess) obj;
if (node == null) {
if (other.node != null)
return false;
} else if (!node.equals(other.node))
return false;
return true;
}
}