Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] minor changes to rename refactoring

* adds correct warning in case of renaming inside comments.
* adds testcases for bugs marked as fixed in bugzilla.

Markus.
Index: src/org/eclipse/cdt/internal/refactoring/CRenameProcessorDelegate.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring/src/org/eclipse/cdt/internal/refactoring/CRenameProcessorDelegate.java,v
retrieving revision 1.2
diff -u -r1.2 CRenameProcessorDelegate.java
--- src/org/eclipse/cdt/internal/refactoring/CRenameProcessorDelegate.java	21 May 2005 19:09:19 -0000	1.2
+++ src/org/eclipse/cdt/internal/refactoring/CRenameProcessorDelegate.java	2 Jun 2005 14:15:06 -0000
@@ -154,9 +154,15 @@
         
         HashSet fileset= new HashSet();
         int potentialMatchCount= 0;
+        int commentCount=0;
         for (Iterator iter = fMatches.iterator(); iter.hasNext();) {
             CRefactoringMatch tm = (CRefactoringMatch) iter.next();
-            switch(tm.getAstInformation()) {
+            if (tm.isInComment()) {
+                commentCount++;
+                fileset.add(tm.getFile());
+            }
+            else {
+                switch(tm.getAstInformation()) {
                 case CRefactoringMatch.AST_REFERENCE_OTHER:
                     iter.remove();
                     break;
@@ -166,7 +172,8 @@
                     break;
                 default:
                     fileset.add(tm.getFile());
-                    break;
+                break;
+                }
             }
         }
         if (potentialMatchCount != 0) {
@@ -181,6 +188,18 @@
             }
             result.addWarning(msg);
         }
+        if (commentCount != 0) {
+            String msg= null;
+            if (commentCount == 1) {
+                msg= Messages.getString("CRenameProcessorDelegate.warning.commentMatch.singular"); //$NON-NLS-1$
+            }
+            else {
+                msg= MessageFormat.format(
+                    Messages.getString("CRenameProcessorDelegate.warning.commentMatch.plural"), //$NON-NLS-1$
+                    new Object[]{new Integer(commentCount)});
+            }
+            result.addWarning(msg);
+        }
         IFile[] files= (IFile[]) fileset.toArray(new IFile[fileset.size()]);
         if (context != null) {
             ValidateEditChecker editChecker= 
Index: src/org/eclipse/cdt/internal/refactoring/TextSearchWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring/src/org/eclipse/cdt/internal/refactoring/TextSearchWrapper.java,v
retrieving revision 1.3
diff -u -r1.3 TextSearchWrapper.java
--- src/org/eclipse/cdt/internal/refactoring/TextSearchWrapper.java	21 May 2005 19:09:19 -0000	1.3
+++ src/org/eclipse/cdt/internal/refactoring/TextSearchWrapper.java	2 Jun 2005 14:15:06 -0000
@@ -219,8 +219,14 @@
                         state= CRefactory.OPTION_IN_STRING_LITERAL;
                     	break;
                     case Token.tPREPROCESSOR:
-                        state= categorizePreprocessor(token.getText());
-                    	break;
+                        state= CRefactory.OPTION_IN_PREPROCESSOR_DIRECTIVE;
+                        break;
+                    case Token.tPREPROCESSOR_DEFINE:
+                        state= CRefactory.OPTION_IN_MACRO_DEFINITION;
+                        break;
+                    case Token.tPREPROCESSOR_INCLUDE:
+                        state= CRefactory.OPTION_IN_INCLUDE_DIRECTIVE;
+                        break;
                 }
                 if (state != lastState) {
                     locations.add(new int[] {token.getOffset(), state});
Index: src/org/eclipse/cdt/internal/refactoring/messages.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring/src/org/eclipse/cdt/internal/refactoring/messages.properties,v
retrieving revision 1.6
diff -u -r1.6 messages.properties
--- src/org/eclipse/cdt/internal/refactoring/messages.properties	31 May 2005 15:11:23 -0000	1.6
+++ src/org/eclipse/cdt/internal/refactoring/messages.properties	2 Jun 2005 14:15:06 -0000
@@ -36,6 +36,8 @@
 CRenameProcessorDelegate.task.checkFinalCondition=Checking final conditions
 CRenameProcessorDelegate.warning.potentialMatch.singular=Refactoring contains 1 potential match.
 CRenameProcessorDelegate.warning.potentialMatch.plural=Refactoring contains {0} potential matches.
+CRenameProcessorDelegate.warning.commentMatch.singular=Refactoring contains 1 match within a comment.
+CRenameProcessorDelegate.warning.commentMatch.plural=Refactoring contains {0} matches within comments.
 CRenameProcessorDelegate.error.conflictingDecl=New name conflicts with other declarations
 CRenameTopProcessor.wizard.backup.title=Rename
 CRenameTopProcessor.filelocalFunction=file local function
Index: src/org/eclipse/cdt/refactoring/CRefactoringMatch.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring/src/org/eclipse/cdt/refactoring/CRefactoringMatch.java,v
retrieving revision 1.2
diff -u -r1.2 CRefactoringMatch.java
--- src/org/eclipse/cdt/refactoring/CRefactoringMatch.java	15 Apr 2005 13:55:27 -0000	1.2
+++ src/org/eclipse/cdt/refactoring/CRefactoringMatch.java	2 Jun 2005 14:15:06 -0000
@@ -67,9 +67,13 @@
         if (fAstInformation == AST_REFERENCE) {
             return LABELS[AST_REFERENCE];
         }
-        if ((fLocation & CRefactory.OPTION_IN_COMMENT) != 0) {
+        if (isInComment()) {
             return LABELS[IN_COMMENT];
         }
         return LABELS[POTENTIAL];
     }
+
+    public boolean isInComment() {
+        return (fLocation & CRefactory.OPTION_IN_COMMENT) != 0;
+    }
 }
Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring.tests/plugin.xml,v
retrieving revision 1.2
diff -u -r1.2 plugin.xml
--- plugin.xml	15 Apr 2005 13:55:35 -0000	1.2
+++ plugin.xml	2 Jun 2005 14:15:26 -0000
@@ -25,6 +25,7 @@
       <import plugin="org.eclipse.jface.text"/>
       <import plugin="org.eclipse.ui.workbench.texteditor"/>
       <import plugin="org.eclipse.cdt.core.tests"/>
