]> git.uio.no Git - ifi-stolz-refaktor.git/commitdiff
skeleton done!
authorAnna Eilertsen <anna.eilertsen@student.uib.no>
Fri, 16 Oct 2015 13:41:58 +0000 (15:41 +0200)
committerAnna Eilertsen <anna.eilertsen@student.uib.no>
Fri, 16 Oct 2015 13:41:58 +0000 (15:41 +0200)
13 files changed:
software/no.uio.ifi.refaktor.tests/src/no/uio/ifi/refaktor/tests/SearchBasedExtractAndMoveMethodAnalyzerTest.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/ExtractLocalVariableCandidate.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/SearchBasedExtractLocalVariableAnalyzer.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/analyzers/ExtractLocalVariableAnalyzer.java [new file with mode: 0644]
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/analyzers/TypeWideExtractAndMoveMethodAnalyzer.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/ExtractLocalVariableCandidateComparator.java [new file with mode: 0644]
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/FavorNoUnfixesExtractAndMoveCandidateComparator.java [moved from software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/FavorNoUnfixesCandidateComparator.java with 90% similarity]
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/FavorNoUnfixesExtractLocalVariableCandidateComparator.java [new file with mode: 0644]
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/change/SearchBasedExtractLocalVariableWithAssertsChanger.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/change/changers/SearchBasedExtractAndMoveMethodChanger.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/handlers/SearchBasedExtractAndMoveMethodAnalysisHandler.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/handlers/SearchBasedExtractLocalVariableWithAssertsHandler.java
software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/refactorings/visitors/InsertAssertsVisitor.java

index fbc0b920f87dbaeb4ca4e737e851d91dd5247cf2..9af590efb0235f517a32953f1d4d8c215a69e19b 100644 (file)
@@ -5,7 +5,7 @@ import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertTrue;
 import no.uio.ifi.refaktor.analyze.analyzers.Analyzer;
 import no.uio.ifi.refaktor.analyze.analyzers.SearchBasedExtractAndMoveMethodAnalyzer;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractAndMoveCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.NoTargetFoundException;
 import no.uio.ifi.refaktor.examples.manager.ExampleCodeManager;
 import no.uio.ifi.refaktor.prefix.Prefix;
@@ -66,7 +66,7 @@ public class SearchBasedExtractAndMoveMethodAnalyzerTest {
        public void testSearchableMethodFavorNoUnfixes() throws Exception {
                IMethod method = getTestDataMethod("searchableMethod");
 
-               SearchBasedExtractAndMoveMethodAnalyzer analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesCandidateComparator());
+               SearchBasedExtractAndMoveMethodAnalyzer analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesExtractAndMoveCandidateComparator());
                analyzer.analyze();
 
                int methodOffset = method.getSourceRange().getOffset();
index a253a96140207677703e9628045bf9d6551ff51b..74be576f0fd8ca93e3cae78293b7c5259bf89caf 100644 (file)
@@ -1,5 +1,154 @@
 package no.uio.ifi.refaktor.analyze;
 
