Refactoringaction: net.sourceforge.phpdt.ltk.ui.actions.RenameLocalVariable
authoraxelcl <axelcl>
Sun, 15 Jan 2006 22:12:59 +0000 (22:12 +0000)
committeraxelcl <axelcl>
Sun, 15 Jan 2006 22:12:59 +0000 (22:12 +0000)
This refactoring replaces any $-variable inside a function or method declaration
The action can detect the scope of a PHP function or class method.
NEW: this refactoring now replaces variables inside double quoted strings.

This refactoring doesn't look for global variables inside the function or method.
This refactoring doesn't look correctly for "self::" and "$this" tokens inside the function or method.
This refactoring doesn't look for a preceding PHPDoc comment and therefore cannot replace any local variables inside the PHPdoc comment.

net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ltk/core/RenameLocalVariableDelegate.java

index 11f3fd5..dfa9ce1 100644 (file)
@@ -6,8 +6,6 @@ package net.sourceforge.phpdt.ltk.core;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
 
 import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
@@ -17,22 +15,17 @@ import net.sourceforge.phpdt.internal.compiler.parser.SyntaxError;
 import net.sourceforge.phpdt.internal.core.SourceMethod;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
 
-import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.ltk.core.refactoring.CompositeChange;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.ltk.core.refactoring.TextFileChange;
 import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
 import org.eclipse.ltk.core.refactoring.participants.IConditionChecker;
 import org.eclipse.ltk.core.refactoring.participants.ValidateEditChecker;
-import org.eclipse.text.edits.MultiTextEdit;
-import org.eclipse.text.edits.ReplaceEdit;
 
 /**
  * <p>
@@ -116,16 +109,29 @@ public class RenameLocalVariableDelegate extends RenameIdentifierDelegate {
                        Scanner scanner = new Scanner(true, false);
                        scanner.setSource(methodString.toCharArray());
                        scanner.setPHPMode(true);
-                       char[] word = info.getOldName().toCharArray();
+                       String wordStr = info.getOldName();
+                       char[] word = wordStr.toCharArray();
 
                        int fToken = ITerminalSymbols.TokenNameEOF;
+                       String dqStr;
+                       int dqOffset;
+                       int index;
                        try {
                                fToken = scanner.getNextToken();
                                while (fToken != ITerminalSymbols.TokenNameEOF) {
                                        if (fToken == ITerminalSymbols.TokenNameVariable) {
                                                if (scanner.equalsCurrentTokenSource(word)) {
+                                                       // the current variable token is equal to the given word
                                                        matches.add(Integer.valueOf(scanner.getCurrentTokenStartPosition() + offset));
                                                }
+                                       } else if (fToken == ITerminalSymbols.TokenNameStringDoubleQuote) {
+                                               // determine the word in double quoted strings:
+                                               dqStr = new String(scanner.getCurrentTokenSource());
+                                               dqOffset = scanner.getCurrentTokenStartPosition();
+                                               index = -1;
+                                               while ((index = dqStr.indexOf(wordStr, index + 1)) >= 0) {
+                                                       matches.add(Integer.valueOf(offset + dqOffset + index));
+                                               }
                                        }
                                        fToken = scanner.getNextToken();
                                }