1 package no.uio.ifi.refaktor.extractors;
3 import no.uio.ifi.refaktor.utils.RefaktorDebug;
4 import no.uio.ifi.refaktor.utils.SmartTextSelection;
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;
14 public class ExtractAndMoveMethodPrefixesExtractor extends UnionOfLongestCommonPrefixesExtractor {
16 private final PrefixSet unfixes = new PrefixSet();
17 private PrefixSet safePrefixes = null;
19 public ExtractAndMoveMethodPrefixesExtractor(SmartTextSelection selection, ICompilationUnit icu) {
20 super(selection, icu);
24 public boolean visit(Assignment node) {
25 if (!nodeInSelection(node))
28 addLeftHandSideToUnfixesIfSimpleName(node);
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());
46 public PrefixSet getSafePrefixes() {
47 if (safePrefixes == null) {
48 safePrefixes = createSafePrefixes();
53 private PrefixSet createSafePrefixes() {
54 return getPrefixSet().minusShadowedPrefixes(unfixes);
58 public boolean hasUsefulResults() {
59 return !getSafePrefixes().isEmpty();