Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoopur Gupta2014-02-19 12:41:13 +0000
committerNoopur Gupta2014-02-19 12:41:13 +0000
commit7ac9de0f154fb3553d36df6bc22079e0d68fdc85 (patch)
treeef0cfd0a66fde72fc817ecba972a82c7f6e8f27b
parent1e7fd470ba063434dde6553e25aca4031e42912b (diff)
downloadeclipse.jdt.ui-7ac9de0f154fb3553d36df6bc22079e0d68fdc85.tar.gz
eclipse.jdt.ui-7ac9de0f154fb3553d36df6bc22079e0d68fdc85.tar.xz
eclipse.jdt.ui-7ac9de0f154fb3553d36df6bc22079e0d68fdc85.zip
Fixed bug 425412: [1.8][quick assist] Conversion from anonymous class to
lambda loses parameterized type details - used IBinding#isEqualTo and updated tests with additional casts
-rw-r--r--org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java32
-rw-r--r--org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java2
-rw-r--r--org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java7
3 files changed, 35 insertions, 6 deletions
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java
index 32b0edf93b..3279ee9311 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java
@@ -186,7 +186,20 @@ public class CleanUpTest18 extends CleanUpTestCase {
disable(CleanUpConstants.USE_ANONYMOUS_CLASS_CREATION);
enable(CleanUpConstants.USE_LAMBDA);
- assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { original });
+ buf= new StringBuffer();
+ buf.append("package test;\n");
+ buf.append("import java.util.*;\n");
+ buf.append("public class E {\n");
+ buf.append(" void foo(Integer[] ints){\n");
+ buf.append(" Arrays.sort(ints, (Comparator<Integer>) (i1, i2) -> i1 - i2);\n");
+ buf.append(" Comparator<?> cw = (Comparator<Object>) (w1, w2) -> 0;\n");
+ buf.append(" Comparator cr = (r1, r2) -> 0;\n");
+ buf.append(" Comparator<? extends Number> ce = (Comparator<Number>) (n1, n2) -> -0;\n");
+ buf.append(" };\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected2 });
}
public void testConvertToAnonymous_andBack_WithWildcards1() throws Exception {
@@ -230,7 +243,19 @@ public class CleanUpTest18 extends CleanUpTestCase {
disable(CleanUpConstants.USE_ANONYMOUS_CLASS_CREATION);
enable(CleanUpConstants.USE_LAMBDA);
- assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { original });
+ buf= new StringBuffer();
+ buf.append("package test;\n");
+ buf.append("\n");
+ buf.append("interface I<M> {\n");
+ buf.append(" M run(M x);\n");
+ buf.append("}\n");
+ buf.append("\n");
+ buf.append("class Test {\n");
+ buf.append(" I<?> li = (I<Object>) s -> null;\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected2 });
}
public void testConvertToLambdaNestedWithImports() throws Exception {
@@ -261,10 +286,11 @@ public class CleanUpTest18 extends CleanUpTestCase {
buf= new StringBuffer();
buf.append("package test;\n");
+ buf.append("import java.util.concurrent.Callable;\n");
buf.append("import java.util.concurrent.Executors;\n");
buf.append("public class E {\n");
buf.append(" void foo() {\n");
- buf.append(" new Thread(() -> Executors.newSingleThreadExecutor().submit(() -> \"hi\"));\n");
+ buf.append(" new Thread(() -> Executors.newSingleThreadExecutor().submit((Callable<String>) () -> \"hi\"));\n");
buf.append(" }\n");
buf.append("}\n");
String expected1= buf.toString();
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
index 97ad0a14eb..93757741ff 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
@@ -585,7 +585,7 @@ public class ASTNodes {
return referenceType;
} else {
ITypeBinding targetType= getTargetType(reference);
- if (targetType != null && targetType != referenceType) {
+ if (!referenceType.isEqualTo(targetType)) {
return referenceType;
}
}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java
index 55bcd7e4ff..890d193cc3 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java
@@ -250,12 +250,15 @@ public class LambdaExpressionsFix extends CompilationUnitRewriteOperationsFix {
lambdaExpression.setBody(rewrite.createCopyTarget(lambdaBody));
Expression replacement= lambdaExpression;
ITypeBinding cicTypeBinding= classInstanceCreation.getType().resolveBinding();
- if (ASTNodes.isTargetAmbiguous(classInstanceCreation) || cicTypeBinding != ASTNodes.getTargetType(classInstanceCreation)) {
+ ITypeBinding targetTypeBinding= ASTNodes.getTargetType(classInstanceCreation);
+ if (cicTypeBinding != null && (ASTNodes.isTargetAmbiguous(classInstanceCreation) || !cicTypeBinding.isEqualTo(targetTypeBinding))) {
CastExpression cast= ast.newCastExpression();
cast.setExpression(lambdaExpression);
ImportRewrite importRewrite= cuRewrite.getImportRewrite();
ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(classInstanceCreation, importRewrite);
- cast.setType(importRewrite.addImport(cicTypeBinding, ast, importRewriteContext));
+ Type castType= importRewrite.addImport(cicTypeBinding, ast, importRewriteContext);
+ importRemover.registerAddedImports(castType);
+ cast.setType(castType);
replacement= cast;
}
rewrite.replace(classInstanceCreation, replacement, group);

Back to the top