Skip to content

Commit

Permalink
Fix lambda cleanup/quick assist when static field is returned (#1210)
Browse files Browse the repository at this point in the history
* Fix lambda cleanup/quick assist when static field is returned

- fixes #1209
- fix LambdaExpressionsFixCore to create a QualifiedName reference
  rather than a QualifiedType
- add new tests to CleanUpTest1d8 and AssistQuickFixTest1d8
  • Loading branch information
jjohnstn committed Feb 21, 2024
1 parent 22437d0 commit 30c501d
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
import org.eclipse.jdt.core.dom.NormalAnnotation;
import org.eclipse.jdt.core.dom.NumberLiteral;
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.QualifiedType;
import org.eclipse.jdt.core.dom.ReturnStatement;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
Expand Down Expand Up @@ -822,9 +821,11 @@ public boolean visit(final SimpleName node) {
&& (variableBinding.getModifiers() & Modifier.STATIC) != 0
&& variableBinding.isField()
&& inheritedTypes.contains(variableBinding.getDeclaringClass())) {
Type copyOfClassName= (Type) rewrite.createCopyTarget(classInstanceCreation.getType());
QualifiedType replacement= ast.newQualifiedType(copyOfClassName, ASTNodes.createMoveTarget(rewrite, node));
rewrite.replace(node, replacement, group);
ITypeBinding cicBinding= classInstanceCreation.getType().resolveBinding();
if (cicBinding != null) {
Name replacement= ast.newName(cicBinding.getName() + "." + node.getFullyQualifiedName()); //$NON-NLS-1$
rewrite.replace(node, replacement, group);
}
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1598,6 +1598,63 @@ public void testConvertToLambda29() throws Exception {
+ "}\n";
assertExpectedExistInProposals(proposals, new String[] { expected1 });
}
@Test
public void testConvertToLambda30() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
String buf= ""
+ "package test;\n"
+ "public class C1 {\n"
+ " interface IOverwriteQuery {\n" //
+ " String ALL = \"ALL\";\n" //
+ "\n" //
+ " String queryOverwrite(String pathString);\n" //
+ " }\n" //
+ "\n" //
+ " class ImportOperation {\n" //
+ " public ImportOperation(IOverwriteQuery query) {\n" //
+ " }\n" //
+ " }\n" //
+ "\n" //
+ " public C1() {\n" //
+ " ImportOperation io = new ImportOperation(new IOverwriteQuery() {\n" //
+ "\n" //
+ " @Override\n" //
+ " public String queryOverwrite(String pathString) {\n" //
+ " return ALL;\n" //
+ " }\n" //
+ "\n" //
+ " });\n" //
+ " }\n" //
+ "}\n";
ICompilationUnit cu= pack1.createCompilationUnit("C1.java", buf, false, null);

int offset= buf.toString().indexOf("new IOverwriteQuery");
AssistContext context= getCorrectionContext(cu, offset, 0);
assertNoErrors(context);
List<IJavaCompletionProposal> proposals= collectAssists(context, false);

assertCorrectLabels(proposals);

String expected1= ""
+ "package test;\n"
+ "public class C1 {\n"
+ " interface IOverwriteQuery {\n" //
+ " String ALL = \"ALL\";\n" //
+ "\n" //
+ " String queryOverwrite(String pathString);\n" //
+ " }\n" //
+ "\n" //
+ " class ImportOperation {\n" //
+ " public ImportOperation(IOverwriteQuery query) {\n" //
+ " }\n" //
+ " }\n" //
+ "\n" //
+ " public C1() {\n" //
+ " ImportOperation io = new ImportOperation(pathString -> IOverwriteQuery.ALL);\n" //
+ " }\n" //
+ "}\n";
assertExpectedExistInProposals(proposals, new String[] { expected1 });
}

@Test
public void testConvertToLambdaAmbiguousOverridden() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,63 @@ public void testConvertToLambda07() throws Exception {
assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 }, null);
}

@Test
public void testConvertToLambda08() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
String sample= "" //
+ "package test1;\n"
+ "public class C1 {\n"
+ " interface IOverwriteQuery {\n" //
+ " String ALL = \"ALL\";\n" //
+ "\n" //
+ " String queryOverwrite(String pathString);\n" //
+ " }\n" //
+ "\n" //
+ " class ImportOperation {\n" //
+ " public ImportOperation(IOverwriteQuery query) {\n" //
+ " }\n" //
+ " }\n" //
+ "\n" //
+ " public C1() {\n" //
+ " ImportOperation io = new ImportOperation(new IOverwriteQuery() {\n" //
+ "\n" //
+ " @Override\n" //
+ " public String queryOverwrite(String pathString) {\n" //
+ " return ALL;\n" //
+ " }\n" //
+ "\n" //
+ " });\n" //
+ " }\n" //
+ "}\n";
String original= sample;
ICompilationUnit cu1= pack1.createCompilationUnit("C1.java", original, false, null);

enable(CleanUpConstants.CONVERT_FUNCTIONAL_INTERFACES);
enable(CleanUpConstants.USE_LAMBDA);

sample= "" //
+ "package test1;\n"
+ "public class C1 {\n"
+ " interface IOverwriteQuery {\n" //
+ " String ALL = \"ALL\";\n" //
+ "\n" //
+ " String queryOverwrite(String pathString);\n" //
+ " }\n" //
+ "\n" //
+ " class ImportOperation {\n" //
+ " public ImportOperation(IOverwriteQuery query) {\n" //
+ " }\n" //
+ " }\n" //
+ "\n" //
+ " public C1() {\n" //
+ " ImportOperation io = new ImportOperation(pathString -> IOverwriteQuery.ALL);\n" //
+ " }\n" //
+ "}\n";
String expected1= sample;

assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 }, null);
}

@Test
public void testConvertToLambdaWithConstant() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
Expand Down

0 comments on commit 30c501d

Please sign in to comment.