|
From: <cal...@us...> - 2007-02-23 11:33:10
|
Revision: 2007
http://svn.sourceforge.net/rubyeclipse/?rev=2007&view=rev
Author: callandor1983
Date: 2007-02-23 03:33:06 -0800 (Fri, 23 Feb 2007)
Log Message:
-----------
Rename refactorings enhanced.
Renames will only be launched if the name of the Item to rename is selected (class or method body doesn't count any more)
method to decide which rename refactoring will be launched no uses the condition checkers of the rename refactorings.
Modified Paths:
--------------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/NodeProvider.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/RefactoringConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/SelectionNodeProvider.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/converttemptofield/TempToFieldConverter.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractMethodConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractedMethodHelper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/inlinetemp/InlineTempConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/InsertMethodEditProvider.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/MethodMover.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConfig.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/RenameClassConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamefield/RenameFieldConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariableRenamer.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariablesEditProvider.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalVariableRefactoring.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemethod/RenameMethodConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/CallArgsNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/FieldNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/LocalNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/MethodCallNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/PartialClassNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/VisibilityNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/util/NodeUtil.java
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/rename/rename_test_2.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/rename/rename_test_7.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamefield/conditionchecks/rename_field_checker_test_3.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/conditioncheck/rename_method_checker_test_1.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/conditioncheck/rename_method_checker_test_3.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/conditioncheck/rename_method_checker_test_4.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/rename_method_test_1.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/rename_method_test_5.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/rename_method_test_6.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/TC_NodeProvider.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/rename/RenameTester.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/TS_RenameLocalVariable.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/conditionchecks/TS_RenameLocalCondition.java
Added Paths:
-----------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConfig.java
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamefield/conditionchecks/rename_field_checker_test_4.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamefield/conditionchecks/rename_field_checker_test_4.test_source
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/conditioncheck/rename_method_checker_test_6.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/renamemethod/conditioncheck/rename_method_checker_test_6.test_source
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/RenameLocalTester.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/conditionchecks/RenameLocalConditionTester.java
Removed Paths:
-------------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConfig.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/RenameTester.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamelocalvariable/conditionchecks/RenameLocalConditionChecker.java
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/NodeProvider.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/NodeProvider.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/NodeProvider.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -166,10 +166,10 @@
}
private static void addAccessorNodes(Collection<AttrAccessorNodeWrapper> accessorNodes, FCallNode callNode) {
- if (nodeAssignableFrom(callNode.getArgsNode(), ArrayNode.class)) {
+ if (NodeUtil.nodeAssignableFrom(callNode.getArgsNode(), ArrayNode.class)) {
for (Object o : callNode.getArgsNode().childNodes()) {
Node aktNode = (Node) o;
- if (nodeAssignableFrom(aktNode, SymbolNode.class)) {
+ if (NodeUtil.nodeAssignableFrom(aktNode, SymbolNode.class)) {
SymbolNode symbolNode = ((SymbolNode) aktNode);
accessorNodes.add(new AttrAccessorNodeWrapper(callNode, symbolNode));
}
@@ -181,11 +181,11 @@
if (!hasAccessorName(fCallNode)) {
return false;
}
- if (NodeProvider.nodeAssignableFrom(fCallNode.getArgsNode(), ArrayNode.class)) {
+ if (NodeUtil.nodeAssignableFrom(fCallNode.getArgsNode(), ArrayNode.class)) {
ArrayNode arrayNode = (ArrayNode) fCallNode.getArgsNode();
for (Object o : arrayNode.childNodes()) {
Node aktNode = (Node) o;
- if (!NodeProvider.nodeAssignableFrom(aktNode, SymbolNode.class)) {
+ if (!NodeUtil.nodeAssignableFrom(aktNode, SymbolNode.class)) {
return false;
}
}
@@ -356,7 +356,7 @@
public static Collection<Node> gatherNodesOfTypeInAktScopeNode(Node baseNode, Class... klasses) {
ArrayList<Node> candidates = new ArrayList<Node>();
- if (nodeAssignableFrom(baseNode, klasses)) {
+ if (NodeUtil.nodeAssignableFrom(baseNode, klasses)) {
candidates.add(baseNode);
}
if (baseNode != null && !NodeUtil.hasScope(baseNode)) {
@@ -373,7 +373,7 @@
Collection<Node> allNodes = getAllNodes(baseNode);
Collection<Node> resultNodes = new ArrayList<Node>();
for (Node aktNode : allNodes) {
- if (nodeAssignableFrom(aktNode, klasses)) {
+ if (NodeUtil.nodeAssignableFrom(aktNode, klasses)) {
resultNodes.add(aktNode);
}
}
@@ -384,18 +384,6 @@
return !getSubNodes(baseNode, klasses).isEmpty();
}
- public static boolean nodeAssignableFrom(Node n, Class<?>... klasses) {
- if(n == null) {
- return false;
- }
- for (Class<?> klass : klasses) {
- if (klass.isAssignableFrom(n.getClass())) {
- return true;
- }
- }
- return false;
- }
-
public static Node getEnclosingNodeOfType(Node baseNode, Node enclosedNode, Class<? extends Object>... klasses) {
return SelectionNodeProvider.getSelectedNodeOfType(baseNode, enclosedNode.getPosition().getStartOffset(), klasses);
}
@@ -421,7 +409,7 @@
if(node == null) {
return true;
}
- if(!nodeAssignableFrom(node, EMPTY_NODES)) {
+ if(!NodeUtil.nodeAssignableFrom(node, EMPTY_NODES)) {
return false;
}
for(Object o : node.childNodes()) {
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/RefactoringConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/RefactoringConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/RefactoringConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -131,6 +131,10 @@
protected void addWarning(String message) {
messages.get(IRefactoringConditionChecker.WARNING).add(message);
}
+
+ protected boolean hasErrors() {
+ return !messages.get(IRefactoringConditionChecker.ERRORS).isEmpty();
+ }
protected abstract void checkInitialConditions();
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/SelectionNodeProvider.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/SelectionNodeProvider.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/SelectionNodeProvider.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -60,7 +60,10 @@
import org.rubypeople.rdt.refactoring.exception.NoClassNodeException;
import org.rubypeople.rdt.refactoring.nodewrapper.AttrAccessorNodeWrapper;
import org.rubypeople.rdt.refactoring.nodewrapper.ClassNodeWrapper;
+import org.rubypeople.rdt.refactoring.nodewrapper.FieldNodeWrapper;
+import org.rubypeople.rdt.refactoring.nodewrapper.INodeWrapper;
import org.rubypeople.rdt.refactoring.nodewrapper.PartialClassNodeWrapper;
+import org.rubypeople.rdt.refactoring.util.NodeUtil;
public class SelectionNodeProvider {
@@ -165,16 +168,16 @@
Class[] classes = { LocalAsgnNode.class, LocalVarNode.class, DAsgnNode.class, DVarNode.class, InstAsgnNode.class, InstVarNode.class,
ClassVarAsgnNode.class, ClassVarNode.class, GlobalAsgnNode.class, GlobalVarNode.class};
boolean sameStart = firstNode.getPosition().getStartOffset() == secondNode.getPosition().getStartOffset();
- boolean isFirstNodeVarNode = NodeProvider.nodeAssignableFrom(firstNode, classes);
- boolean isSecondNodeVarNode = NodeProvider.nodeAssignableFrom(secondNode, classes);
+ boolean isFirstNodeVarNode = NodeUtil.nodeAssignableFrom(firstNode, classes);
+ boolean isSecondNodeVarNode = NodeUtil.nodeAssignableFrom(secondNode, classes);
return sameStart && isFirstNodeVarNode && isSecondNodeVarNode;
}
private static boolean hasSamePosAndIsSelfAsignment(Node probablyCallNode, Node probablyAsgnNode) {
boolean sameStart = probablyCallNode.getPosition().getStartOffset() == probablyAsgnNode.getPosition().getStartOffset();
boolean sameEnd = probablyCallNode.getPosition().getEndOffset() == probablyAsgnNode.getPosition().getEndOffset();
- boolean isAsgnNode = NodeProvider.nodeAssignableFrom(probablyAsgnNode, LocalAsgnNode.class, DAsgnNode.class, InstAsgnNode.class, ClassVarAsgnNode.class);
- boolean isCallNode = NodeProvider.nodeAssignableFrom(probablyCallNode, CallNode.class, AttrAssignNode.class);
+ boolean isAsgnNode = NodeUtil.nodeAssignableFrom(probablyAsgnNode, LocalAsgnNode.class, DAsgnNode.class, InstAsgnNode.class, ClassVarAsgnNode.class);
+ boolean isCallNode = NodeUtil.nodeAssignableFrom(probablyCallNode, CallNode.class, AttrAssignNode.class);
return sameStart && sameEnd && isCallNode && isAsgnNode;
}
@@ -219,7 +222,7 @@
public static Collection<Node> getSelectedNodesOfType(Collection<? extends Node> nodes, int position, Class<?>... klasses) {
ArrayList<Node> candidates = new ArrayList<Node>();
for (Node n : nodes) {
- if (nodeContainsPosition(n, position) && !(n instanceof NewlineNode) && NodeProvider.nodeAssignableFrom(n, klasses)) {
+ if (nodeContainsPosition(n, position) && !(n instanceof NewlineNode) && NodeUtil.nodeAssignableFrom(n, klasses)) {
candidates.add(n);
}
}
@@ -290,4 +293,24 @@
}
return selectedAccessor;
}
+
+ public static <T extends INodeWrapper> T getSelectedWrappedNode(Collection<T> candidates, int caretPosition) {
+ T selected = null;
+ for(T aktNode : candidates) {
+ if(nodeContainsPosition(aktNode.getWrappedNode(), caretPosition)) {
+ selected = getBestCandidate(selected, aktNode);
+ }
+ }
+ return selected;
+ }
+
+ private static <T extends INodeWrapper> T getBestCandidate(T oldNode, T newNode) {
+ if(oldNode == null) {
+ return newNode;
+ }
+ if(nodeEnclosesNode(newNode.getWrappedNode(), oldNode.getWrappedNode())) {
+ return oldNode;
+ }
+ return newNode;
+ }
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/converttemptofield/TempToFieldConverter.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/converttemptofield/TempToFieldConverter.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/converttemptofield/TempToFieldConverter.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -45,7 +45,6 @@
import org.jruby.ast.Node;
import org.jruby.ast.StrNode;
import org.jruby.ast.VCallNode;
-import org.rubypeople.rdt.refactoring.core.NodeProvider;
import org.rubypeople.rdt.refactoring.core.SelectionNodeProvider;
import org.rubypeople.rdt.refactoring.editprovider.DeleteEditProvider;
import org.rubypeople.rdt.refactoring.editprovider.EditProvider;
@@ -97,10 +96,10 @@
for (Object o : baseNode.childNodes()) {
Node n = (Node) o;
- if (NodeProvider.nodeAssignableFrom(n, LocalNodeWrapper.getLocalNodeClasses())) {
+ if (NodeUtil.nodeAssignableFrom(n, LocalNodeWrapper.LOCAL_NODES_CLASSES)) {
candidates.add(n);
}
- if (!NodeProvider.nodeAssignableFrom(n, DAsgnNode.class, LocalAsgnNode.class)) {
+ if (!NodeUtil.nodeAssignableFrom(n, DAsgnNode.class, LocalAsgnNode.class)) {
candidates.addAll(gatherLocalNodes(n));
}
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractMethodConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractMethodConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractMethodConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -91,10 +91,10 @@
Node selectedNode = SelectionNodeProvider.getSelectedNodes(rootNode, config.getSelection());
//If selected node is an WhenNode, take the enclosing CaseNode as selectedNode.
- if (NodeProvider.nodeAssignableFrom(selectedNode, WhenNode.class)) {
+ if (NodeUtil.nodeAssignableFrom(selectedNode, WhenNode.class)) {
selectedNode = SelectionNodeProvider.getEnclosingNode(rootNode, config.getSelection(), CaseNode.class);
}
- if(NodeProvider.nodeAssignableFrom(selectedNode, ArrayNode.class)) {
+ if(NodeUtil.nodeAssignableFrom(selectedNode, ArrayNode.class)) {
WhenNode enclosingWhen = (WhenNode) SelectionNodeProvider.getEnclosingNode(rootNode, config.getSelection(), WhenNode.class);
if(enclosingWhen != null && SelectionNodeProvider.nodeEnclosesNode(enclosingWhen.getExpressionNodes(), selectedNode)) {
selectedNode = SelectionNodeProvider.getEnclosingNode(rootNode, config.getSelection(), CaseNode.class);
@@ -108,7 +108,7 @@
}
//Check if the selected Node is an argumentNode
- if(NodeProvider.nodeAssignableFrom(selectedNode, ArgumentNode.class)) {
+ if(NodeUtil.nodeAssignableFrom(selectedNode, ArgumentNode.class)) {
selectedNode = config.getEnclosingMethodNode();
}
@@ -122,7 +122,7 @@
//Check if enclosingArrayNode is the argsNode of a MethodCallNode.
Node enclosingMethodCallNode = SelectionNodeProvider.getEnclosingNode(rootNode, config.getSelection(), MethodCallNodeWrapper.METHOD_CALL_NODE_CLASSES());
MethodCallNodeWrapper enclosingMethodCall = new MethodCallNodeWrapper(enclosingMethodCallNode);
- if(NodeProvider.nodeAssignableFrom(enclosingMethodCall.getArgsNode(), ArrayNode.class)) {
+ if(NodeUtil.nodeAssignableFrom(enclosingMethodCall.getArgsNode(), ArrayNode.class)) {
ArrayNode enclosingMethodCallArgs = (ArrayNode) enclosingMethodCall.getArgsNode();
if(enclosingArrayNode == enclosingMethodCallArgs)
return enclosingMethodCallNode;
@@ -130,7 +130,7 @@
//Check if enclosingArrayNode is the receiver node of a multiAsgnNode
MultipleAsgnNode asgnNode = (MultipleAsgnNode) SelectionNodeProvider.getEnclosingNode(rootNode, config.getSelection(), MultipleAsgnNode.class);
- if(asgnNode != null && NodeProvider.nodeAssignableFrom(asgnNode.getHeadNode(), ArrayNode.class)) {
+ if(asgnNode != null && NodeUtil.nodeAssignableFrom(asgnNode.getHeadNode(), ArrayNode.class)) {
// ArrayNode multiAsgnHeadNode = (ArrayNode) asgnNode.getHeadNode();
// if(enclosingArrayNode == multiAsgnHeadNode) {
// return asgnNode;
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractedMethodHelper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractedMethodHelper.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractmethod/ExtractedMethodHelper.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -131,7 +131,7 @@
}
private boolean isLocalNodeOfEnclosingScope(boolean isWrongScopeNode, Node aktNode) {
- return !isWrongScopeNode && (NodeProvider.nodeAssignableFrom(aktNode, LocalNodeWrapper.getLocalNodeClasses()));
+ return !isWrongScopeNode && (NodeUtil.nodeAssignableFrom(aktNode, LocalNodeWrapper.LOCAL_NODES_CLASSES));
}
private void initNeededLocalNodes() {
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/inlinetemp/InlineTempConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/inlinetemp/InlineTempConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/inlinetemp/InlineTempConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -64,7 +64,7 @@
config.setEnclosingScopeNode(SelectionNodeProvider.getEnclosingScope(rootNode, caretPosition));
- Node locVarNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, caretPosition, LocalNodeWrapper.getLocalNodeClasses());
+ Node locVarNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, caretPosition, LocalNodeWrapper.LOCAL_NODES_CLASSES);
if (locVarNode == null) {
return;
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/InsertMethodEditProvider.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/InsertMethodEditProvider.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/InsertMethodEditProvider.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -55,6 +55,7 @@
import org.rubypeople.rdt.refactoring.nodewrapper.VisibilityNodeWrapper.METHOD_VISIBILITY;
import org.rubypeople.rdt.refactoring.offsetprovider.AfterLastMethodInClassOffsetProvider;
import org.rubypeople.rdt.refactoring.offsetprovider.IOffsetProvider;
+import org.rubypeople.rdt.refactoring.util.NodeUtil;
public class InsertMethodEditProvider extends InsertEditProvider {
@@ -147,7 +148,7 @@
String insertText = config.getFieldInDestinationClassOfTypeSourceClass() + ".";
if (aktCallNode.isCallNode()) {
Node receiverNode = aktCallNode.getReceiverNode();
- if (NodeProvider.nodeAssignableFrom(receiverNode, SelfNode.class) && !isCallToMovingMethod(aktCallNode.getName())) {
+ if (NodeUtil.nodeAssignableFrom(receiverNode, SelfNode.class) && !isCallToMovingMethod(aktCallNode.getName())) {
int length = receiverNode.getPosition().getEndOffset() - insertPos;
multiEdit.addChild(new ReplaceEdit(insertPos, length, config.getFieldInDestinationClassOfTypeSourceClass()));
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/MethodMover.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/MethodMover.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/movemethod/MethodMover.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -60,6 +60,7 @@
import org.rubypeople.rdt.refactoring.nodewrapper.VisibilityNodeWrapper;
import org.rubypeople.rdt.refactoring.nodewrapper.VisibilityNodeWrapper.METHOD_VISIBILITY;
import org.rubypeople.rdt.refactoring.util.NameHelper;
+import org.rubypeople.rdt.refactoring.util.NodeUtil;
public class MethodMover implements IMultiFileEditProvider, Observer {
@@ -125,7 +126,7 @@
if(callNode.isCallToClassMethod()) {
return false;
}
- boolean isReceiverSelf = callNode.isCallNode() && NodeProvider.nodeAssignableFrom(callNode.getReceiverNode(), SelfNode.class);
+ boolean isReceiverSelf = callNode.isCallNode() && NodeUtil.nodeAssignableFrom(callNode.getReceiverNode(), SelfNode.class);
boolean isNotCallNode = !callNode.isCallNode();
boolean hasExistingMethodName = config.getSourceClassNode().containsMethod(callNode.getName());
return (isReceiverSelf || isNotCallNode) && hasExistingMethodName;
@@ -330,7 +331,7 @@
boolean sameName = methodCall.getName().equals(selectedMethodName);
boolean notInMovingMethod = !SelectionNodeProvider.isNodeContainedInNode(methodCall.getWrappedNode(), config.getMethodNode().getWrappedNode());
boolean isNotCallNode = !methodCall.isCallNode();
- boolean isSelfNode = methodCall.isCallNode() && NodeProvider.nodeAssignableFrom(methodCall.getReceiverNode(), SelfNode.class);
+ boolean isSelfNode = methodCall.isCallNode() && NodeUtil.nodeAssignableFrom(methodCall.getReceiverNode(), SelfNode.class);
boolean sameType = config.getMethodNode().isClassMethod() == methodCall.isCallToClassMethod();
return sameName && sameType && notInMovingMethod && (isNotCallNode || isSelfNode || methodCall.isCallToClassMethod());
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -1,121 +1,98 @@
package org.rubypeople.rdt.refactoring.core.rename;
-import org.jruby.ast.ArgsNode;
-import org.jruby.ast.ArgumentNode;
-import org.jruby.ast.ClassNode;
-import org.jruby.ast.ConstNode;
-import org.jruby.ast.InstAsgnNode;
-import org.jruby.ast.InstVarNode;
-import org.jruby.ast.MethodDefNode;
-import org.jruby.ast.Node;
-import org.jruby.ast.SymbolNode;
+import org.rubypeople.rdt.refactoring.core.IRefactoringConditionChecker;
import org.rubypeople.rdt.refactoring.core.RefactoringConditionChecker;
-import org.rubypeople.rdt.refactoring.core.SelectionNodeProvider;
-import org.rubypeople.rdt.refactoring.exception.NoClassNodeException;
-import org.rubypeople.rdt.refactoring.nodewrapper.ClassNodeWrapper;
-import org.rubypeople.rdt.refactoring.nodewrapper.LocalNodeWrapper;
+import org.rubypeople.rdt.refactoring.core.renameclass.RenameClassConditionChecker;
+import org.rubypeople.rdt.refactoring.core.renameclass.RenameClassConfig;
+import org.rubypeople.rdt.refactoring.core.renamefield.RenameFieldConditionChecker;
+import org.rubypeople.rdt.refactoring.core.renamefield.RenameFieldConfig;
+import org.rubypeople.rdt.refactoring.core.renamelocalvariable.RenameLocalConditionChecker;
+import org.rubypeople.rdt.refactoring.core.renamelocalvariable.RenameLocalConfig;
+import org.rubypeople.rdt.refactoring.core.renamemethod.RenameMethodConditionChecker;
+import org.rubypeople.rdt.refactoring.core.renamemethod.RenameMethodConfig;
+import org.rubypeople.rdt.refactoring.documentprovider.DocumentProvider;
public class RenameConditionChecker extends RefactoringConditionChecker {
- private ClassNode selectedClassNode;
- private Node selectedMethodNode;
- private Node selectedFieldNode;
- private Node selectedLocalNode;
- private Node preferedNode;
- private Node rootNode;
- private int offset;
+ private enum RenameType {
+ INVALID, LOCAL, FIELD, METHOD, CLASS
+ };
+ private RenameType selectedType;
+
+ private RenameLocalConditionChecker localConditionChecker;
+
+ private RefactoringConditionChecker fieldConditionChecker;
+
+ private RefactoringConditionChecker methodConditionChecker;
+
+ private RefactoringConditionChecker classConditionChecker;
+
public RenameConditionChecker(RenameConfig config) {
super(config.getDocumentProvider(), config);
}
@Override
protected void checkInitialConditions() {
- if(preferedNode == null) {
- addError("Nothing selected to rename.");
+ if (selectedType == RenameType.INVALID) {
+ addErrorMessage();
}
}
- @Override
- protected void init(Object configObj) {
- RenameConfig config = (RenameConfig) configObj;
- rootNode = config.getDocumentProvider().getRootNode();
- offset = config.getOffset();
- selectedClassNode = (ClassNode) SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, ClassNode.class);
- selectedMethodNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, MethodDefNode.class);
- selectedFieldNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, InstAsgnNode.class, InstVarNode.class);
- selectedLocalNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, LocalNodeWrapper.getLocalNodeClasses());
- ConstNode selectedConstNode = (ConstNode) SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, ConstNode.class);
- SymbolNode selectedSymbolNode = (SymbolNode) SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, SymbolNode.class);
- ArgsNode argsNode = (ArgsNode) SelectionNodeProvider.getSelectedNodeOfType(rootNode, offset, ArgsNode.class);
- if(selectedLocalNode == null && argsNode != null) {
- selectedLocalNode = SelectionNodeProvider.getSelectedNodeOfType(argsNode, offset, ArgumentNode.class);
- }
- initPreferedNode(selectedConstNode, selectedSymbolNode);
- }
+ private void addErrorMessage() {
+ addErrorIfNotDefaultError(localConditionChecker, RenameLocalConditionChecker.DEFAULT_ERROR);
+ addErrorIfNotDefaultError(fieldConditionChecker, RenameFieldConditionChecker.DEFAULT_ERROR);
+ addErrorIfNotDefaultError(methodConditionChecker, RenameMethodConditionChecker.DEFAULT_ERROR);
+ addErrorIfNotDefaultError(classConditionChecker, RenameClassConditionChecker.DEFAULT_ERROR);
+ if (!hasErrors()) {
- private void initPreferedNode(ConstNode selectedConstNode, SymbolNode selectedSymbolNode) {
- if(selectedLocalNode != null) {
- if(selectedFieldNode != null) {
- preferedNode = (SelectionNodeProvider.isNodeContainedInNode(selectedFieldNode, selectedLocalNode)) ? selectedFieldNode : selectedLocalNode;
- } else {
- preferedNode = selectedLocalNode;
- }
- } else if(selectedFieldNode != null) {
- preferedNode = selectedFieldNode;
- } else if(selectedMethodNode != null) {
- preferedNode = selectedMethodNode;
- } else if(selectedClassNode != null) {
- preferedNode = selectedClassNode;
- if(selectedConstNode != null) {
- considerConstNode(selectedConstNode.getName());
- }
- if(selectedSymbolNode != null) {
- considerSymbolNode(selectedSymbolNode);
- }
+ addError("Nothing selected to rename.");
+
}
}
- private void considerSymbolNode(SymbolNode selectedSymbolNode) {
- try {
- ClassNodeWrapper classNode = SelectionNodeProvider.getSelectedClassNode(rootNode, offset);
- String symbolName = selectedSymbolNode.getName();
- if(classNode.containsField(symbolName)) {
- selectedFieldNode = selectedSymbolNode;
- preferedNode = selectedFieldNode;
- } else if(classNode.containsMethod(symbolName)) {
- selectedMethodNode = selectedSymbolNode;
- preferedNode = selectedSymbolNode;
+ private void addErrorIfNotDefaultError(RefactoringConditionChecker checker, String defaultError) {
+ String firstError = checker.getInitialMessages().get(IRefactoringConditionChecker.ERRORS).toArray(new String[0])[0];
+ if (!firstError.equals(defaultError)) {
+ addError(firstError);
}
- } catch (NoClassNodeException e) {/*do nothing*/}
}
- private void considerConstNode(String constName) {
- if(selectedClassNode != null && constName.equals(selectedClassNode.getCPath().getName())) {
- preferedNode = selectedClassNode;
+ @Override
+ protected void init(Object configObj) {
+ RenameConfig config = (RenameConfig) configObj;
+ int offset = config.getOffset();
+ DocumentProvider docProvider = config.getDocumentProvider();
+ localConditionChecker = new RenameLocalConditionChecker(new RenameLocalConfig(docProvider, offset));
+ fieldConditionChecker = new RenameFieldConditionChecker(new RenameFieldConfig(docProvider, offset));
+ methodConditionChecker = new RenameMethodConditionChecker(new RenameMethodConfig(docProvider, offset));
+ classConditionChecker = new RenameClassConditionChecker(new RenameClassConfig(docProvider, offset));
+ if (localConditionChecker.shouldPerform()) {
+ selectedType = RenameType.LOCAL;
+ } else if (fieldConditionChecker.shouldPerform()) {
+ selectedType = RenameType.FIELD;
+ } else if (methodConditionChecker.shouldPerform()) {
+ selectedType = RenameType.METHOD;
+ } else if (classConditionChecker.shouldPerform()) {
+ selectedType = RenameType.CLASS;
+ } else {
+ selectedType = RenameType.INVALID;
}
}
public boolean shouldRenameLocal() {
- return testShould(selectedLocalNode);
+ return selectedType == RenameType.LOCAL;
}
-
- private boolean testShould(Node nodeToTest) {
- if(preferedNode == null) {
- return false;
- }
- return preferedNode.equals(nodeToTest);
- }
public boolean shouldRenameField() {
- return testShould(selectedFieldNode);
+ return selectedType == RenameType.FIELD;
}
-
+
public boolean shouldRenameMethod() {
- return testShould(selectedMethodNode);
+ return selectedType == RenameType.METHOD;
}
-
+
public boolean shouldRenameClass() {
- return testShould(selectedClassNode);
+ return selectedType == RenameType.CLASS;
}
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConfig.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConfig.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/rename/RenameConfig.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -1,18 +1,18 @@
package org.rubypeople.rdt.refactoring.core.rename;
-import org.rubypeople.rdt.refactoring.documentprovider.IDocumentProvider;
+import org.rubypeople.rdt.refactoring.documentprovider.DocumentProvider;
public class RenameConfig {
- private IDocumentProvider documentProvider;
+ private DocumentProvider documentProvider;
private int offset;
- public RenameConfig(IDocumentProvider documentProvider, int offset) {
+ public RenameConfig(DocumentProvider documentProvider, int offset) {
this.documentProvider = documentProvider;
this.offset = offset;
}
- public IDocumentProvider getDocumentProvider() {
+ public DocumentProvider getDocumentProvider() {
return documentProvider;
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/RenameClassConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/RenameClassConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/RenameClassConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -37,6 +37,7 @@
public class RenameClassConditionChecker extends RefactoringConditionChecker {
+ public static final String DEFAULT_ERROR = "Please select the name of a class declaration.";
private RenameClassConfig config;
public RenameClassConditionChecker(RenameClassConfig config) {
@@ -64,7 +65,7 @@
@Override
protected void checkInitialConditions() {
if (config.getSelectedNode() == null) {
- addError("Please select the name of a class declaration.");
+ addError(DEFAULT_ERROR);
}
}
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamefield/RenameFieldConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamefield/RenameFieldConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamefield/RenameFieldConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -45,77 +45,79 @@
import org.rubypeople.rdt.refactoring.documentprovider.DocumentWithIncluding;
import org.rubypeople.rdt.refactoring.exception.NoClassNodeException;
import org.rubypeople.rdt.refactoring.nodewrapper.ClassNodeWrapper;
+import org.rubypeople.rdt.refactoring.nodewrapper.FieldNodeWrapper;
+import org.rubypeople.rdt.refactoring.nodewrapper.PartialClassNodeWrapper;
public class RenameFieldConditionChecker extends RefactoringConditionChecker {
-
+
+ public static final String DEFAULT_ERROR = "There is no field at the caret position.";
+
private RenameFieldConfig config;
public RenameFieldConditionChecker(RenameFieldConfig config) {
super(config.getDocProvider(), config);
}
-
+
public void init(Object configObj) {
this.config = (RenameFieldConfig) configObj;
-
+
config.setDocProvider(new DocumentWithIncluding(config.getDocProvider()));
Node rootNode = config.getDocProvider().getRootNode();
-
+
try {
ClassNodeWrapper enclosingClassNode = SelectionNodeProvider.getSelectedClassNode(rootNode, config.getCaretPosition());
ClassNodeProvider classNodeProvider = new IncludedClassesProvider(config.getDocProvider());
config.setWholeClassNode(classNodeProvider.getClassNode(enclosingClassNode.getName()));
config.setFieldProvider(new FieldProvider(config.getWholeClassNode(), config.getDocProvider()));
- config.setSelectedItem(config.getFieldProvider().getNameAtPosition(config.getCaretPosition(), config.getDocProvider().getActiveFileName()));
- if(config.hasSelectedItem()){
+ config.setSelectedItem(config.getFieldProvider()
+ .getNameAtPosition(config.getCaretPosition(), config.getDocProvider().getActiveFileName()));
+ if (config.hasSelectedItem()) {
config.setSelectedName(config.getSelectedItem().getFieldName());
}
-
} catch (NoClassNodeException e) {
- /*don't care*/
- }
+ /* don't care */
+ }
- if(config.hasSelectedName()){
+ if (config.hasSelectedName()) {
setSelection();
}
}
- private void setSelection() {
+ private void setSelection() {
String fieldName = config.getSelectedName();
boolean concernsClassField = config.concernsClassField();
Collection<FieldItem> selectedItems = config.getFieldProvider().getFieldItems(fieldName, concernsClassField);
config.setSelectedCalls(selectedItems);
-
+
Collection<FieldItem> possibleItems = new ArrayList<FieldItem>();
possibleItems.addAll(selectedItems);
-
- if(!concernsClassField){
+
+ if (!concernsClassField) {
possibleItems.addAll(getInstVarAccesses());
}
-
+
config.setPossibleCalls(possibleItems);
}
private Collection<FieldItem> getInstVarAccesses() {
ArrayList<FieldItem> fieldCallNodes = new ArrayList<FieldItem>();
-
Collection<Node> allNodes = config.getDocProvider().getAllNodes();
- for(Node currentNode : allNodes){
- if(isPossibleCall(currentNode)){
- fieldCallNodes.add(new FieldCallItem((CallNode)currentNode));
+ for (Node currentNode : allNodes) {
+ if (isPossibleCall(currentNode)) {
+ fieldCallNodes.add(new FieldCallItem((CallNode) currentNode));
}
}
-
+
return fieldCallNodes;
}
+ private boolean isPossibleCall(Node candidateNode) {
+ if ((candidateNode instanceof CallNode)) {
- private boolean isPossibleCall(Node candidateNode) {
- if((candidateNode instanceof CallNode)){
-
CallNode callNode = (CallNode) candidateNode;
- if(callNode.getName().replaceAll("=", "").equals(config.getSelectedName())){
+ if (callNode.getName().replaceAll("=", "").equals(config.getSelectedName())) {
String fileName = callNode.getPosition().getFile();
Node rootNode = NodeProvider.getRootNode(fileName, config.getDocProvider().getFileContent(fileName));
try {
@@ -127,32 +129,41 @@
}
return false;
}
-
@Override
protected void checkFinalConditions() {
String newName = config.getNewName();
String selectedName = config.getSelectedName();
-
- if(newName == null || selectedName.equals(newName)){
+
+ if (newName == null || selectedName.equals(newName)) {
addError("The name has to be changed to perform the refactoring.");
return;
}
-
- for ( String currentName : config.getFieldNames()){
- if(currentName.equals(newName)){
+
+ for (String currentName : config.getFieldNames()) {
+ if (currentName.equals(newName)) {
addError("Field name already exists.");
return;
}
- }
+ }
}
@Override
protected void checkInitialConditions() {
- if(!config.hasSelectedName()){
- addError("There is no field at the caret position.");
- } else if(!config.hasWholeClassNode()) {
- addError("The selected field is not inside of a class.");
+ Collection<FieldNodeWrapper> fields = PartialClassNodeWrapper.getFieldsFromNode(config.getDocProvider().getRootNode());
+ FieldNodeWrapper selectedFieldNode = SelectionNodeProvider.getSelectedWrappedNode(fields, config.getCaretPosition());
+ if (config.getWholeClassNode() == null) {
+ if (selectedFieldNode != null) {
+ addError("Cannot rename the selected field. There was no surrounding class found.");
+ return;
+ }
}
+ if (!config.hasSelectedName() || !isSelectionInFieldName(selectedFieldNode)) {
+ addError(DEFAULT_ERROR);
+ }
}
+
+ private boolean isSelectionInFieldName(FieldNodeWrapper node) {
+ return config.getCaretPosition() <= node.getPosition().getStartOffset() + node.getName().length();
+ }
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariableRenamer.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariableRenamer.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariableRenamer.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -47,8 +47,8 @@
}
public TextEdit getEdit() {
- RenameConfig config = new RenameConfig(doc, 0);
- new RenameConditionChecker(config);
+ RenameLocalConfig config = new RenameLocalConfig(doc, 0);
+ new RenameLocalConditionChecker(config);
LocalVariablesEditProvider editProvider = new LocalVariablesEditProvider(config);
editProvider.setSelectedVariableName(from);
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariablesEditProvider.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariablesEditProvider.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/LocalVariablesEditProvider.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -65,7 +65,7 @@
private final Node selectedNode;
- public LocalVariablesEditProvider(RenameConfig config) {
+ public LocalVariablesEditProvider(RenameLocalConfig config) {
rootNode = config.getSelectedMethod();
selectedNode = config.getSelectedNode();
localNames = config.getLocalNames();
Deleted: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConditionChecker.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -1,122 +0,0 @@
-/***** BEGIN LICENSE BLOCK *****
- * Version: CPL 1.0/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Common Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.eclipse.org/legal/cpl-v10.html
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * Copyright (C) 2006 Mirko Stocker <me...@mi...>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the CPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the CPL, the GPL or the LGPL.
- ***** END LICENSE BLOCK *****/
-
-package org.rubypeople.rdt.refactoring.core.renamelocalvariable;
-
-import java.util.Collection;
-
-import org.jruby.ast.ArgumentNode;
-import org.jruby.ast.AssignableNode;
-import org.jruby.ast.BlockArgNode;
-import org.jruby.ast.DAsgnNode;
-import org.jruby.ast.DVarNode;
-import org.jruby.ast.LocalAsgnNode;
-import org.jruby.ast.LocalVarNode;
-import org.jruby.ast.MethodDefNode;
-import org.jruby.ast.Node;
-import org.jruby.ast.RootNode;
-import org.jruby.ast.types.INameNode;
-import org.rubypeople.rdt.refactoring.core.NodeProvider;
-import org.rubypeople.rdt.refactoring.core.RefactoringConditionChecker;
-import org.rubypeople.rdt.refactoring.core.SelectionNodeProvider;
-import org.rubypeople.rdt.refactoring.util.NameValidator;
-import org.rubypeople.rdt.refactoring.util.NodeUtil;
-
-public class RenameConditionChecker extends RefactoringConditionChecker {
-
- private static final String ALREADY_EXISTS = "The chosen variable name already exists! Please go back and change it.";
-
- private static final String INVALID_NAME = "Please enter a valid name for the variable.";
-
- private static final String NO_VARIABLE_SELECTED = "No variable selected. Please select the variable you want to rename.";
-
- private static final String NO_LOCAL_VARIABLES = "There are no local variables at the current carret position.";
-
- private static final Class[] SELECTED_NODE_TYPES = {LocalVarNode.class, LocalAsgnNode.class, ArgumentNode.class,
- BlockArgNode.class, DVarNode.class, DAsgnNode.class};
-
- private RenameConfig config;
-
- public RenameConditionChecker(RenameConfig config) {
- super(config.getDocumentProvider(), config);
- }
-
- public void init(Object configObj) {
- config = (RenameConfig) configObj;
- RootNode rootNode = config.getDocumentProvider().getRootNode();
- Node selectedNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, config.getCaretPosition(), SELECTED_NODE_TYPES);
- if(selectedNode instanceof AssignableNode) {
- int start = selectedNode.getPosition().getStartOffset();
- int end = start + ((INameNode) selectedNode).getName().length();
- if(config.getCaretPosition() < start || config.getCaretPosition() > end) {
- return;
- }
- }
-
- config.setSelectedNode(selectedNode);
- if(selectedNode == null) {
- config.setLocalNames(NodeUtil.getScope(rootNode).getVariables());
- Collection<MethodDefNode> methodNodes = NodeProvider.getMethodNodes(config.getDocumentProvider().getRootNode());
- config.setSelectedMethod(SelectionNodeProvider.getSelectedNodeOfType(methodNodes, config.getCaretPosition(), MethodDefNode.class));
- return;
- }
- config.setSelectedMethod(SelectionNodeProvider.getEnclosingScope(rootNode, selectedNode));
- config.setLocalNames(NodeUtil.getScope(config.getSelectedMethod()).getVariables());
- }
-
- @Override
- protected void checkInitialConditions() {
- if ((!config.hasSelectedMethod() || !config.hasLocalNames())
- && !NodeProvider.nodeAssignableFrom(config.getSelectedNode(), DVarNode.class, DAsgnNode.class)) {
- addError(NO_LOCAL_VARIABLES);
- }
- }
-
- @Override
- protected void checkFinalConditions() {
- LocalVariablesEditProvider editProvider = config.getRenameEditProvider();
- if (editProvider.getSelectedVariableName().equals("") && editProvider.getNewVariableName().equals("")) {
- addError(NO_VARIABLE_SELECTED);
- }
-
- if (!NameValidator.isValidLocalVariableName(editProvider.getNewVariableName())) {
- addError(INVALID_NAME);
- }
-
- if (editProvider.getSelectedVariableName().equals(editProvider.getNewVariableName())) {
- addError("You didn't choose a different name.");
- }
-
- for (String s : config.getLocalNames()) {
- if (editProvider.getNewVariableName().equals(s)) {
- addError(ALREADY_EXISTS);
- }
- }
- }
-
-}
Deleted: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConfig.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConfig.java 2007-02-22 20:46:57 UTC (rev 2006)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConfig.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -1,104 +0,0 @@
-/***** BEGIN LICENSE BLOCK *****
- * Version: CPL 1.0/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Common Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.eclipse.org/legal/cpl-v10.html
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * Copyright (C) 2006 Mirko Stocker <me...@mi...>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the CPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the CPL, the GPL or the LGPL.
- ***** END LICENSE BLOCK *****/
-
-package org.rubypeople.rdt.refactoring.core.renamelocalvariable;
-
-import org.jruby.ast.Node;
-import org.jruby.ast.types.INameNode;
-import org.rubypeople.rdt.refactoring.documentprovider.DocumentProvider;
-
-public class RenameConfig implements IRenameConfig {
-
- private DocumentProvider docProvider;
- private int caretPosition;
- private Node selectedNode;
- private Node selectedMethod;
- private String[] localNames;
- private LocalVariablesEditProvider editProvider;
-
- public RenameConfig(DocumentProvider docProvider, int caretPosition) {
- this.docProvider = docProvider;
- this.caretPosition = caretPosition;
- }
-
- public String getSelectedNodeName() {
- if (selectedNode instanceof INameNode) {
- return ((INameNode) selectedNode).getName();
- }
- return "";
- }
-
- public DocumentProvider getDocumentProvider() {
- return docProvider;
- }
-
- public int getCaretPosition() {
- return caretPosition;
- }
-
- public boolean hasSelectedMethod() {
- return selectedMethod != null;
- }
-
- public boolean hasLocalNames() {
- return localNames.length > 2;
- }
-
- public Node getSelectedNode() {
- return selectedNode;
- }
-
- public Node getSelectedMethod() {
- return selectedMethod;
- }
-
- public String[] getLocalNames() {
- return localNames.clone();
- }
-
- public void setLocalVariablesEditProvider(LocalVariablesEditProvider editProvider) {
- this.editProvider = editProvider;
- }
-
- public LocalVariablesEditProvider getRenameEditProvider() {
- return editProvider;
- }
-
- public void setSelectedNode(Node selectedNode) {
- this.selectedNode = selectedNode;
- }
-
- public void setSelectedMethod(Node selectedMethod) {
- this.selectedMethod = selectedMethod;
- }
-
- public void setLocalNames(String[] localNames) {
- this.localNames = localNames.clone();
- }
-
-}
Copied: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConditionChecker.java (from rev 1993, trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConditionChecker.java)
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConditionChecker.java (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConditionChecker.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -0,0 +1,136 @@
+/***** BEGIN LICENSE BLOCK *****
+ * Version: CPL 1.0/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Common Public
+ * License Version 1.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * Copyright (C) 2006 Mirko Stocker <me...@mi...>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the CPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the CPL, the GPL or the LGPL.
+ ***** END LICENSE BLOCK *****/
+
+package org.rubypeople.rdt.refactoring.core.renamelocalvariable;
+
+import java.util.Collection;
+
+import org.jruby.ast.ArgumentNode;
+import org.jruby.ast.AssignableNode;
+import org.jruby.ast.BlockArgNode;
+import org.jruby.ast.DAsgnNode;
+import org.jruby.ast.DVarNode;
+import org.jruby.ast.LocalAsgnNode;
+import org.jruby.ast.LocalVarNode;
+import org.jruby.ast.MethodDefNode;
+import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
+import org.jruby.ast.types.INameNode;
+import org.rubypeople.rdt.refactoring.core.NodeProvider;
+import org.rubypeople.rdt.refactoring.core.RefactoringConditionChecker;
+import org.rubypeople.rdt.refactoring.core.SelectionNodeProvider;
+import org.rubypeople.rdt.refactoring.nodewrapper.LocalNodeWrapper;
+import org.rubypeople.rdt.refactoring.util.NameValidator;
+import org.rubypeople.rdt.refactoring.util.NodeUtil;
+
+public class RenameLocalConditionChecker extends RefactoringConditionChecker {
+
+ private static final String ALREADY_EXISTS = "The chosen variable name already exists! Please go back and change it.";
+
+ private static final String INVALID_NAME = "Please enter a valid name for the variable.";
+
+ private static final String NO_VARIABLE_SELECTED = "No variable selected. Please select the variable you want to rename.";
+
+ private static final String NO_LOCAL_VARIABLES = "There are no local variables at the current carret position.";
+
+ private static final Class[] SELECTED_NODE_TYPES = {LocalVarNode.class, LocalAsgnNode.class, ArgumentNode.class,
+ BlockArgNode.class, DVarNode.class, DAsgnNode.class};
+
+ public static final String DEFAULT_ERROR = NO_LOCAL_VARIABLES;
+
+ private RenameLocalConfig config;
+
+ public RenameLocalConditionChecker(RenameLocalConfig config) {
+ super(config.getDocumentProvider(), config);
+ }
+
+ public void init(Object configObj) {
+ config = (RenameLocalConfig) configObj;
+ RootNode rootNode = config.getDocumentProvider().getRootNode();
+ Node selectedNode = SelectionNodeProvider.getSelectedNodeOfType(rootNode, config.getCaretPosition(), SELECTED_NODE_TYPES);
+ if(selectedNode instanceof AssignableNode) {
+ int start = selectedNode.getPosition().getStartOffset();
+ int end = start + ((INameNode) selectedNode).getName().length();
+ if(config.getCaretPosition() < start || config.getCaretPosition() > end) {
+ return;
+ }
+ }
+
+ config.setSelectedNode(selectedNode);
+ if(selectedNode == null) {
+ config.setLocalNames(NodeUtil.getScope(rootNode).getVariables());
+ Collection<MethodDefNode> methodNodes = NodeProvider.getMethodNodes(rootNode);
+ config.setSelectedMethod(SelectionNodeProvider.getSelectedNodeOfType(methodNodes, config.getCaretPosition(), MethodDefNode.class));
+ return;
+ }
+ config.setSelectedMethod(SelectionNodeProvider.getEnclosingScope(rootNode, selectedNode));
+ config.setLocalNames(NodeUtil.getScope(config.getSelectedMethod()).getVariables());
+ }
+
+ @Override
+ protected void checkInitialConditions() {
+ if (!config.hasSelectedNode() || !isSelectedNodeLocalVar()) {
+ addError(NO_LOCAL_VARIABLES);
+ }
+ }
+
+ private boolean isSelectedNodeLocalVar() {
+ Node selected = config.getSelectedNode();
+ if(NodeUtil.nodeAssignableFrom(selected, LocalNodeWrapper.LOCAL_NODES_CLASSES)){
+ return true;
+ }
+ if(NodeUtil.nodeAssignableFrom(selected, ArgumentNode.class, BlockArgNode.class) && NodeUtil.nodeAssignableFrom(config.getSelectedMethod(), MethodDefNode.class)) {
+ MethodDefNode methodNode = (MethodDefNode) config.getSelectedMethod();
+ return methodNode.getNameNode() != selected;
+ }
+ return false;
+ }
+
+ @Override
+ protected void checkFinalConditions() {
+ LocalVariablesEditProvider editProvider = config.getRenameEditProvider();
+ if (editProvider.getSelectedVariableName().equals("") && editProvider.getNewVariableName().equals("")) {
+ addError(NO_VARIABLE_SELECTED);
+ }
+
+ if (!NameValidator.isValidLocalVariableName(editProvider.getNewVariableName())) {
+ addError(INVALID_NAME);
+ }
+
+ if (editProvider.getSelectedVariableName().equals(editProvider.getNewVariableName())) {
+ addError("You didn't choose a different name.");
+ }
+
+ for (String s : config.getLocalNames()) {
+ if (editProvider.getNewVariableName().equals(s)) {
+ addError(ALREADY_EXISTS);
+ }
+ }
+ }
+
+}
Copied: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConfig.java (from rev 1993, trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameConfig.java)
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConfig.java (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamelocalvariable/RenameLocalConfig.java 2007-02-23 11:33:06 UTC (rev 2007)
@@ -0,0 +1,108 @@
+/***** BEGIN LICENSE BLOCK *****
+ * Version: CPL 1.0/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Common Public
+ * License Version 1.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * Copyright (C) 2006 Mirko Stocker <me...@mi...>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others t...
[truncated message content] |