Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 242431 Details for
Bug 425412
[1.8][quick assist] Conversion from anonymous class to lambda loses parameterized type details
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Combined patch on master
eclipse.jdt.ui.patch (text/plain), 7.58 KB, created by
Markus Keller
on 2014-04-28 18:47:19 EDT
(
hide
)
Description:
Combined patch on master
Filename:
MIME Type:
Creator:
Markus Keller
Created:
2014-04-28 18:47:19 EDT
Size:
7.58 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.ui.tests >diff --git ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java >index 58fd6f4..73731c5 100644 >--- ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java >+++ ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java >@@ -672,6 +672,56 @@ > assertProposalDoesNotExist(proposals, FixMessages.LambdaExpressionsFix_convert_to_lambda_expression); > } > >+ public void testConvertToLambda14() throws Exception { >+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("import java.util.List;\n"); >+ buf.append("\n"); >+ buf.append("interface I<T> {\n"); >+ buf.append(" void goo(List<T> i);\n"); >+ buf.append("}\n"); >+ buf.append("\n"); >+ buf.append("public class X {\n"); >+ buf.append(" public static void main(String[] args) {\n"); >+ buf.append(" I i = new I<String>() {\n"); >+ buf.append(" @Override\n"); >+ buf.append(" public void goo(List<String> ls) {\n"); >+ buf.append(" String s = ls.get(0);\n"); >+ buf.append(" }\n"); >+ buf.append(" };\n"); >+ buf.append(" }\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("X.java", buf.toString(), false, null); >+ >+ int offset= buf.toString().indexOf("I<String>()"); >+ AssistContext context= getCorrectionContext(cu, offset, 0); >+ assertNoErrors(context); >+ List proposals= collectAssists(context, false); >+ >+ assertNumberOfProposals(proposals, 2); >+ assertCorrectLabels(proposals); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("import java.util.List;\n"); >+ buf.append("\n"); >+ buf.append("interface I<T> {\n"); >+ buf.append(" void goo(List<T> i);\n"); >+ buf.append("}\n"); >+ buf.append("\n"); >+ buf.append("public class X {\n"); >+ buf.append(" public static void main(String[] args) {\n"); >+ buf.append(" I i = (I<String>) ls -> {\n"); >+ buf.append(" String s = ls.get(0);\n"); >+ buf.append(" };\n"); >+ buf.append(" }\n"); >+ buf.append("}\n"); >+ String expected1= buf.toString(); >+ >+ assertExpectedExistInProposals(proposals, new String[] { expected1 }); >+ } >+ > public void testConvertToLambdaAmbiguousOverridden() throws Exception { > IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null); > StringBuffer buf= new StringBuffer(); >diff --git ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java >index a4a8e96..7df1901 100644 >--- ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java >+++ ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest18.java >@@ -182,7 +182,20 @@ > 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 { >@@ -226,7 +239,19 @@ > 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 testConvertToAnonymous_andBack_WithJoinedSAM() throws Exception { >@@ -302,10 +327,11 @@ > > 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(); >#P org.eclipse.jdt.ui >diff --git core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java >index e86e33e..203978f 100644 >--- core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java >+++ core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java >@@ -581,6 +581,9 @@ > public static ITypeBinding getExplicitCast(Expression initializer, Expression reference) { > ITypeBinding initializerType= initializer.resolveTypeBinding(); > ITypeBinding referenceType= reference.resolveTypeBinding(); >+ if (reference instanceof ClassInstanceCreation) { >+ referenceType= ((ClassInstanceCreation) reference).getType().resolveBinding(); >+ } > if (initializerType == null || referenceType == null) > return null; > >@@ -607,7 +610,7 @@ > return referenceType; > } else { > ITypeBinding targetType= getTargetType(reference); >- if (targetType == null || targetType != referenceType) { >+ if (!referenceType.isEqualTo(targetType)) { // includes targetType == null > return referenceType; > } > } >diff --git core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java >index bacd49a..ca7131d 100644 >--- core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java >+++ core extension/org/eclipse/jdt/internal/corext/fix/LambdaExpressionsFix.java >@@ -240,12 +240,14 @@ > > lambdaExpression.setBody(rewrite.createCopyTarget(lambdaBody)); > Expression replacement= lambdaExpression; >- if (ASTNodes.isTargetAmbiguous(classInstanceCreation)) { >+ ITypeBinding cicTypeBinding= classInstanceCreation.getType().resolveBinding(); >+ 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); >- Type castType= importRewrite.addImport(classInstanceCreation.getType().resolveBinding(), ast, importRewriteContext); >+ Type castType= importRewrite.addImport(cicTypeBinding, ast, importRewriteContext); > cast.setType(castType); > importRemover.registerAddedImports(castType); > replacement= cast;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 425412
:
238951
| 242431