package de.ovgu.cide.typing.jdt.checks.resolutions; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTVisitor; import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.ImportDeclaration; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.PackageDeclaration; import org.eclipse.jdt.core.dom.Type; import org.eclipse.jdt.core.dom.TypeDeclaration; import org.eclipse.jdt.core.dom.TypeParameter; import org.eclipse.jdt.core.dom.VariableDeclaration; public class ASTBindingFinder extends ASTVisitor { ASTBindingFinder(String bindingKey) { this.target = bindingKey; } private ASTNode result = null; private final String target; public boolean visit(TypeDeclaration node) { if (result != null) return false; IBinding binding = node.resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; return super.visit(node); } public boolean visit(MethodDeclaration node) { if (result != null) return false; IBinding binding = node.resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; return super.visit(node); } public boolean visit(ImportDeclaration node) { if (result != null) return false; IBinding binding = node.resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; return super.visit(node); } public boolean visit(PackageDeclaration node) { if (result != null) return false; IBinding binding = node.resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; return super.visit(node); } public boolean visit(TypeParameter node) { if (result != null) return false; IBinding binding = node.resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; return super.visit(node); } public void preVisit(ASTNode node) { if (node instanceof Type) { if (result != null) return; IBinding binding = ((Type) node).resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; } if (node instanceof VariableDeclaration) { if (result != null) return; IBinding binding = ((VariableDeclaration) node).resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; } if (node instanceof AbstractTypeDeclaration) { if (result != null) return; IBinding binding = ((AbstractTypeDeclaration) node).resolveBinding(); if (binding != null && binding.getKey().equals(target)) result = node; } super.preVisit(node); } public ASTNode getResult() { return result; } }