Bug 572330 - [cleanup] "Static inner class" should handle method calls
"Static inner class" should convert inner class to static, even if it
calls methods on expressions.
Given:
private class TopLevelClass {
private class InnerClass {
private InnerClass() {
System.out.println();
}
}
}
When:
Applying "Static inner class" cleanup...
Expected:
private class TopLevelClass {
private static class InnerClass {
private InnerClass() {
System.out.println();
}
}
}
Actual:
(no change)
Change-Id: Ic4dad40a9f781d28a8e87f1531b3d9979298a04d
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 6f8ad16..8558970 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
@@ -15211,6 +15211,7 @@
+ "import java.io.File;\n" //
+ "import java.util.Arrays;\n" //
+ "import java.util.Date;\n" //
+ + "import java.util.List;\n" //
+ "\n" //
+ "public class E {\n" //
+ " public class RefactorThisInnerClass {\n" //
@@ -15376,6 +15377,12 @@
+ " return RefactorInnerClassWithQualifiedThisReference.this;\n" //
+ " }\n" //
+ " }\n" //
+ + "\n" //
+ + " public class RefactorInnerClassWithMethodCall {\n" //
+ + " public int methodWithStaticMethodCall(List<String> texts) {\n" //
+ + " return texts.size();\n" //
+ + " }\n" //
+ + " }\n" //
+ "}\n";
String expected= "" //
@@ -15386,6 +15393,7 @@
+ "import java.io.File;\n" //
+ "import java.util.Arrays;\n" //
+ "import java.util.Date;\n" //
+ + "import java.util.List;\n" //
+ "\n" //
+ "public class E {\n" //
+ " public static class RefactorThisInnerClass {\n" //
@@ -15552,6 +15560,12 @@
+ " return RefactorInnerClassWithQualifiedThisReference.this;\n" //
+ " }\n" //
+ " }\n" //
+ + "\n" //
+ + " public static class RefactorInnerClassWithMethodCall {\n" //
+ + " public int methodWithStaticMethodCall(List<String> texts) {\n" //
+ + " return texts.size();\n" //
+ + " }\n" //
+ + " }\n" //
+ "}\n";
// When
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 911b75f..e73a388 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
@@ -32,6 +32,7 @@
import org.eclipse.jdt.core.dom.IExtendedModifier;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
import org.eclipse.jdt.core.dom.QualifiedName;
@@ -132,6 +133,15 @@
return true;
}
+ if (node.getLocationInParent() == MethodInvocation.NAME_PROPERTY) {
+ MethodInvocation methodInvocation= (MethodInvocation) node.getParent();
+
+ if (methodInvocation.getExpression() != null) {
+ // The expression will be evaluated instead
+ return true;
+ }
+ }
+
IBinding binding= node.resolveBinding();
ASTNode root= node.getRoot();