+      <import plugin="org.eclipse.search"/>
    </requires>
 
    <extension point="org.eclipse.ltk.core.refactoring.renameParticipants">
Index: src/org/eclipse/cdt/refactoring/tests/RefactoringTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring.tests/src/org/eclipse/cdt/refactoring/tests/RefactoringTests.java,v
retrieving revision 1.5
diff -u -r1.5 RefactoringTests.java
--- src/org/eclipse/cdt/refactoring/tests/RefactoringTests.java	21 May 2005 19:08:33 -0000	1.5
+++ src/org/eclipse/cdt/refactoring/tests/RefactoringTests.java	2 Jun 2005 14:15:26 -0000
@@ -17,12 +17,15 @@
 import org.eclipse.cdt.internal.core.dom.SavedCodeReaderFactory;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.ltk.core.refactoring.*;
+import org.eclipse.search.internal.core.text.FileCharSequenceProvider;
 import org.eclipse.text.edits.*;
 
 /**
  * @author markus.schorn@xxxxxxxxxxxxx
  */
 public class RefactoringTests extends BaseTestFramework {
+    private int fBufferSize;
+
     public RefactoringTests() {
     }
 
@@ -33,11 +36,14 @@
     protected void setUp() throws Exception {
         super.setUp();
         disableIndexing();
+        fBufferSize= FileCharSequenceProvider.BUFFER_SIZE;
+        FileCharSequenceProvider.BUFFER_SIZE= 1024*4;
     }
 
     protected void tearDown() throws Exception {
         super.tearDown();
         SavedCodeReaderFactory.getInstance().getCodeReaderCache().flush();
+        FileCharSequenceProvider.BUFFER_SIZE= fBufferSize;
     }
 
     protected void assertTotalChanges(int numChanges, Change changes) throws Exception {
Index: src/org/eclipse/cdt/refactoring/tests/RenameFunctionTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring.tests/src/org/eclipse/cdt/refactoring/tests/RenameFunctionTests.java,v
retrieving revision 1.3
diff -u -r1.3 RenameFunctionTests.java
--- src/org/eclipse/cdt/refactoring/tests/RenameFunctionTests.java	12 May 2005 14:39:20 -0000	1.3
+++ src/org/eclipse/cdt/refactoring/tests/RenameFunctionTests.java	2 Jun 2005 14:15:27 -0000
@@ -32,12 +32,7 @@
         return suite(true);
     }
     public static Test suite( boolean cleanup ) {
-        TestSuite suite = new TestSuite("RenameFunctionTests"); //$NON-NLS-1$
-        suite.addTest(new RenameFunctionTests("testFunctionNameConflicts") ); //$NON-NLS-1$
-        suite.addTest(new RenameFunctionTests("testFunctionsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameFunctionTests("testFunctionNameConflictsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameFunctionTests("testMethodNameConflicts1") ); //$NON-NLS-1$
-        suite.addTest(new RenameFunctionTests("testMethodNameConflicts2") ); //$NON-NLS-1$
+        TestSuite suite = new TestSuite(RenameFunctionTests.class); //$NON-NLS-1$
 
         if (cleanup) {
             suite.addTest( new RefactoringTests("cleanupProject") );    //$NON-NLS-1$
@@ -596,4 +591,37 @@
         status= checkConditions(cpp, offset3, "un_member");  //$NON-NLS-1$
         assertRefactoringOk(status);
     }
+    
+    public void testBug72605() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write("class Foo {               \n"); //$NON-NLS-1$
+        writer.write("  void m1(int x=0);       \n"); //$NON-NLS-1$
+        writer.write("};                        \n"); //$NON-NLS-1$
+        writer.write("void Foo::m1(int x) {}    \n"); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile cpp= importFile("test.cpp", contents ); //$NON-NLS-1$
+        
+        int offset =  contents.indexOf("m1") ; //$NON-NLS-1$
+        int offset2=  contents.indexOf("m1", offset+1) ; //$NON-NLS-1$        
+        Change changes = getRefactorChanges(cpp, offset, "z"); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        changes = getRefactorChanges(cpp, offset2, "z"); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+    }
+    
+    public void testBug72732() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write("class Foo {               \n"); //$NON-NLS-1$
+        writer.write("  virtual void mthd() = 0;\n"); //$NON-NLS-1$
+        writer.write("};                        \n"); //$NON-NLS-1$
+        writer.write("class Moo: public Foo{    \n"); //$NON-NLS-1$
+        writer.write("  void mthd() = 0;        \n"); //$NON-NLS-1$
+        writer.write("};                        \n"); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile cpp= importFile("test.cpp", contents ); //$NON-NLS-1$
+        int offset =  contents.indexOf("mthd") ; //$NON-NLS-1$
+        offset=  contents.indexOf("mthd", offset+1) ; //$NON-NLS-1$        
+        RefactoringStatus status= checkConditions(cpp, offset, "xxx"); //$NON-NLS-1$
+        assertRefactoringWarning(status, "Renaming a virtual method. Consider renaming the base and derived class methods (if any)."); //$NON-NLS-1$
+    }
 }
