Bug 531046 - Fix the UnsupportedOperationException
Change-Id: I5d457a1758e7d9ef2b87aefa054c3f5263a0fd27
Signed-off-by: Jay Arthanareeswaran <jarthana@in.ibm.com>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/TypeResolveTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/TypeResolveTests.java
index 62bac3e..37295b8 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/TypeResolveTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/TypeResolveTests.java
@@ -1328,4 +1328,80 @@
deleteProject("P");
}
}
+public void test531046f() throws CoreException, IOException {
+ if (!isJRE9) return;
+ try {
+ createJava10Project("P", new String[] {"src"});
+ String source = "package p;\n"
+ + "public class X {\n"
+ + " public static void main(java.lang.String[] args) {\n"
+ + " var e = (CharSequence & Comparable<String>) \"x\";\n"
+ + " }\n"
+ + "}\n";
+ createFolder("/P/src/p");
+ createFile("/P/src/p/X.java", source);
+ waitForAutoBuild();
+
+ ICompilationUnit unit = getCompilationUnit("/P/src/p/X.java");
+ String select = "var";
+ IJavaElement[] elements = unit.codeSelect(source.lastIndexOf(select), select.length());
+ assertEquals("should not be empty", 2, elements.length);
+ IType type = (IType) elements[0];
+ assertEquals("incorrect type", "java.lang.CharSequence", type.getFullyQualifiedParameterizedName());
+ type = (IType) elements[1];
+ assertEquals("incorrect type", "java.lang.Comparable<java.lang.String>", type.getFullyQualifiedParameterizedName());
+ } finally {
+ deleteProject("P");
+ }
+}
+public void test531046g() throws CoreException, IOException {
+ if (!isJRE9) return;
+ try {
+ createJava10Project("P", new String[] {"src"});
+ String source = "package p;\n"
+ + "public class X {\n"
+ + " public static void main(java.lang.String[] args) {\n"
+ + " var v_v = (CharSequence & Comparable<String>) \"x\";\n"
+ + " }\n"
+ + "}\n";
+ createFolder("/P/src/p");
+ createFile("/P/src/p/X.java", source);
+ waitForAutoBuild();
+
+ ICompilationUnit unit = getCompilationUnit("/P/src/p/X.java");
+ String select = "v_v";
+ IJavaElement[] elements = unit.codeSelect(source.lastIndexOf(select), select.length());
+ assertEquals("should not be empty", 1, elements.length);
+ ILocalVariable variable = (ILocalVariable) elements[0];
+ assertEquals("incorrect type", "&QCharSequence;:QComparable<QString;>;", variable.getTypeSignature());
+ } finally {
+ deleteProject("P");
+ }
+}
+public void test531046h() throws CoreException, IOException {
+ if (!isJRE9) return;
+ try {
+ createJava10Project("P", new String[] {"src"});
+ String source = "package p;\n"
+ + "public class X {\n"
+ + " public static void main(java.lang.String[] args) {\n"
+ + " var v_v = (CharSequence & Comparable<String>) \"x\";\n"
+ + " System.out.println(v_v);\n"
+ + " }\n"
+ + "}\n";
+ createFolder("/P/src/p");
+ createFile("/P/src/p/X.java", source);
+ waitForAutoBuild();
+
+ ICompilationUnit unit = getCompilationUnit("/P/src/p/X.java");
+ String select = "v_v";
+ IJavaElement[] elements = unit.codeSelect(source.lastIndexOf(select), select.length());
+ assertEquals("should not be empty", 1, elements.length);
+ ILocalVariable variable = (ILocalVariable) elements[0];
+ assertEquals("incorrect type", "&QCharSequence;:QComparable<QString;>;", variable.getTypeSignature());
+ } finally {
+ deleteProject("P");
+ }
+}
+
}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
index b342151..cd70330 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 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
@@ -77,6 +77,7 @@
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
import org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope;
import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
+import org.eclipse.jdt.internal.compiler.lookup.IntersectionTypeBinding18;
import org.eclipse.jdt.internal.compiler.lookup.LocalTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding;
import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
@@ -1238,6 +1239,12 @@
if (isLocal(typeBinding) && this.requestor instanceof SelectionRequestor) {
this.noProposal = false;
((SelectionRequestor)this.requestor).acceptLocalType(typeBinding);
+ } else if (binding instanceof IntersectionTypeBinding18) {
+ IntersectionTypeBinding18 intersection = (IntersectionTypeBinding18) binding;
+ ReferenceBinding[] intersectingTypes = intersection.intersectingTypes;
+ for (ReferenceBinding referenceBinding : intersectingTypes) {
+ selectFrom(referenceBinding, parsedUnit, isDeclaration);
+ }
} else {
this.noProposal = false;