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