Fixed Bug 217984: [quick assist] wrong type inferred by assign to new
local variable
Added testcases.
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
index fc762d4..2352d99 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -69,6 +69,7 @@
}
+ @Override
protected void setUp() throws Exception {
Hashtable options= TestOptions.getDefaultOptions();
options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
@@ -94,6 +95,7 @@
}
+ @Override
protected void tearDown() throws Exception {
JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
}
@@ -5918,4 +5920,176 @@
assertCorrectLabels(proposals);
assertProposalDoesNotExist(proposals, CorrectionMessages.AdvancedQuickAssistProcessor_convertToIfReturn);
}
+
+ // bug 217984
+ public void testAssignToNewVariable() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<?> g = new Gen<>();\n");
+ buf.append(" g.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Gen.java", buf.toString(), false, null);
+
+ String str= "g.get(0);";
+ AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str) + str.length(), 0);
+ List proposals= collectAssists(context, false);
+ assertNumberOfProposals(proposals, 5);
+ assertCorrectLabels(proposals);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<?> g = new Gen<>();\n");
+ buf.append(" List<String> list = g.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" private List<String> list;\n");
+ buf.append("\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<?> g = new Gen<>();\n");
+ buf.append(" list = g.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
+
+ }
+
+ // bug 217984
+ public void testAssignToNewVariable1() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? extends Cloneable> ge = new Gen<>();\n");
+ buf.append(" ge.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Gen.java", buf.toString(), false, null);
+
+ String str= "ge.get(0)";
+ AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str) + str.length(), 0);
+ List proposals= collectAssists(context, false);
+ assertNumberOfProposals(proposals, 7);
+ assertCorrectLabels(proposals);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? extends Cloneable> ge = new Gen<>();\n");
+ buf.append(" Cloneable cloneable = ge.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" private Cloneable cloneable;\n");
+ buf.append("\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? extends Cloneable> ge = new Gen<>();\n");
+ buf.append(" cloneable = ge.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
+ }
+
+ // bug 217984
+ public void testAssignToNewVariable2() throws Exception {
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? super Vector<String>> gs = new Gen<>();\n");
+ buf.append(" gs.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("Gen.java", buf.toString(), false, null);
+
+ String str= "gs.get(0)";
+ AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str) + str.length(), 0);
+ List proposals= collectAssists(context, false);
+ assertNumberOfProposals(proposals, 7);
+ assertCorrectLabels(proposals);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? super Vector<String>> gs = new Gen<>();\n");
+ buf.append(" List<String> list = gs.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import java.util.ArrayList;\n");
+ buf.append("import java.util.List;\n");
+ buf.append("import java.util.RandomAccess;\n");
+ buf.append("import java.util.Vector;\n");
+ buf.append("\n");
+ buf.append("class Gen<E extends List<String> & RandomAccess> extends ArrayList<E> {\n");
+ buf.append(" private List<String> list;\n");
+ buf.append("\n");
+ buf.append(" void foo() {\n");
+ buf.append(" Gen<? super Vector<String>> gs = new Gen<>();\n");
+ buf.append(" list = gs.get(0);\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected2= buf.toString();
+
+ assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
+ }
}