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) {