]> git.uio.no Git - ifi-stolz-refaktor.git/blob - software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/extractors/ExtractAndMoveMethodPrefixesExtractor.java
ed28b3b69f0e4df5aab0f8bf19c88e2c73e615f2
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor / src / no / uio / ifi / refaktor / extractors / ExtractAndMoveMethodPrefixesExtractor.java
1 package no.uio.ifi.refaktor.extractors;
2
3 import no.uio.ifi.refaktor.utils.RefaktorDebug;
4 import no.uio.ifi.refaktor.utils.SmartTextSelection;
5
6 import org.eclipse.jdt.core.ICompilationUnit;
7 import org.eclipse.jdt.core.dom.ASTNode;
8 import org.eclipse.jdt.core.dom.Assignment;
9 import org.eclipse.jdt.core.dom.Expression;
10 import org.eclipse.jdt.core.dom.ExpressionStatement;
11 import org.eclipse.jdt.core.dom.Name;
12 import org.eclipse.jdt.core.dom.SimpleName;
13
14 public class ExtractAndMoveMethodPrefixesExtractor extends UnionOfLongestCommonPrefixesExtractor {
15
16         private final PrefixSet unfixes = new PrefixSet();
17         private PrefixSet safePrefixes = null;
18
19         public ExtractAndMoveMethodPrefixesExtractor(SmartTextSelection selection, ICompilationUnit icu) {
20                 super(selection, icu);
21         }
22         
23         @Override
24         public boolean visit(Assignment node) {
25                 if (!nodeInSelection(node))
26                         return false;
27
28                 addLeftHandSideToUnfixesIfSimpleName(node);
29                 return true;
30         }
31
32         private void addLeftHandSideToUnfixesIfSimpleName(Assignment node) {
33                 Expression lhs = node.getLeftHandSide();
34                 assert lhs instanceof Name;
35                 Name name = (Name) lhs;
36                 if (name.isSimpleName()) {
37                         SimpleName simpleName = (SimpleName) name;
38                         ASTNode parent = node.getParent();
39                         assert parent instanceof ExpressionStatement;
40                         Prefix p = new Prefix(simpleName, (ExpressionStatement) parent, getDocument());
41                         RefaktorDebug.println("Unfix string: " + p.toString());
42                         unfixes.add(p);
43                 }
44         }
45         
46         public PrefixSet getSafePrefixes() {
47                 if (safePrefixes == null) {
48                         safePrefixes = createSafePrefixes();
49                 }
50                 return safePrefixes;
51         }
52
53         private PrefixSet createSafePrefixes() {
54                 return getPrefixSet().minusShadowedPrefixes(unfixes);
55         }
56
57         @Override
58         public boolean hasUsefulResults() {
59                 return !getSafePrefixes().isEmpty();
60         }
61 }