|
From: <mir...@us...> - 2007-04-19 08:56:45
|
Revision: 2339
http://svn.sourceforge.net/rubyeclipse/?rev=2339&view=rev
Author: mirkostocker
Date: 2007-04-19 01:56:37 -0700 (Thu, 19 Apr 2007)
Log Message:
-----------
rename module is complete
Modified Paths:
--------------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/ClassFinder.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/renamemodule/IncludeRenameEditProvider.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeFinder.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConditionChecker.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConfig.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleRefactoring.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/ClassNodeWrapper.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/RealClassNodeWrapper.java
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/util/NameHelper.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamemodule/TC_ModuleInclusionFinder.java
trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/util/TC_NameHelper.java
Added Paths:
-----------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleSpecifierWrapper.java
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.result.rb
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.source.rb
trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.test_properties
trunk/org.rubypeople.rdt.refactoring.tests/resources/util/
trunk/org.rubypeople.rdt.refactoring.tests/resources/util/TC_NameHelper_ModulePrefix.rb
Removed Paths:
-------------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeWrapper.java
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/ClassFinder.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/ClassFinder.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/ClassFinder.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -39,7 +39,7 @@
public class ClassFinder implements IClassFinder {
private final String name;
private Collection<ClassNodeWrapper> classNodes;
- private final String modulePrefix;
+ private String modulePrefix;
private interface INodeAcceptor {
boolean accept(PartialClassNodeWrapper node);
@@ -77,8 +77,14 @@
public Collection<ClassNode> findChildren() {
return find(new INodeAcceptor(){
public boolean accept(PartialClassNodeWrapper node) {
- return (node.getModulePrefix() + node.getSuperClassName()).equals(modulePrefix + name);
+ String fullName = node.getModulePrefix();
+ if(!"".equals(fullName)) {
+ fullName += "::";
+ }
+ fullName += node.getSuperClassName();
+ return (fullName).equals(modulePrefix + name);
+
}});
}
}
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-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renameclass/RenameClassConditionChecker.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -58,7 +58,12 @@
}
} catch (NoClassNodeException e) {return;}
- config.setModulePrefix(classNode.getFirstPartialClassNode().getModulePrefix());
+ String modulePrefix = classNode.getFirstPartialClassNode().getModulePrefix();
+ if("".equals(modulePrefix)) {
+ config.setModulePrefix("");
+ } else {
+ config.setModulePrefix(modulePrefix + "::");
+ }
config.setSelectedNode((ClassNode) classNode.getFirstPartialClassNode().getWrappedNode());
config.setNewName(classNode.getName());
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/IncludeRenameEditProvider.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/IncludeRenameEditProvider.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/IncludeRenameEditProvider.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -45,9 +45,12 @@
public Collection<FileEditProvider> getEditProviders() {
Collection<FileEditProvider> edits = new ArrayList<FileEditProvider>();
- for(ModuleIncludeWrapper include : new ModuleIncludeFinder(config.getDocumentProvider()).find(config.getOriginalFullName())) {
- include.setNewName(config.getOriginalName(), config.getNewName());
- edits.add(new FileEditProvider(include.getWrappedNode().getPosition().getFile(), new SimpleNodeEditProvider(include.getWrappedNode())));
+ Collection<ModuleSpecifierWrapper> wrappers = config.getIncludes();
+ wrappers.addAll(config.getSelectedCalls());
+
+ for(ModuleSpecifierWrapper node : wrappers) {
+ node.setNewName(config.getOriginalName(), config.getNewName());
+ edits.add(new FileEditProvider(node.getWrappedNode().getPosition().getFile(), new SimpleNodeEditProvider(node.getWrappedNode())));
}
return edits;
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeFinder.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeFinder.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeFinder.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -42,11 +42,11 @@
this.document = document;
}
- public Collection<ModuleIncludeWrapper> find(String name) {
- ArrayList<ModuleIncludeWrapper> includes = new ArrayList<ModuleIncludeWrapper>();
+ public Collection<ModuleSpecifierWrapper> find(String name) {
+ ArrayList<ModuleSpecifierWrapper> includes = new ArrayList<ModuleSpecifierWrapper>();
- for (ModuleIncludeWrapper includeWrapper : findAllIncludes()) {
- if(includeWrapper.getFullName().startsWith(name)) {
+ for (ModuleSpecifierWrapper includeWrapper : findAllIncludes()) {
+ if(includeWrapper.getFullName().equals(name)) {
includes.add(includeWrapper);
}
}
@@ -54,8 +54,8 @@
return includes;
}
- private ArrayList<ModuleIncludeWrapper> findAllIncludes() {
- ArrayList<ModuleIncludeWrapper> includes = new ArrayList<ModuleIncludeWrapper>();
+ private ArrayList<ModuleSpecifierWrapper> findAllIncludes() {
+ ArrayList<ModuleSpecifierWrapper> includes = new ArrayList<ModuleSpecifierWrapper>();
for(ClassNodeWrapper classNodeWrapper : document.getIncludedClassNodeProvider().getAllClassNodes()) {
includes.addAll(classNodeWrapper.getIncludes());
Deleted: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeWrapper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeWrapper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeWrapper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -1,121 +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) 2007 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.renamemodule;
-
-import org.jruby.ast.Colon2Node;
-import org.jruby.ast.ConstNode;
-import org.jruby.ast.Node;
-import org.jruby.ast.types.INameNode;
-import org.rubypeople.rdt.refactoring.core.NodeProvider;
-import org.rubypeople.rdt.refactoring.nodewrapper.INodeWrapper;
-import org.rubypeople.rdt.refactoring.util.NameHelper;
-
-public abstract class ModuleIncludeWrapper implements INodeWrapper {
-
- protected String modulePrefix;
-
- private static class Colon2IncludeWrapper extends ModuleIncludeWrapper {
- protected Colon2Node node;
-
- public Colon2IncludeWrapper(Colon2Node node, String modulePrefix) {
- this.node = node;
- this.modulePrefix = modulePrefix;
- }
-
- @Override
- public String getIncludeName() {
- return NameHelper.getFullyQualifiedName(node);
- }
-
- @Override
- public Node getWrappedNode() {
- return node;
- }
-
- @Override
- public void setNewName(String oldName, String newName) {
- for (Node node : NodeProvider.getSubNodes(this.node, Colon2Node.class, ConstNode.class)) {
- INameNode nameNode = (INameNode) node;
- if(!nameNode.getName().equals(oldName)) {
- continue;
- }
-
- if(node instanceof Colon2Node) {
- ((Colon2Node) node).setName(newName);
- return;
- } else {
- ((ConstNode) node).setName(newName);
- return;
- }
- }
- }
- }
-
- private static class ConstIncludeWrapper extends ModuleIncludeWrapper {
- protected ConstNode node;
-
- public ConstIncludeWrapper(ConstNode node, String modulePrefix) {
- this.node = node;
- this.modulePrefix = modulePrefix;
- }
-
- @Override
- public String getIncludeName() {
- return node.getName();
- }
-
- @Override
- public Node getWrappedNode() {
- return node;
- }
-
- @Override
- public void setNewName(String oldName, String newName) {
- node.setName(newName);
- }
- }
-
- public static ModuleIncludeWrapper create(Node node, String modulePrefix) {
-
- if(node instanceof Colon2Node) {
- return new Colon2IncludeWrapper((Colon2Node) node, modulePrefix);
- } else {
- return new ConstIncludeWrapper((ConstNode) node, modulePrefix);
- }
- }
-
- public abstract Node getWrappedNode();
-
- public abstract String getIncludeName();
-
- public String getFullName() {
- return modulePrefix + getIncludeName();
- }
- public abstract void setNewName(String oldName, String newName);
-}
Copied: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleSpecifierWrapper.java (from rev 2325, trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleIncludeWrapper.java)
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleSpecifierWrapper.java (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/ModuleSpecifierWrapper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -0,0 +1,124 @@
+/***** 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) 2007 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.renamemodule;
+
+import org.jruby.ast.Colon2Node;
+import org.jruby.ast.ConstNode;
+import org.jruby.ast.Node;
+import org.jruby.ast.types.INameNode;
+import org.rubypeople.rdt.refactoring.core.NodeProvider;
+import org.rubypeople.rdt.refactoring.nodewrapper.INodeWrapper;
+import org.rubypeople.rdt.refactoring.util.NameHelper;
+
+public abstract class ModuleSpecifierWrapper implements INodeWrapper {
+
+ protected String modulePrefix;
+
+ private static class Colon2IncludeWrapper extends ModuleSpecifierWrapper {
+ protected Colon2Node node;
+
+ public Colon2IncludeWrapper(Colon2Node node, String modulePrefix) {
+ this.node = node;
+ this.modulePrefix = modulePrefix;
+ }
+
+ @Override
+ public String getIncludeName() {
+ return NameHelper.getFullyQualifiedName(node);
+ }
+
+ @Override
+ public Node getWrappedNode() {
+ return node;
+ }
+
+ @Override
+ public void setNewName(String oldName, String newName) {
+ for (Node node : NodeProvider.getSubNodes(this.node, Colon2Node.class, ConstNode.class)) {
+ INameNode nameNode = (INameNode) node;
+ if(!nameNode.getName().equals(oldName)) {
+ continue;
+ }
+
+ if(node instanceof Colon2Node) {
+ ((Colon2Node) node).setName(newName);
+ return;
+ } else {
+ ((ConstNode) node).setName(newName);
+ return;
+ }
+ }
+ }
+ }
+
+ private static class ConstIncludeWrapper extends ModuleSpecifierWrapper {
+ protected ConstNode node;
+
+ public ConstIncludeWrapper(ConstNode node, String modulePrefix) {
+ this.node = node;
+ this.modulePrefix = modulePrefix;
+ }
+
+ @Override
+ public String getIncludeName() {
+ return node.getName();
+ }
+
+ @Override
+ public Node getWrappedNode() {
+ return node;
+ }
+
+ @Override
+ public void setNewName(String oldName, String newName) {
+ node.setName(newName);
+ }
+ }
+
+ public static ModuleSpecifierWrapper create(Node node, String modulePrefix) {
+
+ if(node instanceof Colon2Node) {
+ return new Colon2IncludeWrapper((Colon2Node) node, modulePrefix);
+ } else {
+ return new ConstIncludeWrapper((ConstNode) node, modulePrefix);
+ }
+ }
+
+ public abstract Node getWrappedNode();
+
+ public abstract String getIncludeName();
+
+ public String getFullName() {
+ if("".equals(modulePrefix)) {
+ return getIncludeName();
+ }
+ return modulePrefix + "::" + getIncludeName();
+ }
+ public abstract void setNewName(String oldName, String newName);
+}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConditionChecker.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConditionChecker.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConditionChecker.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -28,10 +28,20 @@
package org.rubypeople.rdt.refactoring.core.renamemodule;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.jruby.ast.Colon2Node;
+import org.jruby.ast.ConstNode;
+import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
import org.rubypeople.rdt.refactoring.core.IRefactoringConfig;
import org.rubypeople.rdt.refactoring.core.ModuleNodeProvider;
+import org.rubypeople.rdt.refactoring.core.NodeProvider;
import org.rubypeople.rdt.refactoring.core.RefactoringConditionChecker;
import org.rubypeople.rdt.refactoring.nodewrapper.ModuleNodeWrapper;
+import org.rubypeople.rdt.refactoring.util.NameHelper;
import org.rubypeople.rdt.refactoring.util.NodeUtil;
public class RenameModuleConditionChecker extends RefactoringConditionChecker {
@@ -60,10 +70,48 @@
return;
}
config.setSelectedModule(selectedModule);
- config.setNewName(selectedModule.getName());
config.setModuleParts(ModuleNodeProvider.findOtherParts(config.getDocumentProvider(), config.getSelectedModule()));
+
+ config.setIncludes(new ModuleIncludeFinder(config.getDocumentProvider()).find(config.getOriginalFullName()));
+
+ config.setPossibleCalls(findPossibleCalls());
+ config.setSelectedCalls(config.getPossibleCalls());
}
+ private ArrayList<ModuleSpecifierWrapper> findPossibleCalls() {
+ ArrayList<ModuleSpecifierWrapper> calls = new ArrayList<ModuleSpecifierWrapper>();
+
+ Collection<Node> toSkip = collectAllModulePartsAndIncludeNameNodes();
+
+ for(String file : config.getDocumentProvider().getFileNames()) {
+ RootNode rootNode = config.getDocumentProvider().getRootNode(file);
+ for (final Node node : NodeProvider.getSubNodes(rootNode, ConstNode.class, Colon2Node.class)) {
+ if(toSkip.contains(node)) {
+ continue;
+ }
+ ModuleSpecifierWrapper module = ModuleSpecifierWrapper.create(node, NameHelper.getEncosingModulePrefix(rootNode, node));
+
+ if(module.getFullName().equals(config.getOriginalFullName())) {
+ calls.add(module);
+ }
+ }
+ }
+
+ return calls;
+ }
+
+ private Collection<Node> collectAllModulePartsAndIncludeNameNodes() {
+ Collection<Node> toSkip = new HashSet<Node>();
+
+ for(ModuleNodeWrapper part : config.getModuleParts()) {
+ toSkip.add(part.getWrappedNode().getCPath());
+ }
+ for(ModuleSpecifierWrapper include : config.getIncludes()) {
+ toSkip.add(include.getWrappedNode());
+ }
+ return toSkip;
+ }
+
private boolean caretIsNotOnModuleName(ModuleNodeWrapper selectedModule) {
return !NodeUtil.positionIsInNode(config.getCarretPosition(), selectedModule.getWrappedNode().getCPath());
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConfig.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConfig.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleConfig.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -31,12 +31,14 @@
import java.util.Collection;
import org.rubypeople.rdt.refactoring.core.IRefactoringConfig;
+import org.rubypeople.rdt.refactoring.core.renamemethod.NodeSelector;
import org.rubypeople.rdt.refactoring.documentprovider.DocumentWithIncluding;
import org.rubypeople.rdt.refactoring.documentprovider.IDocumentProvider;
+import org.rubypeople.rdt.refactoring.nodewrapper.INodeWrapper;
import org.rubypeople.rdt.refactoring.nodewrapper.ModuleNodeWrapper;
import org.rubypeople.rdt.refactoring.ui.INewNameReceiver;
-public class RenameModuleConfig implements IRefactoringConfig, INewNameReceiver {
+public class RenameModuleConfig implements IRefactoringConfig, INewNameReceiver, NodeSelector {
private IDocumentProvider doc;
private final int carretPosition;
@@ -45,6 +47,9 @@
private Collection<ModuleNodeWrapper> moduleParts;
private String originalFullName;
private String originalName;
+ private Collection<? extends INodeWrapper> possibleCalls;
+ private Collection<? extends INodeWrapper> selectedCalls;
+ private Collection<ModuleSpecifierWrapper> includes;
public RenameModuleConfig(IDocumentProvider doc, int carretPosition) {
this.doc = doc;
@@ -63,10 +68,6 @@
this.newName = newName;
}
- public String getSelectedModuleName() {
- return selectedModule != null ? selectedModule.getName() : null;
- }
-
public int getCarretPosition() {
return carretPosition;
}
@@ -77,8 +78,8 @@
public void setSelectedModule(ModuleNodeWrapper selectedModule) {
this.selectedModule = selectedModule;
- this.originalFullName = selectedModule.getFullName();
- this.originalName = selectedModule.getName();
+ originalFullName = selectedModule.getFullName();
+ originalName = selectedModule.getName();
}
public String getNewName() {
@@ -100,4 +101,28 @@
public String getOriginalName() {
return originalName;
}
+
+ public Collection<? extends INodeWrapper> getPossibleCalls() {
+ return possibleCalls;
+ }
+
+ public Collection<ModuleSpecifierWrapper> getSelectedCalls() {
+ return (Collection<ModuleSpecifierWrapper>) selectedCalls;
+ }
+
+ public void setPossibleCalls(Collection<? extends INodeWrapper> possibleCalls) {
+ this.possibleCalls = possibleCalls;
+ }
+
+ public void setSelectedCalls(Collection<? extends INodeWrapper> selectedCalls) {
+ this.selectedCalls = selectedCalls;
+ }
+
+ public void setIncludes(Collection<ModuleSpecifierWrapper> includes) {
+ this.includes = includes;
+ }
+
+ public Collection<ModuleSpecifierWrapper> getIncludes() {
+ return includes;
+ }
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleRefactoring.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleRefactoring.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/renamemodule/RenameModuleRefactoring.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -11,7 +11,7 @@
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
- * Copyright (C) 2006 Mirko Stocker <me...@mi...>
+ * Copyright (C) 2007 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"),
@@ -34,6 +34,7 @@
import org.rubypeople.rdt.refactoring.core.RubyRefactoring;
import org.rubypeople.rdt.refactoring.core.TextSelectionProvider;
import org.rubypeople.rdt.refactoring.ui.NewNameListener;
+import org.rubypeople.rdt.refactoring.ui.pages.OccurenceReplaceSelectionPage;
import org.rubypeople.rdt.refactoring.ui.pages.RenamePage;
public class RenameModuleRefactoring extends RubyRefactoring {
@@ -49,9 +50,11 @@
RenameModuleEditProvider editProvider = new RenameModuleEditProvider(renameModuleConfig);
setEditProvider(editProvider);
- pages.add(new RenamePage(NAME, renameModuleConfig.getSelectedModuleName(),
+ pages.add(new RenamePage(NAME, renameModuleConfig.getOriginalName(),
new NewNameListener(renameModuleConfig, new ConstNameValidator(), new ArrayList<String>())));
-
+ if(!renameModuleConfig.getPossibleCalls().isEmpty()){
+ pages.add(new OccurenceReplaceSelectionPage(renameModuleConfig, renameModuleConfig.getDocumentProvider()));
+ }
}
}
}
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/ClassNodeWrapper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/ClassNodeWrapper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/ClassNodeWrapper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -37,7 +37,7 @@
import org.jruby.ast.Node;
import org.jruby.ast.SymbolNode;
import org.rubypeople.rdt.refactoring.core.NodeFactory;
-import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleIncludeWrapper;
+import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleSpecifierWrapper;
import org.rubypeople.rdt.refactoring.nodewrapper.VisibilityNodeWrapper.METHOD_VISIBILITY;
public class ClassNodeWrapper implements INodeWrapper {
@@ -62,8 +62,8 @@
return fields;
}
- public Collection<ModuleIncludeWrapper> getIncludes() {
- ArrayList<ModuleIncludeWrapper> fields = new ArrayList<ModuleIncludeWrapper>();
+ public Collection<ModuleSpecifierWrapper> getIncludes() {
+ ArrayList<ModuleSpecifierWrapper> fields = new ArrayList<ModuleSpecifierWrapper>();
for (PartialClassNodeWrapper partialClassNode : partialClassNodes) {
fields.addAll(partialClassNode.getIncludeCalls());
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/PartialClassNodeWrapper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/PartialClassNodeWrapper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/PartialClassNodeWrapper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -30,6 +30,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
import org.jruby.ast.ArrayNode;
import org.jruby.ast.BlockNode;
@@ -45,7 +46,7 @@
import org.jruby.ast.SymbolNode;
import org.jruby.ast.VCallNode;
import org.rubypeople.rdt.refactoring.core.NodeProvider;
-import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleIncludeWrapper;
+import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleSpecifierWrapper;
import org.rubypeople.rdt.refactoring.exception.NoClassNodeException;
import org.rubypeople.rdt.refactoring.nodewrapper.VisibilityNodeWrapper.METHOD_VISIBILITY;
import org.rubypeople.rdt.refactoring.util.NodeUtil;
@@ -192,13 +193,18 @@
}
StringBuilder modulePrefix = new StringBuilder();
- for (ModuleNode currentModule : enclosingModules) {
+ Iterator<ModuleNode> it = enclosingModules.iterator();
+ while (it.hasNext()) {
+ ModuleNode currentModule = it.next();
Node cPath = currentModule.getCPath();
if (cPath instanceof Colon2Node) {
- String moduleName = ((Colon2Node) cPath).getName();
- modulePrefix.append(moduleName).append("::"); //$NON-NLS-1$
+ modulePrefix.append(((Colon2Node) cPath).getName());
+ if(it.hasNext()) {
+ modulePrefix.append("::"); //$NON-NLS-1$
+ }
}
}
+
return modulePrefix.toString();
}
@@ -210,13 +216,13 @@
return NodeProvider.getClassFieldOccurences(wrappedNode);
}
- public Collection<ModuleIncludeWrapper> getIncludeCalls() {
- Collection<ModuleIncludeWrapper> includes = new ArrayList<ModuleIncludeWrapper>();
+ public Collection<ModuleSpecifierWrapper> getIncludeCalls() {
+ Collection<ModuleSpecifierWrapper> includes = new ArrayList<ModuleSpecifierWrapper>();
for (Node node : NodeProvider.getSubNodes(wrappedNode, FCallNode.class)) {
FCallNode call = (FCallNode) node;
if("include".equals(call.getName())) { //$NON-NLS-1$
- includes.add(ModuleIncludeWrapper.create(((ArrayNode) call.getArgsNode()).get(0), getModulePrefix()));
+ includes.add(ModuleSpecifierWrapper.create(((ArrayNode) call.getArgsNode()).get(0), getModulePrefix()));
}
}
return includes;
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/RealClassNodeWrapper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/RealClassNodeWrapper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/nodewrapper/RealClassNodeWrapper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -56,7 +56,10 @@
@Override
public String getClassName() {
- return getModulePrefix() + ((INameNode) classNode.getCPath()).getName();
+ if("".equals(getModulePrefix())) {
+ return classNode.getCPath().getName();
+ }
+ return getModulePrefix() + "::" + classNode.getCPath().getName();
}
@Override
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/util/NameHelper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/util/NameHelper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/util/NameHelper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -31,11 +31,15 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Iterator;
+import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jruby.ast.Colon2Node;
+import org.jruby.ast.Colon3Node;
import org.jruby.ast.ConstNode;
+import org.jruby.ast.ModuleNode;
import org.jruby.ast.Node;
import org.jruby.ast.types.INameNode;
import org.rubypeople.rdt.refactoring.core.NodeProvider;
@@ -124,7 +128,37 @@
}
return newName;
}
+
+ public static String getEncosingModulePrefix(Node rootNode, Node node) {
+ Vector<String> nameParts = new Vector<String>();
+
+ while(true) {
+ Node parent = NodeProvider.findParentNode(rootNode, node, ModuleNode.class);
+ if(parent == null) {
+ break;
+ }
+ Colon3Node path = ((ModuleNode) parent).getCPath();
+ if(path != node) {
+ nameParts.insertElementAt(getFullyQualifiedName(path), 0);
+ }
+ node = parent;
+ }
+
+ StringBuilder prefix = new StringBuilder();
+ Iterator<String> it = nameParts.iterator();
+ while (it.hasNext()) {
+ String name = it.next();
+ prefix.append(name);
+
+ if(it.hasNext()) {
+ prefix.append("::");
+ }
+ }
+
+ return prefix.toString();
+ }
+
public static String getFullyQualifiedName(Node n) {
assert n instanceof ConstNode || n instanceof Colon2Node;
Added: trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.result.rb
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.result.rb (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.result.rb 2007-04-19 08:56:37 UTC (rev 2339)
@@ -0,0 +1,5 @@
+def test_unit_name
+ 'test/unit'
+end
+
+require test_unit_name
\ No newline at end of file
Added: trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.source.rb
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.source.rb (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.source.rb 2007-04-19 08:56:37 UTC (rev 2339)
@@ -0,0 +1 @@
+require 'test/unit'
\ No newline at end of file
Added: trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.test_properties
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.test_properties (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring.tests/resources/core/extractmethod/extract_method_test_29.test_properties 2007-04-19 08:56:37 UTC (rev 2339)
@@ -0,0 +1,4 @@
+start=15
+end=15
+name=test_unit_name
+visibility=none
\ No newline at end of file
Added: trunk/org.rubypeople.rdt.refactoring.tests/resources/util/TC_NameHelper_ModulePrefix.rb
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/resources/util/TC_NameHelper_ModulePrefix.rb (rev 0)
+++ trunk/org.rubypeople.rdt.refactoring.tests/resources/util/TC_NameHelper_ModulePrefix.rb 2007-04-19 08:56:37 UTC (rev 2339)
@@ -0,0 +1,23 @@
+module M1
+ var = 5
+end
+
+var = 5
+
+module M1
+ module M3
+ M1.test
+ end
+end
+
+
+module OuterModule
+ module Module
+ end
+end
+
+module OuterModule
+ class Test
+ include Module
+ end
+end
\ No newline at end of file
Modified: trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamemodule/TC_ModuleInclusionFinder.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamemodule/TC_ModuleInclusionFinder.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/core/renamemodule/TC_ModuleInclusionFinder.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -29,7 +29,7 @@
package org.rubypeople.rdt.refactoring.tests.core.renamemodule;
import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleIncludeFinder;
-import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleIncludeWrapper;
+import org.rubypeople.rdt.refactoring.core.renamemodule.ModuleSpecifierWrapper;
import org.rubypeople.rdt.refactoring.documentprovider.IDocumentProvider;
import org.rubypeople.rdt.refactoring.documentprovider.StringDocumentProvider;
import org.rubypeople.rdt.refactoring.tests.FileTestCase;
@@ -43,7 +43,7 @@
public void testSingleDirectInclude() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_SingleDirectInclude.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(1, includes.length);
assertNotNull(includes[0].getWrappedNode());
@@ -53,7 +53,7 @@
public void testMultipleDirectIncludes() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_MultipleDirectIncludes.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(2, includes.length);
assertEquals("M1", includes[0].getFullName());
@@ -63,7 +63,7 @@
public void testIncludeWithNamespace() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_IncludeWithNamespace.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("Namespace::M1").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("Namespace::M1").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(1, includes.length);
assertEquals("Namespace::M1", includes[0].getFullName());
@@ -72,7 +72,7 @@
public void testIncludeFromWithinSameNamespace() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_IncludeFromWithinSameNamespace.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("Modul::M").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("Modul::M").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(2, includes.length);
assertEquals("Modul::M", includes[0].getFullName());
@@ -82,7 +82,7 @@
public void testModulesWithEqualNamesInDifferentNamespaces() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_ModulesWithEqualNamesInDifferentNamespaces.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("Module::InnerModule").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("Module::InnerModule").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(1, includes.length);
assertEquals("Module::InnerModule", includes[0].getFullName());
@@ -91,7 +91,7 @@
public void testNoIncludes() {
IDocumentProvider document = getDocument("TC_ModuleInclusionFinder_NoIncludes.rb");
- ModuleIncludeWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleIncludeWrapper[]{});
+ ModuleSpecifierWrapper[] includes = new ModuleIncludeFinder(document).find("M1").toArray(new ModuleSpecifierWrapper[]{});
assertEquals(0, includes.length);
}
Modified: trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/util/TC_NameHelper.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/util/TC_NameHelper.java 2007-04-18 20:31:12 UTC (rev 2338)
+++ trunk/org.rubypeople.rdt.refactoring.tests/src/org/rubypeople/rdt/refactoring/tests/util/TC_NameHelper.java 2007-04-19 08:56:37 UTC (rev 2339)
@@ -30,11 +30,17 @@
import java.util.ArrayList;
+import org.jruby.ast.Node;
+import org.jruby.ast.RootNode;
+import org.rubypeople.rdt.refactoring.core.SelectionNodeProvider;
+import org.rubypeople.rdt.refactoring.tests.FileTestCase;
import org.rubypeople.rdt.refactoring.util.NameHelper;
-import junit.framework.TestCase;
+public class TC_NameHelper extends FileTestCase {
-public class TC_NameHelper extends TestCase {
+ public TC_NameHelper() {
+ super("Name Helper");
+ }
public void testCreateName() {
assertEquals("string1", NameHelper.createName("string"));
@@ -74,4 +80,29 @@
assertEquals(first[i], name.get(i));
}
}
+
+ public void testModulePrefix() {
+ final RootNode rootNode = getRootNode("TC_NameHelper_ModulePrefix.rb");
+
+ Node node = getLastNode(14, rootNode);
+ assertEquals("M1", NameHelper.getEncosingModulePrefix(rootNode, node));
+
+ node = getLastNode(27, rootNode);
+
+ assertEquals("", NameHelper.getEncosingModulePrefix(rootNode, node));
+
+ node = getLastNode(62, rootNode);
+
+ assertEquals("M1::M3", NameHelper.getEncosingModulePrefix(rootNode, node));
+
+ node = getLastNode(173, rootNode);
+
+ assertEquals("OuterModule", NameHelper.getEncosingModulePrefix(rootNode, node));
+ }
+
+ private Node getLastNode(int pos, RootNode rootNode) {
+ Node[] nodes = SelectionNodeProvider.getSelectedNodesOfType(rootNode, pos, Node.class).toArray(new Node[]{});
+ assertTrue(nodes.length > 0);
+ return nodes[nodes.length - 1];
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|