1 package no.uio.ifi.refaktor.analyze;
3 import java.util.regex.Matcher;
4 import java.util.regex.Pattern;
6 import org.eclipse.jdt.core.dom.ASTNode;
7 import org.eclipse.jdt.core.dom.ASTVisitor;
8 import org.eclipse.jdt.core.dom.IBinding;
9 import org.eclipse.jdt.core.dom.IVariableBinding;
10 import org.eclipse.jdt.core.dom.SimpleName;
12 public class VariableBindingFinder extends ASTVisitor {
13 private final String bindingKey;
14 private final Pattern pattern;
15 private final String keyGroupOne;
16 private final String keyGroupTwo;
17 private boolean bindingFound;
18 private IVariableBinding variableBinding;
20 public VariableBindingFinder(String bindingKey) {
21 this.bindingKey = bindingKey;
23 pattern = Pattern.compile("^([^$]+)\\$\\d+[$;](.+)$");
25 Matcher bindingKeyMatcher = pattern.matcher(bindingKey);
27 if (bindingKeyMatcher.matches()) {
28 keyGroupOne = bindingKeyMatcher.group(1);
29 keyGroupTwo = bindingKeyMatcher.group(2);
37 public boolean visit(SimpleName node) {
38 IBinding binding = node.resolveBinding();
40 if (!(binding instanceof IVariableBinding))
43 if (perfectMatch(binding) || bindingPartiallyMatchesOriginalKey(binding)) {
44 variableBinding = (IVariableBinding) binding;
51 private boolean perfectMatch(IBinding binding) {
52 return binding.getKey().equals(bindingKey);
55 private boolean bindingPartiallyMatchesOriginalKey(IBinding binding) {
56 Matcher matcher = pattern.matcher(binding.getKey());
57 return matcher.matches() && keyGroupOne.equals(matcher.group(1)) && keyGroupTwo.equals(matcher.group(2));
61 public boolean preVisit2(ASTNode node) {
65 public IVariableBinding getVariableBinding() {
66 return variableBinding;