Index: src/org/eclipse/cdt/refactoring/tests/RenameTypeTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring.tests/src/org/eclipse/cdt/refactoring/tests/RenameTypeTests.java,v
retrieving revision 1.2
diff -u -r1.2 RenameTypeTests.java
--- src/org/eclipse/cdt/refactoring/tests/RenameTypeTests.java	21 May 2005 19:08:33 -0000	1.2
+++ src/org/eclipse/cdt/refactoring/tests/RenameTypeTests.java	2 Jun 2005 14:15:27 -0000
@@ -1642,4 +1642,24 @@
         Change ch= getRefactorChanges(cpp, offset1, "CString"); //$NON-NLS-1$
         assertTotalChanges(countOccurrences(contents, "String"), ch); //$NON-NLS-1$
     }
+    
+    public void testBug72888() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write("class MyEx {};            \n"); //$NON-NLS-1$
+        writer.write("void someFunc() {         \n"); //$NON-NLS-1$
+        writer.write("  throw MyEx();          \n"); //$NON-NLS-1$
+        writer.write("};                        \n"); //$NON-NLS-1$
+        writer.write("int main(){               \n"); //$NON-NLS-1$
+        writer.write("   try{                   \n"); //$NON-NLS-1$
+        writer.write("      someFunc();         \n"); //$NON-NLS-1$
+        writer.write("   } catch(MyEx &e) {}    \n"); //$NON-NLS-1$
+        writer.write("   return 0;              \n"); //$NON-NLS-1$
+        writer.write("}                         \n"); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile cpp= importFile("test.cpp", contents ); //$NON-NLS-1$
+        
+        int offset =  contents.indexOf("MyEx") ; //$NON-NLS-1$
+        Change changes = getRefactorChanges(cpp, offset, "xx"); //$NON-NLS-1$
+        assertTotalChanges( 3, changes );
+    }
 }
