Revision: 2537
http://svn.sourceforge.net/rubyeclipse/?rev=2537&view=rev
Author: cawilliams
Date: 2007-05-29 06:07:57 -0700 (Tue, 29 May 2007)
Log Message:
-----------
try to grab a good name for the constant from the value of the selection if possible. If we grab something invalid just fall back to "CONSTANT"
Modified Paths:
--------------
trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractconstant/ExtractConstantConfig.java
Modified: trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractconstant/ExtractConstantConfig.java
===================================================================
--- trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractconstant/ExtractConstantConfig.java 2007-05-24 08:28:12 UTC (rev 2536)
+++ trunk/org.rubypeople.rdt.refactoring/src/org/rubypeople/rdt/refactoring/core/extractconstant/ExtractConstantConfig.java 2007-05-29 13:07:57 UTC (rev 2537)
@@ -10,6 +10,8 @@
package org.rubypeople.rdt.refactoring.core.extractconstant;
import org.jruby.ast.Node;
+import org.rubypeople.rdt.core.RubyConventions;
+import org.rubypeople.rdt.internal.core.util.ASTUtil;
import org.rubypeople.rdt.refactoring.core.IRefactoringConfig;
import org.rubypeople.rdt.refactoring.core.NodeFactory;
import org.rubypeople.rdt.refactoring.core.SelectionInformation;
@@ -19,11 +21,12 @@
public class ExtractConstantConfig implements IRefactoringConfig {
+ private static final String DEFAULT_CONSTANT_NAME = "CONSTANT";
private IDocumentProvider docProvider;
private SelectionInformation selectionInfo;
private Node selectedNodes;
private Node rootNode;
- private String constName = "CONSTANT"; // FIXME Try to guess a good name from the other side of assignment?
+ private String constName = DEFAULT_CONSTANT_NAME;
public ExtractConstantConfig(DocumentProvider docProvider, SelectionInformation selectionInfo) {
this.docProvider = docProvider;
@@ -75,8 +78,42 @@
public void init() {
rootNode = getDocumentProvider().getActiveFileRootNode();
selectedNodes = SelectionNodeProvider.getSelectedNodes(rootNode, getSelection());
+ constName = extractConstantName(selectedNodes);
}
+ private String extractConstantName(Node node) {
+ String name = ASTUtil.stringRepresentation(node);
+ name = trim(name);
+ if (RubyConventions.validateConstant(name).isOK())
+ return name;
+ return DEFAULT_CONSTANT_NAME;
+ }
+
+ private String trim(String name) {
+ name = name.trim();
+ name = name.toUpperCase();
+ name = name.replace(' ', '_');
+ while(true) { // trim until first uppercase letter
+ if (name.length() == 0) break;
+ char c = name.charAt(0);
+ if (!(Character.isUpperCase(c) && Character.isLetter(c))) {
+ name = name.substring(1);
+ } else {
+ break;
+ }
+ }
+ while(true) { // trim end until letter or underscore
+ if (name.length() == 0) break;
+ char c = name.charAt(name.length() - 1);
+ if (!Character.isLetter(c) && c != '_') {
+ name = name.substring(0, name.length() - 1);
+ } else {
+ break;
+ }
+ }
+ return name;
+ }
+
public void setDocumentProvider(IDocumentProvider doc) {
this.docProvider = doc;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|