+import no.uio.ifi.refaktor.analyze.analyzers.ExtractAndMoveMethodAnalyzer;
+import no.uio.ifi.refaktor.analyze.analyzers.ExtractLocalVariableAnalyzer;
+import no.uio.ifi.refaktor.change.changers.ExtractAndMoveMethodChanger;
+import no.uio.ifi.refaktor.change.exceptions.RefactoringNotExecutedException;
+import no.uio.ifi.refaktor.prefix.Prefix;
+import no.uio.ifi.refaktor.prefix.PrefixSet;
+import no.uio.ifi.refaktor.textselection.CompilationUnitTextSelection;
+import no.uio.ifi.refaktor.textselection.MethodRelativeCompilationUnitTextSelection;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IVariableBinding;
+
+/**
+ * Currently does exactly the same thing as ExtractAndMoveMethodCandidate
+ * 
+ * TODO make common abstract class
+ * TODO work on analyzer
+ * 
+ * @author Anna Eilertsen
+ *
+ */
 public class ExtractLocalVariableCandidate {
 
-}
+               private class CandidateDataCalculator {
+                       private final ExtractLocalVariableAnalyzer analyzer;
+                       private Prefix mostFrequentPrefix;
+
+                       public CandidateDataCalculator(ExtractLocalVariableAnalyzer analyzer) {
+                               this.analyzer = analyzer;
+                               mostFrequentPrefix = analyzer.calculateMostFrequentPrefix();
+                       }
+
+                       public boolean hasMoreThanOnePossibleTarget() {
+                               PrefixSet safePrefixes = analyzer.calculateSafePrefixes();
+                               IBinding binding = safePrefixes.toList().getFirst().getVariableBindingOfFirstExpression();
+                               for (Prefix prefix: safePrefixes) {
+                                       if (!prefix.getVariableBindingOfFirstExpression().isEqualTo(binding))
+                                               return true;
+                               }
+                               return false;
+                       }
+
+                       public int getTargetFrequency() {
+                               if (hasMoreThanOnePossibleTarget())
+                                       ; // TODO: throw exception?
+                               return mostFrequentPrefix.getCount();
+                       }
+
+                       public boolean hasNoUnfixes() {
+                               return analyzer.getUnfixes().isEmpty();
+                       }
+
+                       public String calculateOriginalTargetKey() {
+                               return analyzer.calculateOriginalTarget().getKey();
+                       }
+
+                       public int getPrefixTargetSegmentCount() {
+                               return mostFrequentPrefix.getNumberOfSegments();
+                       }
+                       
+               }
+
+               public final CompilationUnitTextSelection textSelection;
+               public final int numberOfStatementsAnalyzed;
+               public final int numberOfTextSelectionsAnalyzed;
+               public final IMethod method;
+
+               private final boolean hasMoreThanOnePossibleTarget;
+               private final int targetFrequency;
+               private final boolean hasNoUnfixes;
+               private final String originalTargetKey;
+               private int targetPrefixSegmentCount;
+
+               public ExtractLocalVariableCandidate(IMethod method, ExtractLocalVariableAnalyzer analyzer, CompilationUnitTextSelection textSelection, int numberOfStatementsAnalyzed, int numberOfTextSelectionsAnalyzed) {
+                       this.method = method;
+                       this.textSelection = new MethodRelativeCompilationUnitTextSelection(method, textSelection);
+                       this.numberOfStatementsAnalyzed = numberOfStatementsAnalyzed;
+                       this.numberOfTextSelectionsAnalyzed = numberOfTextSelectionsAnalyzed;
+
+                       CandidateDataCalculator calculator = new CandidateDataCalculator(analyzer);
+                       hasMoreThanOnePossibleTarget = calculator.hasMoreThanOnePossibleTarget();
+                       targetFrequency = calculator.getTargetFrequency();
+                       hasNoUnfixes = calculator.hasNoUnfixes();
+                       originalTargetKey = calculator.calculateOriginalTargetKey();
+                       targetPrefixSegmentCount = calculator.getPrefixTargetSegmentCount();
+               }
+
+               public boolean hasMoreThanOnePossibleTarget() {
+                       return hasMoreThanOnePossibleTarget;
+               }
+
+               public boolean hasOnlyOnePossibleTarget() {
+                       return !hasMoreThanOnePossibleTarget();
+               }
+
+               public int getTargetFrequency() {
+                       return targetFrequency;
+               }
+
+               public boolean hasNoUnfixes() {
+                       return hasNoUnfixes;
+               }
+
+               public boolean hasUnfixes() {
+                       return !hasNoUnfixes();
+               }
+
+               public IVariableBinding calculateOriginalTarget() {
+                       return restoreOriginalTarget();
+               }
+
+               private IVariableBinding restoreOriginalTarget() {
+                       try {
+                               VariableBindingFinder variableBindingFinder = new VariableBindingFinder(originalTargetKey);
+                               textSelection.getCoveringNode().accept(variableBindingFinder);
+                               String assertMessage = "Text selection: " + textSelection + ", Original target key: " + originalTargetKey;
+                               assert variableBindingFinder.getVariableBinding() != null: assertMessage;
+                               return variableBindingFinder.getVariableBinding();
+                       } catch (NullPointerException e) {
+                               // TODO: revisit
+                               throw new RefactoringNotExecutedException(this.getClass().getCanonicalName(), e);
+                       }
+               }
+
+               @Override
+               public String toString() {
+                       return "Result for '" + method.getDeclaringType().getFullyQualifiedName() + "." + method.getElementName() + "' (" + numberOfStatementsAnalyzed + " statements analyzed): < " + textSelection + " >";
+               }
+
+               public String getNewMethodName() {
+                       // TODO: do better
+                       return ExtractAndMoveMethodChanger.generateName();
+               }
+
+               public String getOriginatingMethodName() {
+                       return method.getDeclaringType().getFullyQualifiedName() + "." + method.getElementName();
+               }
+
+               public IMethod getMethod() {
+                       return method;
+               }
+
+               public CompilationUnitTextSelection getTextSelection() {
+                       return textSelection;
+               }
+
+               public int getTargetPrefixSegmentCount() {
+                       return targetPrefixSegmentCount;
+               }
+               
+       }
\ No newline at end of file
index 8cdac9ab71c7ad579a17bbfc13cd932617ff6ca4..14ce89e8cc568b387a372ffab067252886a3e758 100644 (file)
@@ -1,27 +1,39 @@
 package no.uio.ifi.refaktor.analyze;
 