Index: src/org/eclipse/cdt/refactoring/tests/RenameVariableTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.refactoring.tests/src/org/eclipse/cdt/refactoring/tests/RenameVariableTests.java,v
retrieving revision 1.4
diff -u -r1.4 RenameVariableTests.java
--- src/org/eclipse/cdt/refactoring/tests/RenameVariableTests.java	21 May 2005 19:08:33 -0000	1.4
+++ src/org/eclipse/cdt/refactoring/tests/RenameVariableTests.java	2 Jun 2005 14:15:28 -0000
@@ -33,23 +33,8 @@
         return suite(true);
     }
     public static Test suite( boolean cleanup ) {
-        TestSuite suite = new TestSuite("RenameVariableTests"); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testLocalNameConflicts") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testLocalNameConflictsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testParameterNameConflicts") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testParameterNameConflictsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testVaribleNameConflicts") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testVaribleNameConflictsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testEnumeratorNameConflicts") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testEnumeratorNameConflictsPlainC") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testMemberNameConflicts1") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testMemberNameConflicts2") ); //$NON-NLS-1$
-
-        suite.addTest(new RenameVariableTests("testReferenceViaMacro") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testReferenceViaMacro2") ); //$NON-NLS-1$
-        suite.addTest(new FailingTest(new RenameVariableTests("testReferenceViaMacro3"), 90956) ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testReferenceViaMacro4") ); //$NON-NLS-1$
-        suite.addTest(new RenameVariableTests("testReferenceViaMacro5") ); //$NON-NLS-1$
+        TestSuite suite = new TestSuite(RenameVariableTests.class); //$NON-NLS-1$
+        suite.addTest(new FailingTest(new RenameVariableTests("failReferenceViaMacro3"), 90956) ); //$NON-NLS-1$
 
         if (cleanup) {
             suite.addTest( new RefactoringTests("cleanupProject") );    //$NON-NLS-1$
@@ -1392,7 +1377,7 @@
         assertChange( changes, cpp, offset2, 2, "z" );  //$NON-NLS-1$
     }
 
-    public void testReferenceViaMacro3() throws Exception {
+    public void failReferenceViaMacro3() throws Exception {
         StringWriter writer = new StringWriter();
         writer.write("#define INC(x,y) x+=y      \n"); //$NON-NLS-1$
         writer.write("void f() {                 \n"); //$NON-NLS-1$
@@ -1448,5 +1433,25 @@
         assertTotalChanges( 1, changes );
         assertChange( changes, cpp, offset, 2, "z" );  //$NON-NLS-1$
     }
-
+    
+    public void testBug72646() throws Exception {
+        StringWriter writer = new StringWriter();
+        writer.write("class C2: public C1 {     \n"); //$NON-NLS-1$
+        writer.write("  C2(int x, int y);       \n"); //$NON-NLS-1$
+        writer.write("  int y;                  \n"); //$NON-NLS-1$
+        writer.write("};                        \n"); //$NON-NLS-1$
+        writer.write("C2::C2(int x, int y)      \n"); //$NON-NLS-1$
+        writer.write("   :C1(x), y(y) {}        \n"); //$NON-NLS-1$
+        String contents = writer.toString();
+        IFile cpp= importFile("test.cpp", contents ); //$NON-NLS-1$
+        
+        int offset =  contents.indexOf("y") ; //$NON-NLS-1$
+        offset=  contents.indexOf("y", offset+1) ; //$NON-NLS-1$        
+        Change changes = getRefactorChanges(cpp, offset, "z"); //$NON-NLS-1$
+        assertTotalChanges( 2, changes );
+        assertChange( changes, cpp, offset, 1, "z" );  //$NON-NLS-1$
+        offset=  contents.indexOf("y", offset+1) ; //$NON-NLS-1$        
+        offset=  contents.indexOf("y", offset+1) ; //$NON-NLS-1$        
+        assertChange( changes, cpp, offset, 1, "z" );  //$NON-NLS-1$
+    }
 }

Back to the top