package com.redhat.ceylon.eclipse.util;
import static com.redhat.ceylon.compiler.typechecker.tree.TreeUtil.formatPath;
import com.redhat.ceylon.model.typechecker.model.Declaration;
import com.redhat.ceylon.model.typechecker.model.Referenceable;
import com.redhat.ceylon.compiler.typechecker.tree.Node;
import com.redhat.ceylon.compiler.typechecker.tree.Tree;
import com.redhat.ceylon.compiler.typechecker.tree.Visitor;
@Deprecated
public class FindDeclarationNodeVisitor extends Visitor {
private final Referenceable declaration;
protected Tree.StatementOrArgument declarationNode;
public FindDeclarationNodeVisitor(Referenceable declaration) {
this.declaration = declaration;
}
public Tree.StatementOrArgument getDeclarationNode() {
return declarationNode;
}
private boolean isDeclaration(Declaration dec) {
return dec!=null && dec.equals(declaration);
}
@Override
public void visit(Tree.Declaration that) {
if (isDeclaration(that.getDeclarationModel())) {
declarationNode = that;
}
super.visit(that);
}
@Override
public void visit(Tree.ObjectDefinition that) {
if (isDeclaration(that.getDeclarationModel().getTypeDeclaration())) {
declarationNode = that;
}
super.visit(that);
}
@Override
public void visit(Tree.ModuleDescriptor that) {
if (formatPath(that.getImportPath().getIdentifiers())
.equals(declaration.getNameAsString())) {
declarationNode = that;
}
super.visit(that);
}
@Override
public void visit(Tree.PackageDescriptor that) {
if (formatPath(that.getImportPath().getIdentifiers())
.equals(declaration.getNameAsString())) {
declarationNode = that;
}
super.visit(that);
}
public void visitAny(Node node) {
if (declarationNode==null) {
super.visitAny(node);
}
}
}