diff options
author | Till Brychcy | 2017-07-24 06:31:38 +0000 |
---|---|---|
committer | Till Brychcy | 2017-07-26 18:51:31 +0000 |
commit | 0c96fd2daf3257905345bd2526233299f5dfb957 (patch) | |
tree | a1212478a15028366b509c459029adc62e92f950 | |
parent | e9e152666432d3acbe4a89c545c889d34a6acac7 (diff) | |
download | eclipse.jdt.ui-0c96fd2daf3257905345bd2526233299f5dfb957.tar.gz eclipse.jdt.ui-0c96fd2daf3257905345bd2526233299f5dfb957.tar.xz eclipse.jdt.ui-0c96fd2daf3257905345bd2526233299f5dfb957.zip |
Bug 520225 - [quick fix] create method not offered for captures and typeI20170728-2000I20170727-2000I20170727-0610
variables as receiver
Change-Id: Ifb578ac2b6962ab5124591f917feae7463b54f3c
Signed-off-by: Till Brychcy <register.eclipse@brychcy.de>
2 files changed, 84 insertions, 1 deletions
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java index fa3673b51a..1982fa38f8 100644 --- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java +++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java @@ -883,7 +883,90 @@ public class UnresolvedMethodsQuickFixTest extends QuickFixTest { assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 }); } + public void testMethodInvokedOnWildcard() throws Exception { + IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null); + StringBuffer buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" abstract T self(); \n"); + buf.append(" void testMethod(E<?> e) {\n"); + buf.append(" e.self().goo();\n"); + buf.append(" }\n"); + buf.append("}\n"); + ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); + + CompilationUnit astRoot= getASTRoot(cu); + ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot); + assertCorrectLabels(proposals); + + buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" abstract T self(); \n"); + buf.append(" void testMethod(E<?> e) {\n"); + buf.append(" e.self().goo();\n"); + buf.append(" }\n"); + buf.append(" private void goo() {\n"); + buf.append(" }\n"); + buf.append("}\n"); + String expected1= buf.toString(); + + buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" abstract T self(); \n"); + buf.append(" void testMethod(E<?> e) {\n"); + buf.append(" ((Object) e.self()).goo();\n"); + buf.append(" }\n"); + buf.append("}\n"); + String expected2= buf.toString(); + + assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 }); + } + public void testMethodInvokedOnBoundedTypeVariable() throws Exception { + IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null); + StringBuffer buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" void testMethod(T t) {\n"); + buf.append(" t.goo();\n"); + buf.append(" }\n"); + buf.append("}\n"); + ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null); + CompilationUnit astRoot= getASTRoot(cu); + ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot); + assertCorrectLabels(proposals); + + buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" void testMethod(T t) {\n"); + buf.append(" t.goo();\n"); + buf.append(" }\n"); + buf.append("\n"); + buf.append(" private void goo() {\n"); + buf.append(" }\n"); + buf.append("}\n"); + String expected1= buf.toString(); + + buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("import java.util.Vector;\n"); + buf.append("public abstract class E<T extends E<?>> {\n"); + buf.append(" void testMethod(T t) {\n"); + buf.append(" ((Object) t).goo();\n"); + buf.append(" }\n"); + buf.append("}\n"); + String expected2= buf.toString(); + + assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 }); + } public void testMethodInGenericTypeSameCU() throws Exception { IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java index cdca2147a6..0590da8368 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java @@ -1122,7 +1122,7 @@ public class UnresolvedElementsSubProcessor { } } if (binding != null && binding.isFromSource()) { - ITypeBinding senderDeclBinding= binding.getTypeDeclaration(); + ITypeBinding senderDeclBinding= binding.getErasure().getTypeDeclaration(); ICompilationUnit targetCU= ASTResolving.findCompilationUnitForBinding(cu, astRoot, senderDeclBinding); if (targetCU != null) { |