]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/refaktor-after/src/no/uio/ifi/refaktor/analyze/VariableBindingFinder.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / refaktor-after / src / no / uio / ifi / refaktor / analyze / VariableBindingFinder.java
CommitLineData
1b2798f6
EK
1package no.uio.ifi.refaktor.analyze;
2
3import java.util.regex.Matcher;
4import java.util.regex.Pattern;
5
6import org.eclipse.jdt.core.dom.ASTNode;
7import org.eclipse.jdt.core.dom.ASTVisitor;
8import org.eclipse.jdt.core.dom.IBinding;
9import org.eclipse.jdt.core.dom.IVariableBinding;
10import org.eclipse.jdt.core.dom.SimpleName;
11
12public 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;
19
20 public VariableBindingFinder(String bindingKey) {
21 this.bindingKey = bindingKey;
22 bindingFound = false;
23 pattern = Pattern.compile("^([^$]+)\\$\\d+[$;](.+)$");
24
25 Matcher bindingKeyMatcher = pattern.matcher(bindingKey);
26
27 if (bindingKeyMatcher.matches()) {
28 keyGroupOne = bindingKeyMatcher.group(1);
29 keyGroupTwo = bindingKeyMatcher.group(2);
30 } else {
31 keyGroupOne = "";
32 keyGroupTwo = "";
33 }
34 }
35
36 @Override
37 public boolean visit(SimpleName node) {
38 IBinding binding = node.resolveBinding();
39
40 if (!(binding instanceof IVariableBinding))
41 return false;
42
43 if (perfectMatch(binding) || bindingPartiallyMatchesOriginalKey(binding)) {
44 variableBinding = (IVariableBinding) binding;
45 bindingFound = true;
46 }
47
48 return false;
49 }
50
51 private boolean perfectMatch(IBinding binding) {
52 return binding.getKey().equals(bindingKey);
53 }
54
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));
58 }
59
60 @Override
61 public boolean preVisit2(ASTNode node) {
62 return !bindingFound;
63 }
64
65 public IVariableBinding getVariableBinding() {
66 return variableBinding;
67 }
68}