Bug 570870 - [cleanup] "Static inner class" generates syntax error
Handle this expressions
Change-Id: If4dd6446dbe900969b4834e0dd30566911db5932
Signed-off-by: Fabrice Tiercelin <fabrice.tiercelin@yahoo.fr>
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index ba56318..50981ea 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -14309,6 +14309,18 @@
+ " public boolean aMethod() {\n" //
+ " return true;\n" //
+ " }\n" //
+ + "\n" //
+ + " public class RefactorInnerClassWithThisReference {\n" //
+ + " public RefactorInnerClassWithThisReference aMethod() {\n" //
+ + " return this;\n" //
+ + " }\n" //
+ + " }\n" //
+ + "\n" //
+ + " public class RefactorInnerClassWithQualifiedThisReference {\n" //
+ + " public RefactorInnerClassWithQualifiedThisReference anotherMethod() {\n" //
+ + " return RefactorInnerClassWithQualifiedThisReference.this;\n" //
+ + " }\n" //
+ + " }\n" //
+ "}\n";
String expected= "" //
@@ -14450,6 +14462,18 @@
+ " public boolean aMethod() {\n" //
+ " return true;\n" //
+ " }\n" //
+ + "\n" //
+ + " public static class RefactorInnerClassWithThisReference {\n" //
+ + " public RefactorInnerClassWithThisReference aMethod() {\n" //
+ + " return this;\n" //
+ + " }\n" //
+ + " }\n" //
+ + "\n" //
+ + " public static class RefactorInnerClassWithQualifiedThisReference {\n" //
+ + " public RefactorInnerClassWithQualifiedThisReference anotherMethod() {\n" //
+ + " return RefactorInnerClassWithQualifiedThisReference.this;\n" //
+ + " }\n" //
+ + " }\n" //
+ "}\n";
// When
@@ -14511,6 +14535,18 @@
+ " }\n" //
+ " }\n" //
+ "\n" //
+ + " public class DoNotRefactorInnerClassWithQualifiedThis {\n" //
+ + " public E anotherMethod() {\n" //
+ + " return E.this;\n" //
+ + " }\n" //
+ + " }\n" //
+ + "\n" //
+ + " public class DoNotRefactorInnerClassWithFullyQualifiedThis {\n" //
+ + " public E anotherMethod() {\n" //
+ + " return test1.E.this;\n" //
+ + " }\n" //
+ + " }\n" //
+ + "\n" //
+ " public class NotStaticClass {\n" //
+ " public class DoNotRefactorInnerClassInNotStaticClass {\n" //
+ " int i;\n" //
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StaticInnerClassCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StaticInnerClassCleanUp.java
index f5a0e35..57dc17d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StaticInnerClassCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/StaticInnerClassCleanUp.java
@@ -35,6 +35,7 @@
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SuperFieldAccess;
+import org.eclipse.jdt.core.dom.ThisExpression;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
@@ -153,6 +154,17 @@
return true;
}
+
+ @Override
+ public boolean visit(final ThisExpression node) {
+ if (node.getQualifier() == null
+ || ASTNodes.isSameVariable(innerClass.getName(), node.getQualifier())) {
+ return true;
+ }
+
+ isTopLevelClassMemberUsed= true;
+ return interruptVisit();
+ }
}
@Override