+import java.util.Collections;
 import java.util.LinkedList;
+import java.util.Set;
 
 import org.eclipse.jdt.core.IMethod;
 
 import no.uio.ifi.refaktor.analyze.analyzers.Analyzer;
+import no.uio.ifi.refaktor.analyze.analyzers.ExtractAndMoveMethodAnalyzer;
+import no.uio.ifi.refaktor.analyze.analyzers.ExtractLocalVariableAnalyzer;
 import no.uio.ifi.refaktor.analyze.analyzers.StatementListsCreator;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.analyzers.TextSelectionsGenerator;
+import no.uio.ifi.refaktor.analyze.comparators.ExtractAndMoveMethodCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.ExtractLocalVariableCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractLocalVariableCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.NoTargetFoundException;
 import no.uio.ifi.refaktor.analyze.exceptions.RefaktorAnalyzerException;
+import no.uio.ifi.refaktor.textselection.CompilationUnitTextSelection;
 
 public class SearchBasedExtractLocalVariableAnalyzer implements Analyzer{
 
        private IMethod method;
-       private Object candidateComparator;
+       private ExtractLocalVariableCandidateComparator candidateComparator;
        private LinkedList<ExtractLocalVariableCandidate> candidates;
+       private StatementListsCreator statementsCreator;
+
+       private Set<CompilationUnitTextSelection> textSelections;
+       private ExtractLocalVariableCandidate chosenCandidate;
 
        public SearchBasedExtractLocalVariableAnalyzer(IMethod method,
-                       FavorNoUnfixesCandidateComparator favorNoUnfixesCandidateComparator) {
+                       FavorNoUnfixesExtractLocalVariableCandidateComparator favorNoUnfixesCandidateComparator) {
                this.method = method;
-               this.candidateComparator = candidateComparator;
+               this.candidateComparator = favorNoUnfixesCandidateComparator;
                candidates = new LinkedList<ExtractLocalVariableCandidate>();
-               StatementListsCreator statementsCreator = new StatementListsCreator(method);
+               statementsCreator = new StatementListsCreator(method);
        }
 
        public void analyze() {
@@ -35,23 +47,35 @@ public class SearchBasedExtractLocalVariableAnalyzer implements Analyzer{
                if (candidates.isEmpty())
                        throw new NoTargetFoundException();
 
-               getCandidate();
+               chooseCandidate();
                
-       }
+       } 
 
        private void findPotentialCandidates() {
-               // TODO Auto-generated method stub
-               
+               for (CompilationUnitTextSelection textSelection: textSelections) {
+                       ExtractLocalVariableAnalyzer analyzer = new ExtractLocalVariableAnalyzer(textSelection);
+                       analyzer.analyze();
+
+                       if (analyzer.hasUsefulResults())
+                               candidates.add(new ExtractLocalVariableCandidate(method, analyzer, textSelection, statementsCreator.getNumberOfStatements(), textSelections.size()));
+               }
        }
 
        private void generateTextSelections() {
-               // TODO Auto-generated method stub
+               textSelections = TextSelectionsGenerator.generateTextSelections(statementsCreator, method.getCompilationUnit());
                
        }
 
-       public Object getCandidate() {
-               // TODO Auto-generated method stub
-               return null;
+       private void chooseCandidate() {
+               sortCandidates();
+               chosenCandidate = candidates.getLast();
+       }
+
+       private void sortCandidates() {
+               Collections.sort(candidates, candidateComparator);
        }
 
+       public ExtractLocalVariableCandidate getCandidate() {
+               return chosenCandidate;
+       }
 }
diff --git a/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/analyzers/ExtractLocalVariableAnalyzer.java b/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/analyzers/ExtractLocalVariableAnalyzer.java
new file mode 100644 (file)
index 0000000..812cc12
--- /dev/null
@@ -0,0 +1,130 @@
+/**
+ * 
+ */
+package no.uio.ifi.refaktor.analyze.analyzers;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import no.uio.ifi.refaktor.analyze.CollectorManager;
+import no.uio.ifi.refaktor.analyze.checkers.LegalStatementsChecker;
+import no.uio.ifi.refaktor.analyze.collectors.PrefixesCollector;
+import no.uio.ifi.refaktor.analyze.collectors.UnfixesCollector;
+import no.uio.ifi.refaktor.analyze.exceptions.NoTargetFoundException;
+import no.uio.ifi.refaktor.analyze.exceptions.RefaktorAnalyzerException;
+import no.uio.ifi.refaktor.change.changers.ExtractAndMoveMethodChanger;
+import no.uio.ifi.refaktor.prefix.Prefix;
+import no.uio.ifi.refaktor.prefix.PrefixSet;
+import no.uio.ifi.refaktor.textselection.CompilationUnitTextSelection;
+
+import org.eclipse.jdt.core.dom.IVariableBinding;
+import org.eclipse.jdt.core.dom.Modifier;
+
+/**
+ * @author Anna Eilertsen
+ *
+ */
+public class ExtractLocalVariableAnalyzer implements Analyzer {
+
+       private final CompilationUnitTextSelection selection;
+       private final PrefixesCollector prefixesCollector;
+       private final UnfixesCollector unfixesCollector;
+       /**
+        * If ONLY_SAFE is set, non-final fields are not considered as candidates.
+        */
+       public boolean ONLY_SAFE = false;
+
+       public ExtractLocalVariableAnalyzer(CompilationUnitTextSelection selection) {
+               this.selection = selection;
+               prefixesCollector = new PrefixesCollector(selection);
+               unfixesCollector = new UnfixesCollector(selection);
+       }
+
+       /**
+        * Affected by {@link #ONLY_SAFE}.
+        */
+       public PrefixSet calculateSafePrefixes() {
+               PrefixSet safePrefixes = prefixesCollector.getPrefixes().minusEnclosedPrefixesFrom(unfixesCollector.getUnfixes());
+               removeUnusablePrefixes(safePrefixes);
+               return safePrefixes;
+       }
+
+       private void removeUnusablePrefixes(PrefixSet safePrefixes) {
+               for (Iterator<Prefix> iter = safePrefixes.iterator(); iter.hasNext();) {
+                       final Prefix i = iter.next();
+                       final IVariableBinding ie = i.getVariableBindingOfFirstExpression();
+                       if (prefixHasSimpleExpressionAndOnlyOneOccurrence(i)
+                                       /* Filter out non-final fields as well? */
+                                       || (ONLY_SAFE && ie.isField() && !Modifier.isFinal(ie.getModifiers())))
+                               iter.remove();
+               }
+       }
+
+       private boolean prefixHasSimpleExpressionAndOnlyOneOccurrence(Prefix prefix) {
+               return prefix.getNumberOfSegments() == 1 && prefix.getCount() == 1;
+       }
+       
+       protected PrefixSet getPrefixes() {
+               return prefixesCollector.getPrefixes();
+       }
+
+       public PrefixSet getUnfixes() {
+               return unfixesCollector.getUnfixes();
+       }
+
+       public void checkPreconditions() throws RefaktorAnalyzerException {
+               SelectionValidator.checkIfSelectionIsValid(selection);
+               analyze();
+               checkIfUsefulTargetFound();
+       }
+
+       private void checkIfUsefulTargetFound() {
+               if (!hasUsefulResults())
+                       throw new NoTargetFoundException();
+       }
+
+       public boolean hasUsefulResults() {
+               return !calculateSafePrefixes().isEmpty();
+       }
+
+       @Override
+       public void analyze() throws RefaktorAnalyzerException {
+               LegalStatementsChecker legalStatementsChecker = new LegalStatementsChecker(selection);
+               if (legalStatementsChecker.allStatementsAreLegal())
+                       CollectorManager.collectProperties(selection, prefixesCollector, unfixesCollector);
+       }
+
+       public IVariableBinding calculateOriginalTarget() {
+               return calculateMostFrequentPrefix().getVariableBindingOfFirstExpression();
+       }
+
+       public Prefix calculateMostFrequentPrefix() {
+               LinkedList<Prefix> listOfSafePrefixes = calculateListOfSafePrefixes();
+               sortAscendingByCountAndLength(listOfSafePrefixes);
+               return listOfSafePrefixes.getLast();
+       }
+
+       private LinkedList<Prefix> calculateListOfSafePrefixes() {
+               return calculateSafePrefixes().toList();
+       }
+
+       private void sortAscendingByCountAndLength(LinkedList<Prefix> values) {
+               Collections.sort(values, new Comparator<Prefix>() {
+                       @Override
+                       public int compare(Prefix p1, Prefix p2) {
+                               if (p1.getCount() > p2.getCount()) {
+                                       return 1;
+                               } else if (p1.getCount() < p2.getCount()) {
+                                       return -1;
+                               } else if (p1.getNumberOfSegments() > p2.getNumberOfSegments()) {
+                                       return 1;
+                               } else if (p1.getNumberOfSegments() < p2.getNumberOfSegments()) {
+                                       return -1;
+                               }
+                               return 0;
+                       }
+               });
+       }
+}
index acbbdf1a49c1415d2b2ab811a868a7ab6dac33ab..929f9a00022092cc446ce70ab1975b2b12b98a69 100644 (file)
@@ -4,7 +4,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 import no.uio.ifi.refaktor.analyze.ExtractAndMoveMethodCandidate;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractAndMoveCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.NoTargetFoundException;
 import no.uio.ifi.refaktor.analyze.exceptions.RefaktorAnalyzerException;
 import no.uio.ifi.refaktor.debugging.RefaktorDebug;
@@ -50,7 +50,7 @@ public class TypeWideExtractAndMoveMethodAnalyzer implements AggregationAnalyzer
        private void analyzeMethod(IMethod method) {
                try {
                        SearchBasedExtractAndMoveMethodAnalyzer analyzer = 
-                                       new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesCandidateComparator());
+                                       new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesExtractAndMoveCandidateComparator());
                        analyzer.analyze();
                        candidates.add(analyzer.getCandidate());
                } catch (NoTargetFoundException e) {
diff --git a/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/ExtractLocalVariableCandidateComparator.java b/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/ExtractLocalVariableCandidateComparator.java
new file mode 100644 (file)
index 0000000..1231ff4
--- /dev/null
@@ -0,0 +1,9 @@
+package no.uio.ifi.refaktor.analyze.comparators;
+
+import java.util.Comparator;
+
+import no.uio.ifi.refaktor.analyze.ExtractLocalVariableCandidate;
+
+public interface ExtractLocalVariableCandidateComparator extends Comparator<ExtractLocalVariableCandidate>{
+
+}
@@ -2,7 +2,7 @@ package no.uio.ifi.refaktor.analyze.comparators;
 
 import no.uio.ifi.refaktor.analyze.ExtractAndMoveMethodCandidate;
 
-public final class FavorNoUnfixesCandidateComparator implements ExtractAndMoveMethodCandidateComparator {
+public final class FavorNoUnfixesExtractAndMoveCandidateComparator implements ExtractAndMoveMethodCandidateComparator {
        @Override
        public int compare(ExtractAndMoveMethodCandidate resultOne, ExtractAndMoveMethodCandidate resultTwo) {
                if (resultOne.hasNoUnfixes() && resultTwo.hasUnfixes())
diff --git a/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/FavorNoUnfixesExtractLocalVariableCandidateComparator.java b/software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/analyze/comparators/FavorNoUnfixesExtractLocalVariableCandidateComparator.java
new file mode 100644 (file)
index 0000000..e0867fc
--- /dev/null
@@ -0,0 +1,36 @@
+/**
+ * 
+ */
+package no.uio.ifi.refaktor.analyze.comparators;
+
+import no.uio.ifi.refaktor.analyze.ExtractLocalVariableCandidate;
+
+/**
+ * @author Anna Eilertsen
+ *
+ */
+public class FavorNoUnfixesExtractLocalVariableCandidateComparator implements ExtractLocalVariableCandidateComparator {
+               @Override
+               public int compare(ExtractLocalVariableCandidate resultOne, ExtractLocalVariableCandidate resultTwo) {
+                       if (resultOne.hasNoUnfixes() && resultTwo.hasUnfixes())
+                               return 1;
+                       else if (resultOne.hasUnfixes() && resultTwo.hasNoUnfixes())
+                               return -1;
+                       else if (resultOne.hasOnlyOnePossibleTarget() && resultTwo.hasMoreThanOnePossibleTarget())
+                               return 1;
+                       else if (resultOne.hasMoreThanOnePossibleTarget() && resultTwo.hasOnlyOnePossibleTarget())
+                               return -1;
+                       else if (resultOne.hasMoreThanOnePossibleTarget() && resultTwo.hasMoreThanOnePossibleTarget())
+                               return 0;
+                       else if (resultOne.getTargetFrequency() > resultTwo.getTargetFrequency())
+                               return 1;
+                       else if (resultOne.getTargetFrequency() < resultTwo.getTargetFrequency())
+                               return -1;
+                       else if (resultOne.getTargetPrefixSegmentCount() > resultTwo.getTargetPrefixSegmentCount())
+                               return 1;
+                       else if (resultOne.getTargetPrefixSegmentCount() < resultTwo.getTargetPrefixSegmentCount())
+                               return -1;
+                       else
+                               return 0;
+               }
+       }
\ No newline at end of file
index e75471e3ec11ad203d4174d778547cdda41ed1ca..83ce56e57523e4098ef43d95e336064ed02db8fd 100644 (file)
@@ -6,7 +6,8 @@ import org.eclipse.jdt.core.IMethod;
 
 import no.uio.ifi.refaktor.analyze.SearchBasedExtractLocalVariableAnalyzer;
 import no.uio.ifi.refaktor.analyze.analyzers.SearchBasedExtractAndMoveMethodAnalyzer;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractAndMoveCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractLocalVariableCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.RefaktorAnalyzerException;
 import no.uio.ifi.refaktor.change.changers.RefaktorChanger;
 import no.uio.ifi.refaktor.change.executors.ExtractAndMoveMethodExecutor;
@@ -16,7 +17,7 @@ public class SearchBasedExtractLocalVariableWithAssertsChanger implements Refakt
        private SearchBasedExtractLocalVariableAnalyzer analyzer;
        
        public SearchBasedExtractLocalVariableWithAssertsChanger(IMethod method) {
-               this.analyzer = new SearchBasedExtractLocalVariableAnalyzer(method, new FavorNoUnfixesCandidateComparator());
+               this.analyzer = new SearchBasedExtractLocalVariableAnalyzer(method, new FavorNoUnfixesExtractLocalVariableCandidateComparator());
        }
 
        @Override
index c5cdef147d8ae1fe751187d4c3d00524a8d693b1..d70971ee3656d51c64309c5d42c3f057029d86e9 100644 (file)
@@ -1,7 +1,7 @@
 package no.uio.ifi.refaktor.change.changers;
 
 import no.uio.ifi.refaktor.analyze.analyzers.SearchBasedExtractAndMoveMethodAnalyzer;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractAndMoveCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.RefaktorAnalyzerException;
 import no.uio.ifi.refaktor.change.executors.ExtractAndMoveMethodExecutor;
 
@@ -14,7 +14,7 @@ public class SearchBasedExtractAndMoveMethodChanger implements RefaktorChanger {
        private SearchBasedExtractAndMoveMethodAnalyzer analyzer;
 
        public SearchBasedExtractAndMoveMethodChanger(IMethod method) {
-               this.analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesCandidateComparator());
+               this.analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesExtractAndMoveCandidateComparator());
        }
 
        @Override
index 9c2497b4d270730bb8e18bb00c9f9b30c0b81799..1ae2f5eacc92a2154fa203046e3a7831df6caf01 100644 (file)
@@ -2,7 +2,7 @@ package no.uio.ifi.refaktor.handlers;
 
 import no.uio.ifi.refaktor.analyze.ExtractAndMoveMethodCandidate;
 import no.uio.ifi.refaktor.analyze.analyzers.SearchBasedExtractAndMoveMethodAnalyzer;
-import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesCandidateComparator;
+import no.uio.ifi.refaktor.analyze.comparators.FavorNoUnfixesExtractAndMoveCandidateComparator;
 import no.uio.ifi.refaktor.analyze.exceptions.NoTargetFoundException;
 import no.uio.ifi.refaktor.debugging.RefaktorDebug;
 import no.uio.ifi.refaktor.statistics.StatisticsAspect;
@@ -34,7 +34,7 @@ public class SearchBasedExtractAndMoveMethodAnalysisHandler extends AbstractHand
                String message = "";
                try {
                        StatisticsAspect.init();
-                       SearchBasedExtractAndMoveMethodAnalyzer analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesCandidateComparator());
+                       SearchBasedExtractAndMoveMethodAnalyzer analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesExtractAndMoveCandidateComparator());
                        analyzer.analyze();
                        ExtractAndMoveMethodCandidate result = analyzer.getCandidate();
                        message = "Result:\n\nText selection:\n" + result.textSelection 
index a4ec834cb3e1c3b7bbeb24d4445d3a57581ed528..3e27aad97a2c778411738fd65a13d3a3da6f559a 100644 (file)
@@ -32,7 +32,18 @@ public class SearchBasedExtractLocalVariableWithAssertsHandler extends AbstractH
                IMethod method = (IMethod) o;
                
                RefaktorChanger changer = new SearchBasedExtractLocalVariableWithAssertsChanger(method);
-               
+               try {
+                       changer.checkPreconditions();
+                       changer.execute(new NullProgressMonitor());
+                       MessageDialog.openInformation(window.getShell(), "no.uio.ifi.refaktor", changer.getClass() + " has been excuted");
+                       return null;
+               } catch (RefaktorChangerException e) {
+                       RefaktorDebug.log(e);
+               } catch (CoreException e) {
+                       RefaktorDebug.log(e);
+               }
+
+               MessageDialog.openInformation(window.getShell(), "no.uio.ifi.refaktor", changer.getClass() + " did not execute correctly");
                return null;
        }
 
index 8adb47f436457e3c62edfc4640c396197b4f3aad..b42d5247cc3e29f30aea861c0def2ef859c6824f 100644 (file)
@@ -91,7 +91,7 @@ public class InsertAssertsVisitor extends ASTVisitor {
                statementsListRewrite = null;
                ast = null;
                qualifier = null; 
-               super.endVisit(node); //Doesn't do anything, but kept for future
+               super.endVisit(node); //Doesn't do anything for now
        }
 
        @Override