Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java

Issue 9834028: Initial implementation of "Rename Local Variable" refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: LInked/inline mode for rename Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java
diff --git a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf2df17a0ccd436b5775585e585826ddaf63d503
--- /dev/null
+++ b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/internal/corext/refactoring/rename/TempOccurrenceAnalyzer.java
@@ -0,0 +1,119 @@
+package com.google.dart.tools.internal.corext.refactoring.rename;
+
+import com.google.dart.compiler.ast.ASTVisitor;
+import com.google.dart.compiler.ast.DartIdentifier;
+import com.google.dart.compiler.ast.DartNode;
+import com.google.dart.compiler.ast.DartUnit;
+import com.google.dart.compiler.ast.DartVariable;
+import com.google.dart.compiler.resolver.Element;
+import com.google.dart.tools.internal.corext.dom.ASTNodes;
+
+import org.eclipse.core.runtime.Assert;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+public class TempOccurrenceAnalyzer extends ASTVisitor<Void> {
+ private Set<DartIdentifier> fReferenceNodes;
+// private Set<DartIdentifier> fJavadocNodes;
+
+ private DartVariable fTempDeclaration;
+ private Element fTempBinding;
+
+// private boolean fAnalyzeJavadoc;
+
+// private boolean fIsInJavadoc;
+
+ public TempOccurrenceAnalyzer(DartVariable tempDeclaration/* , boolean analyzeJavadoc */) {
+ Assert.isNotNull(tempDeclaration);
+ fReferenceNodes = new HashSet<DartIdentifier>();
+// fJavadocNodes = new HashSet<DartIdentifier>();
+// fAnalyzeJavadoc = analyzeJavadoc;
+ fTempDeclaration = tempDeclaration;
+ fTempBinding = tempDeclaration.getElement();
+// fIsInJavadoc = false;
+ }
+
+// @Override
+// public void endVisit(Javadoc node) {
+// fIsInJavadoc = false;
+// }
+
+// public DartIdentifier[] getJavadocNodes() {
+// return fJavadocNodes.toArray(new DartIdentifier[fJavadocNodes.size()]);
+// }
+
+ public int getNumberOfReferences() {
+ return fReferenceNodes.size();
+ }
+
+ public DartIdentifier[] getReferenceAndDeclarationNodes() {
+ DartIdentifier[] nodes = fReferenceNodes.toArray(new DartIdentifier[fReferenceNodes.size() + 1]);
+ nodes[fReferenceNodes.size()] = fTempDeclaration.getName();
+ return nodes;
+ }
+
+ public int[] getReferenceAndJavadocOffsets() {
+ int[] offsets = new int[fReferenceNodes.size()];
+ addOffsets(offsets, 0, fReferenceNodes);
+// int[] offsets = new int[fReferenceNodes.size() + fJavadocNodes.size()];
+// addOffsets(offsets, 0, fReferenceNodes);
+// addOffsets(offsets, fReferenceNodes.size(), fJavadocNodes);
+ return offsets;
+ }
+
+ public DartIdentifier[] getReferenceNodes() {
+ return fReferenceNodes.toArray(new DartIdentifier[fReferenceNodes.size()]);
+ }
+
+ public int[] getReferenceOffsets() {
+ int[] offsets = new int[fReferenceNodes.size()];
+ addOffsets(offsets, 0, fReferenceNodes);
+ return offsets;
+ }
+
+ public void perform() {
+ DartNode cuNode = ASTNodes.getParent(fTempDeclaration, DartUnit.class);
+ cuNode.accept(this);
+ }
+
+ //------- visit ------ (don't call)
+
+ @Override
+ public Void visitIdentifier(DartIdentifier node) {
+ if (node.getParent() instanceof DartVariable) {
+ if (((DartVariable) node.getParent()).getName() == node) {
+ return super.visitIdentifier(node);
+// return true; //don't include declaration
+ }
+ }
+
+ if (fTempBinding != null && fTempBinding == node.getElement()) {
+ fReferenceNodes.add(node);
+// if (fIsInJavadoc) {
+// fJavadocNodes.add(node);
+// } else {
+// fReferenceNodes.add(node);
+// }
+ }
+
+ return super.visitIdentifier(node);
+ }
+
+// @Override
+// public boolean visit(Javadoc node) {
+// if (fAnalyzeJavadoc) {
+// fIsInJavadoc = true;
+// }
+// return fAnalyzeJavadoc;
+// }
+
+ private void addOffsets(int[] offsets, int start, Set<DartIdentifier> nodeSet) {
+ int i = start;
+ for (Iterator<DartIdentifier> iter = nodeSet.iterator(); iter.hasNext(); i++) {
+ DartNode node = iter.next();
+ offsets[i] = node.getSourceInfo().getOffset();
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698