Bug 574588 - fix NPE in "Convert StringBuffer to StringBuilder" cleanup
- fix MethodDeclaration visitor in StringBufferToStringBuilderFixCore
to handle when return type comes back null as in the case of a
constructor
- add testing of private constructors to CleanUpTest1d5 and ensure
an all change will modify StringBuffer parameters
- add testing of private constructors to CleanUpTest16
Change-Id: Id4b7b877ec862356733fb807eaee40e5d3aa1cd1
Signed-off-by: Joerg Kubitz <jkubitz-eclipse@gmx.de>
Signed-off-by: Jeff Johnston <jjohnstn@redhat.com>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/182758
Tested-by: JDT Bot <jdt-bot@eclipse.org>
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/StringBufferToStringBuilderFixCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/StringBufferToStringBuilderFixCore.java
index 9d65bca..ba6128a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/StringBufferToStringBuilderFixCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/StringBufferToStringBuilderFixCore.java
@@ -131,13 +131,14 @@
@Override
public boolean visit(final MethodDeclaration visited) {
- Type returnType= visited.getReturnType2();
- ITypeBinding returnTypeBinding= returnType.resolveBinding();
IMethodBinding methodBinding= visited.resolveBinding();
- if (methodBinding == null || returnTypeBinding == null) {
+ if (methodBinding == null) {
return true;
}
- checkType(returnType);
+ Type returnType= visited.getReturnType2();
+ if (returnType != null) {
+ checkType(returnType);
+ }
for (Object obj : visited.parameters()) {
SingleVariableDeclaration parm= (SingleVariableDeclaration)obj;
Type type= parm.getType();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
index 2e9f06a..6f64edb 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
@@ -449,6 +449,8 @@
+ "package test1;\n" //
+ "\n" //
+ "public class TestStringBuilderCleanup extends SuperClass {\n" //
+ + " private TestStringBuilderCleanup(){\n" //
+ + " }\n" //
+ " public record K(StringBuffer comp1) {\n" //
+ " public static StringBuffer field1;\n" //
+ " public static StringBuffer field2;\n" //
@@ -469,6 +471,8 @@
+ "package test1;\n" //
+ "\n" //
+ "public class TestStringBuilderCleanup extends SuperClass {\n" //
+ + " private TestStringBuilderCleanup(){\n" //
+ + " }\n" //
+ " public record K(StringBuffer comp1) {\n" //
+ " public static StringBuffer field1;\n" //
+ " public static StringBuffer field2;\n" //
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
index a90358c..f944e5b 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
@@ -3887,6 +3887,25 @@
}
@Test
+ public void testDoNotConvertStringBufferToStringBuilder() throws Exception {
+ // test bug 574588 NPE on private constructor
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+
+ String sample= "" //
+ + "package test1;\n" //
+ + "\n" //
+ + "public class TestStringBuilderCleanup {\n" //
+ + " private TestStringBuilderCleanup(){\n" //
+ + " }\n" //
+ + "}\n";
+ ICompilationUnit cu1= pack1.createCompilationUnit("TestStringBuilderCleanup.java", sample, false, null);
+
+ enable(CleanUpConstants.STRINGBUFFER_TO_STRINGBUILDER);
+
+ assertRefactoringHasNoChange(new ICompilationUnit[] { cu1 });
+ }
+
+ @Test
public void testConvertStringBufferToStringBuilderAll() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
String sample0= "" //
@@ -3894,6 +3913,9 @@
+ "\n" //
+ "public class SuperClass {\n" //
+ " public StringBuffer field0;\n" //
+ + " private SuperClass(StringBuffer a) {\n" //
+ + " this.field0 = a;\n" //
+ + " }\n" //
+ " public void method0(StringBuffer parm) {\n" //
+ " System.out.println(parm.toString());\n" //
+ " }\n" //
@@ -3977,6 +3999,9 @@
+ "\n" //
+ "public class SuperClass {\n" //
+ " public StringBuilder field0;\n" //
+ + " private SuperClass(StringBuilder a) {\n" //
+ + " this.field0 = a;\n" //
+ + " }\n" //
+ " public void method0(StringBuilder parm) {\n" //
+ " System.out.println(parm.toString());\n" //
+ " }\n" //