Bug 460750 - [content assist] Java proposal doesn't offer enum value on
the right-hand side of a ternary expression
Change-Id: I268d294b33d68462ba4fec108953e35cb1c00d38
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
Signed-off-by: Jay <jarthana@in.ibm.com>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/FieldAccessCompletionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/FieldAccessCompletionTest.java
index 7473602..f9f29cc 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/FieldAccessCompletionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/FieldAccessCompletionTest.java
@@ -718,7 +718,7 @@
" Bar() {\n" +
" }\n" +
" boolean foo() {\n" +
- " (isTrue ? true : <CompleteOnMemberAccess:fred().x>);\n" +
+ " return (isTrue ? true : <CompleteOnMemberAccess:fred().x>);\n" +
" }\n" +
"}\n",
// expectedCompletionIdentifier:
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
index b82bbd8..258fd70 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
@@ -3264,4 +3264,70 @@
"toString[METHOD_DECLARATION]{public String toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, "+overrideRelevance+"}",
requestor.getResults());
}
+
+public void testBug460750a() throws JavaModelException {
+ this.workingCopies = new ICompilationUnit[1];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src/Foo.java",
+ "public class Foo {\n" +
+ " enum MyEnum {\n" +
+ " FOO, BAR\n" +
+ " }\n" +
+ " public void setMyEnumValue(MyEnum myEnumValue) {\n" +
+ " }\n" +
+ " public void meth() {\n" +
+ " this.setMyEnumValue(new String().isEmpty() ? MyEnum.FOO:BAR);\n" +
+ " }\n" +
+ "}\n");
+
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+ requestor.allowAllRequiredProposals();
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "FOO:BAR";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+ System.out.println("res=");
+ System.out.println("");
+
+ assertResults(
+ "BAR[FIELD_REF]{MyEnum.BAR, LFoo$MyEnum;, LFoo$MyEnum;, BAR, null, 108}",
+ requestor.getResults());
+}
+
+public void testBug460750b() throws JavaModelException {
+ this.workingCopies = new ICompilationUnit[1];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src/EnumRelatedCompletions.java",
+ "public class EnumRelatedCompletions {\n" +
+ " enum MyEnum {\n" +
+ " FOO, BAR, QUZ \n" +
+ " }\n" +
+ " public void setMyEnumValue(MyEnum myEnumValue) {\n" +
+ " }\n" +
+ " public void meth() {\n" +
+ " this.setMyEnumValue(new String().isEmpty() ? MyEnum.FOO:BAR);\n" +
+ " MyEnum e= MyEnum.FOO;\n" +
+ " if(e !=QUZ) { \n" +
+ " }\n" +
+ " }\n" +
+ "}\n");
+
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+ requestor.allowAllRequiredProposals();
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "=QUZ";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+ System.out.println("res=");
+ System.out.println("");
+ System.out.println("res=");
+ System.out.println(requestor.getResults());
+
+ assertResults(
+ "QUZ[FIELD_REF]{MyEnum.QUZ, LEnumRelatedCompletions$MyEnum;, LEnumRelatedCompletions$MyEnum;, QUZ, null, 108}",
+ requestor.getResults());
+}
+
+
+
}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index 4120b82..f2b428d 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -4076,6 +4076,7 @@
BinaryExpression binaryExpression = (BinaryExpression) parent;
switch(operator) {
case OperatorIds.EQUAL_EQUAL :
+ case OperatorIds.NOT_EQUAL :
// expected type is not relevant in this case
TypeBinding binding = binaryExpression.left.resolvedType;
if (binding != null) {
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
index aa1e237..fe2394e 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
@@ -630,7 +630,9 @@
|| (expression instanceof AllocationExpression
&& ((AllocationExpression)expression).type == this.assistNode)
|| (expression instanceof AND_AND_Expression
- && (this.elementPtr >= 0 && this.elementObjectInfoStack[this.elementPtr] instanceof InstanceOfExpression))){
+ && (this.elementPtr >= 0 && this.elementObjectInfoStack[this.elementPtr] instanceof InstanceOfExpression))
+ || (expression instanceof ConditionalExpression
+ && ((ConditionalExpression) expression).valueIfFalse == this.assistNode)){
buildMoreCompletionContext(expression);
if (this.assistNodeParent == null
&& expression instanceof Assignment) {