1 /*******************************************************************************
2  * Copyright (c) 2000, 2010 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.jdt.core.tests.model;
15 
16 import junit.framework.Test;
17 
18 import org.eclipse.core.runtime.*;
19 import org.eclipse.jdt.core.*;
20 import org.eclipse.jdt.core.search.IJavaSearchScope;
21 import org.eclipse.jdt.core.search.SearchEngine;
22 import org.eclipse.jdt.core.search.SearchPattern;
23 
24 
25 /**
26  * Specific test suite for fine grained search.
27  *
28  * @bug 155013: [search] [DCR] More finegrained options for Java search
29  * @test Several tests sets trying to cover as many cases as possible.
30  * <p>
31  * Each set is organize the same way:
32  * <ul>
33  * 	<li>specific method defining the test case called by all the tests of the set,</li>
34  * 	<li>first test performs a search request without any fine grain flag defined
35  * 		to have a precise idea of what are the entire expected references,</li>
36  * 	<li>second test performs a search request with all fine grain flags
37  * 		defined to  verify that flags combination works well</li>
38  * 	<li>each following test each defines one of the possible fine grain flag
39  * 		to verify that it works properly with the given test case,</li>
40  * </ul>
41  * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=155013"
42  */
43 public class JavaSearchFineGrainTests extends JavaSearchTests {
44 
JavaSearchFineGrainTests(String name)45 public JavaSearchFineGrainTests(String name) {
46 	super(name);
47 	this.endChar = "";
48 }
suite()49 public static Test suite() {
50 	return buildModelTestSuite(JavaSearchFineGrainTests.class);
51 }
52 static {
53 //	org.eclipse.jdt.internal.core.search.BasicSearchEngine.VERBOSE = true;
54 }
55 
56 @Override
getJavaSearchScope()57 IJavaSearchScope getJavaSearchScope() {
58 	return super.getJavaSearchScope15();
59 }
60 @Override
getWorkingCopy(String path, String source)61 public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException {
62 	if (this.wcOwner == null) {
63 		this.wcOwner = new WorkingCopyOwner() {};
64 	}
65 	return getWorkingCopy(path, source, this.wcOwner);
66 }
67 
68 @Override
setUp()69 protected void setUp () throws Exception {
70 	super.setUp();
71 	this.resultCollector = new JavaSearchResultCollector();
72 	this.resultCollector.showAccuracy(true);
73 	this.resultCollector.showSelection();
74 	this.resultCollector.showOffset();
75 }
76 
77 static {
78 //	TESTS_PREFIX = "testMethodRef";
79 }
80 
81 /*
82  * References to a specific IField
83  */
84 private final static int ALL_FIELD_METHOD_FINE_GRAIN_FLAGS =
85 	SUPER_REFERENCE |
86 	QUALIFIED_REFERENCE |
87 	THIS_REFERENCE |
88 	IMPLICIT_THIS_REFERENCE;
setUpFieldRef()89 private IField setUpFieldRef() throws JavaModelException {
90 	final ProblemRequestor problemRequestor = new ProblemRequestor();
91 	this.wcOwner = new WorkingCopyOwner() {
92 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
93 			return problemRequestor;
94 		}
95 	};
96 	this.workingCopies = new ICompilationUnit[2];
97 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/field/def/Fields.java",
98 		"package field.def;\n" +
99 		"public class Fields {\n" +
100 		"	public Object field;\n" +
101 		"}\n"
102 	);
103 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/field/ref/TestFields.java",
104 		"package field.ref;\n" +
105 		"import field.def.Fields;\n" +
106 		"public class TestFields extends Fields {\n" +
107 		"	boolean foo(Fields param) {\n" +
108 		"		return super.field == null ||\n" +
109 		"			param.field == null ||\n" +
110 		"			this.field == null ||\n" +
111 		"			field == null;\n" +
112 		"	}\n" +
113 		"}\n"
114 	);
115 	assertEquals("CU Should not have any problem!",
116 		"----------\n" +
117 		"----------\n",
118 		problemRequestor.problems.toString()
119 	);
120 	this.resultCollector.showSelection();
121 	this.resultCollector.showOffset();
122 	return this.workingCopies[0].getType("Fields").getField("field");
123 }
testFieldRef()124 public void testFieldRef() throws CoreException {
125 	search(setUpFieldRef(), REFERENCES);
126 	assertSearchResults(
127 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [		return super.!|field|! == null ||@129] EXACT_MATCH\n" +
128 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			param.!|field|! == null ||@155] EXACT_MATCH\n" +
129 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			this.!|field|! == null ||@180] EXACT_MATCH\n" +
130 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			!|field|! == null;@200] EXACT_MATCH"
131 	);
132 }
testFieldRef_AllFlags()133 public void testFieldRef_AllFlags() throws CoreException {
134 	search(setUpFieldRef(), ALL_FIELD_METHOD_FINE_GRAIN_FLAGS);
135 	assertSearchResults(
136 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [		return super.!|field|! == null ||@129] EXACT_MATCH\n" +
137 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			param.!|field|! == null ||@155] EXACT_MATCH\n" +
138 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			this.!|field|! == null ||@180] EXACT_MATCH\n" +
139 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			!|field|! == null;@200] EXACT_MATCH"
140 	);
141 }
testFieldRef_Qualified()142 public void testFieldRef_Qualified() throws CoreException {
143 	search(setUpFieldRef(), QUALIFIED_REFERENCE);
144 	assertSearchResults(
145 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			param.!|field|! == null ||@155] EXACT_MATCH"
146 	);
147 }
testFieldRef_Simple()148 public void testFieldRef_Simple() throws CoreException {
149 	search(setUpFieldRef(), IMPLICIT_THIS_REFERENCE);
150 	assertSearchResults(
151 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			!|field|! == null;@200] EXACT_MATCH"
152 	);
153 }
testFieldRef_Super()154 public void testFieldRef_Super() throws CoreException {
155 	search(setUpFieldRef(), SUPER_REFERENCE);
156 	assertSearchResults(
157 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [		return super.!|field|! == null ||@129] EXACT_MATCH"
158 	);
159 }
testFieldRef_This()160 public void testFieldRef_This() throws CoreException {
161 	search(setUpFieldRef(), THIS_REFERENCE);
162 	assertSearchResults(
163 		"src/field/ref/TestFields.java boolean field.ref.TestFields.foo(Fields) [			this.!|field|! == null ||@180] EXACT_MATCH"
164 	);
165 }
166 
167 /*
168  * References to a specific IMethod
169  */
setUpMethodRef()170 private IMethod setUpMethodRef() throws JavaModelException {
171 	final ProblemRequestor problemRequestor = new ProblemRequestor();
172 	this.wcOwner = new WorkingCopyOwner() {
173 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
174 			return problemRequestor;
175 		}
176 	};
177 	this.workingCopies = new ICompilationUnit[2];
178 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/meth/def/Methods.java",
179 		"package meth.def;\n" +
180 		"public class Methods {\n" +
181 		"	public void method() {}\n" +
182 		"}\n"
183 	);
184 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/meth/ref/TestMethods.java",
185 		"package meth.ref;\n" +
186 		"import meth.def.Methods;\n" +
187 		"public class TestMethods extends Methods {\n" +
188 		"	void foo(Methods param) {\n" +
189 		"		super.method();\n" +
190 		"		param.method();\n" +
191 		"		this.method();\n" +
192 		"		method();\n" +
193 		"	}\n" +
194 		"}\n"
195 	);
196 	assertEquals("CU Should not have any problem!",
197 		"----------\n" +
198 		"----------\n",
199 		problemRequestor.problems.toString()
200 	);
201 	this.resultCollector.showSelection();
202 	this.resultCollector.showOffset();
203 	return this.workingCopies[0].getType("Methods").getMethod("method", new String[0]);
204 }
testMethodRef()205 public void testMethodRef() throws CoreException {
206 	search(setUpMethodRef(), REFERENCES);
207 	assertSearchResults(
208 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		super.!|method()|!;@121] EXACT_MATCH\n" +
209 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		param.!|method()|!;@139] EXACT_MATCH\n" +
210 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		this.!|method()|!;@156] EXACT_MATCH\n" +
211 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		!|method()|!;@168] EXACT_MATCH"
212 	);
213 }
testMethodRef_AllFlags()214 public void testMethodRef_AllFlags() throws CoreException {
215 	search(setUpMethodRef(), ALL_FIELD_METHOD_FINE_GRAIN_FLAGS);
216 	assertSearchResults(
217 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		super.!|method()|!;@121] EXACT_MATCH\n" +
218 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		param.!|method()|!;@139] EXACT_MATCH\n" +
219 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		this.!|method()|!;@156] EXACT_MATCH\n" +
220 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		!|method()|!;@168] EXACT_MATCH"
221 	);
222 }
testMethodRef_Qualified()223 public void testMethodRef_Qualified() throws CoreException {
224 	search(setUpMethodRef(), QUALIFIED_REFERENCE);
225 	assertSearchResults(
226 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		param.!|method()|!;@139] EXACT_MATCH"
227 	);
228 }
testMethodRef_Simple()229 public void testMethodRef_Simple() throws CoreException {
230 	search(setUpMethodRef(), IMPLICIT_THIS_REFERENCE);
231 	assertSearchResults(
232 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		!|method()|!;@168] EXACT_MATCH"
233 	);
234 }
testMethodRef_Super()235 public void testMethodRef_Super() throws CoreException {
236 	search(setUpMethodRef(), SUPER_REFERENCE);
237 	assertSearchResults(
238 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		super.!|method()|!;@121] EXACT_MATCH"
239 	);
240 }
testMethodRef_This()241 public void testMethodRef_This() throws CoreException {
242 	search(setUpMethodRef(), THIS_REFERENCE);
243 	assertSearchResults(
244 		"src/meth/ref/TestMethods.java void meth.ref.TestMethods.foo(Methods) [		this.!|method()|!;@156] EXACT_MATCH"
245 	);
246 }
247 
248 private final static int ALL_TYPE_FINE_GRAIN_FLAGS =
249 	FIELD_DECLARATION_TYPE_REFERENCE |
250 	LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE |
251 	PARAMETER_DECLARATION_TYPE_REFERENCE |
252 	SUPERTYPE_TYPE_REFERENCE |
253 	THROWS_CLAUSE_TYPE_REFERENCE |
254 	CAST_TYPE_REFERENCE |
255 	CATCH_TYPE_REFERENCE |
256 	CLASS_INSTANCE_CREATION_TYPE_REFERENCE |
257 	RETURN_TYPE_REFERENCE |
258 	IMPORT_DECLARATION_TYPE_REFERENCE |
259 	ANNOTATION_TYPE_REFERENCE |
260 	TYPE_VARIABLE_BOUND_TYPE_REFERENCE |
261 	TYPE_ARGUMENT_TYPE_REFERENCE |
262 	WILDCARD_BOUND_TYPE_REFERENCE;
263 
264 /*
265  * References to a specific IType
266  */
setUpTypeRef(int typeIndex)267 private IType setUpTypeRef(int typeIndex) throws JavaModelException {
268 	final ProblemRequestor problemRequestor = new ProblemRequestor();
269 	this.wcOwner = new WorkingCopyOwner() {
270 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
271 			return problemRequestor;
272 		}
273 	};
274 	this.workingCopies = new ICompilationUnit[3];
275 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/type/def/Types.java",
276 		"package type.def;\n" +
277 		"@Bug\n" +
278 		"@ATest\n" +
279 		"public class Types extends Exception implements ITest1, ITest2 {\n" +
280 		"	ITest1 test1;\n" +
281 		"	ITest2 test2;\n" +
282 		"}\n" +
283 		"@Bug\n" +
284 		"interface ITest1 {}\n" +
285 		"@ATest\n" +
286 		"interface ITest2 extends ITest1 {}\n" +
287 		"@Bug\n" +
288 		"@ATest\n" +
289 		"enum ETest {}\n" +
290 		"@Bug\n" +
291 		"@interface ATest {}\n"
292 	);
293 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/type/def/Bug.java",
294 		"package type.def;\n" +
295 		"public @interface Bug {\n" +
296 		"	int num() default 0;\n" +
297 		"	String comment() default \"\";\n" +
298 		"}\n"
299 	);
300 	this.workingCopies[2] = getWorkingCopy("/JavaSearch15/src/type/ref/TestTypes.java",
301 		"package type.ref;\n" +
302 		"import type.def.Types;\n" +
303 		"import type.def.Bug;\n" +
304 		"\n" +
305 		"@Bug(num=155013)\n" +
306 		"public class TestTypes extends Types {\n" +
307 		"	@Bug(comment=\"field\")\n" +
308 		"	Types field;\n" +
309 		"	@Bug(comment=\"method\", num=155013)\n" +
310 		"	Types method(Types param) throws Types {\n" +
311 		"		Object obj = new Types();\n" +
312 		"		Types local = (Types) obj;\n" +
313 		"		return local;\n" +
314 		"	}\n" +
315 		"	Bug bar(Bug bug) {\n" +
316 		"		try {\n" +
317 		"			method(this);\n" +
318 		"		} catch (Types ex) {\n" +
319 		"		}\n" +
320 		"		return bug;\n" +
321 		"	}\n" +
322 		"}\n"
323 	);
324 	assertEquals("CU Should not have any problem!",
325 		"----------\n" +
326 		"----------\n",
327 		problemRequestor.problems.toString()
328 	);
329 	ICompilationUnit cu = this.workingCopies[typeIndex];
330 	String cuName = cu.getElementName();
331 	return cu.getType(cuName.substring(0, cuName.indexOf('.')));
332 }
testTypeRef()333 public void testTypeRef() throws CoreException {
334 	search(setUpTypeRef(0), REFERENCES);
335 	assertSearchResults(
336 		"src/type/ref/TestTypes.java [import !|type.def.Types|!;@25] EXACT_MATCH\n" +
337 		"src/type/ref/TestTypes.java type.ref.TestTypes [public class TestTypes extends !|Types|! {@111] EXACT_MATCH\n" +
338 		"src/type/ref/TestTypes.java type.ref.TestTypes.field [	!|Types|! field;@143] EXACT_MATCH\n" +
339 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	!|Types|! method(Types param) throws Types {@193] EXACT_MATCH\n" +
340 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(!|Types|! param) throws Types {@206] EXACT_MATCH\n" +
341 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(Types param) throws !|Types|! {@226] EXACT_MATCH\n" +
342 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Object obj = new !|Types|!();@253] EXACT_MATCH\n" +
343 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		!|Types|! local = (Types) obj;@264] EXACT_MATCH\n" +
344 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Types local = (!|Types|!) obj;@279] EXACT_MATCH\n" +
345 		"src/type/ref/TestTypes.java Bug type.ref.TestTypes.bar(Bug) [		} catch (!|Types|! ex) {@366] EXACT_MATCH"
346 	);
347 }
testTypeRef_AllFlags()348 public void testTypeRef_AllFlags() throws CoreException {
349 	search(setUpTypeRef(0), ALL_TYPE_FINE_GRAIN_FLAGS);
350 	assertSearchResults(
351 		"src/type/ref/TestTypes.java [import !|type.def.Types|!;@25] EXACT_MATCH\n" +
352 		"src/type/ref/TestTypes.java type.ref.TestTypes [public class TestTypes extends !|Types|! {@111] EXACT_MATCH\n" +
353 		"src/type/ref/TestTypes.java type.ref.TestTypes.field [	!|Types|! field;@143] EXACT_MATCH\n" +
354 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	!|Types|! method(Types param) throws Types {@193] EXACT_MATCH\n" +
355 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(!|Types|! param) throws Types {@206] EXACT_MATCH\n" +
356 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(Types param) throws !|Types|! {@226] EXACT_MATCH\n" +
357 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Object obj = new !|Types|!();@253] EXACT_MATCH\n" +
358 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		!|Types|! local = (Types) obj;@264] EXACT_MATCH\n" +
359 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Types local = (!|Types|!) obj;@279] EXACT_MATCH\n" +
360 		"src/type/ref/TestTypes.java Bug type.ref.TestTypes.bar(Bug) [		} catch (!|Types|! ex) {@366] EXACT_MATCH"
361 	);
362 }
testTypeRef_Allocation()363 public void testTypeRef_Allocation() throws CoreException {
364 	search(setUpTypeRef(0), CLASS_INSTANCE_CREATION_TYPE_REFERENCE);
365 	assertSearchResults(
366 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Object obj = new !|Types|!();@253] EXACT_MATCH"
367 	);
368 }
testTypeRef_Annotation()369 public void testTypeRef_Annotation() throws CoreException {
370 	search(setUpTypeRef(1), ANNOTATION_TYPE_REFERENCE);
371 	assertSearchResults(
372 		"src/type/def/Types.java type.def.Types [@!|Bug|!@19] EXACT_MATCH\n" +
373 		"src/type/def/Types.java type.def.ITest1 [@!|Bug|!@128] EXACT_MATCH\n" +
374 		"src/type/def/Types.java type.def.ETest [@!|Bug|!@195] EXACT_MATCH\n" +
375 		"src/type/def/Types.java type.def.ATest [@!|Bug|!@221] EXACT_MATCH\n" +
376 		"src/type/ref/TestTypes.java type.ref.TestTypes [@!|Bug|!(num=155013)@64] EXACT_MATCH\n" +
377 		"src/type/ref/TestTypes.java type.ref.TestTypes.field [	@!|Bug|!(comment=\"field\")@121] EXACT_MATCH\n" +
378 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	@!|Bug|!(comment=\"method\", num=155013)@158] EXACT_MATCH"
379 	);
380 }
testTypeRef_Cast()381 public void testTypeRef_Cast() throws CoreException {
382 	search(setUpTypeRef(0), CAST_TYPE_REFERENCE);
383 	assertSearchResults(
384 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		Types local = (!|Types|!) obj;@279] EXACT_MATCH"
385 	);
386 }
testTypeRef_Catch()387 public void testTypeRef_Catch() throws CoreException {
388 	search(setUpTypeRef(0), CATCH_TYPE_REFERENCE);
389 	assertSearchResults(
390 		"src/type/ref/TestTypes.java Bug type.ref.TestTypes.bar(Bug) [		} catch (!|Types|! ex) {@366] EXACT_MATCH"
391 	);
392 }
testTypeRef_Field()393 public void testTypeRef_Field() throws CoreException {
394 	search(setUpTypeRef(0), FIELD_DECLARATION_TYPE_REFERENCE);
395 	assertSearchResults(
396 		"src/type/ref/TestTypes.java type.ref.TestTypes.field [	!|Types|! field;@143] EXACT_MATCH"
397 	);
398 }
testTypeRef_Import()399 public void testTypeRef_Import() throws CoreException {
400 	search(setUpTypeRef(0), IMPORT_DECLARATION_TYPE_REFERENCE);
401 	assertSearchResults(
402 		"src/type/ref/TestTypes.java [import !|type.def.Types|!;@25] EXACT_MATCH"
403 	);
404 }
testTypeRef_MethodParameter()405 public void testTypeRef_MethodParameter() throws CoreException {
406 	search(setUpTypeRef(0), PARAMETER_DECLARATION_TYPE_REFERENCE);
407 	assertSearchResults(
408 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(!|Types|! param) throws Types {@206] EXACT_MATCH"
409 	);
410 }
testTypeRef_Return()411 public void testTypeRef_Return() throws CoreException {
412 	search(setUpTypeRef(0), RETURN_TYPE_REFERENCE);
413 	assertSearchResults(
414 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	!|Types|! method(Types param) throws Types {@193] EXACT_MATCH"
415 	);
416 }
testTypeRef_Superinterface()417 public void testTypeRef_Superinterface() throws CoreException {
418 	IType type = setUpTypeRef(0);
419 	search(((ICompilationUnit) type.getParent()).getType("ITest1"), SUPERTYPE_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
420 	assertSearchResults(
421 		"src/type/def/Types.java type.def.Types [public class Types extends Exception implements !|ITest1|!, ITest2 {@78] EXACT_MATCH\n" +
422 		"src/type/def/Types.java type.def.ITest2 [interface ITest2 extends !|ITest1|! {}@184] EXACT_MATCH"
423 	);
424 }
testTypeRef_Supertype()425 public void testTypeRef_Supertype() throws CoreException {
426 	search(setUpTypeRef(0), SUPERTYPE_TYPE_REFERENCE);
427 	assertSearchResults(
428 		"src/type/ref/TestTypes.java type.ref.TestTypes [public class TestTypes extends !|Types|! {@111] EXACT_MATCH"
429 	);
430 }
testTypeRef_Throws()431 public void testTypeRef_Throws() throws CoreException {
432 	search(setUpTypeRef(0), THROWS_CLAUSE_TYPE_REFERENCE);
433 	assertSearchResults(
434 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [	Types method(Types param) throws !|Types|! {@226] EXACT_MATCH"
435 	);
436 }
testTypeRef_Variable()437 public void testTypeRef_Variable() throws CoreException {
438 	search(setUpTypeRef(0), LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE);
439 	assertSearchResults(
440 		"src/type/ref/TestTypes.java Types type.ref.TestTypes.method(Types) [		!|Types|! local = (Types) obj;@264] EXACT_MATCH"
441 	);
442 }
443 
444 /**
445  * @bug 221130: [search] No fine-grain search for instanceof criteria
446  * @test Verify that type references are only reported in instanceof pattern when
447  * 	corresponding fine grain flag is set.
448  * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=221130"
449  */
testTypeRef_InstanceOf()450 public void testTypeRef_InstanceOf() throws CoreException {
451 	this.workingCopies = new ICompilationUnit[1];
452 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/Test.java",
453 		"public class Test {\n" +
454 		"	Object field;\n" +
455 		"	void foo(Object param) {\n" +
456 		"		if (field instanceof java.lang.String) {\n" +
457 		"		}\n" +
458 		"		if (param instanceof Test) {\n" +
459 		"		}\n" +
460 		"	}\n" +
461 		"}\n"
462 	);
463 	search("*", TYPE, INSTANCEOF_TYPE_REFERENCE);
464 	assertSearchResults(
465 		"src/Test.java void Test.foo(Object) [		if (field instanceof !|java.lang.String|!) {@84] EXACT_MATCH\n" +
466 		"src/Test.java void Test.foo(Object) [		if (param instanceof !|Test|!) {@131] EXACT_MATCH"
467 	);
468 }
testTypeRef_InstanceOfWithParenthesis()469 public void testTypeRef_InstanceOfWithParenthesis() throws CoreException {
470 	this.workingCopies = new ICompilationUnit[1];
471 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/Test.java",
472 		"public class Test {\n" +
473 		"	Object field;\n" +
474 		"	void foo(Object param) {\n" +
475 		"		if ((field instanceof Test)) {\n" +
476 		"		}\n" +
477 		"		if ((param instanceof java.lang.Throwable)) {\n" +
478 		"		}\n" +
479 		"	}\n" +
480 		"}\n"
481 	);
482 	search("*", TYPE, INSTANCEOF_TYPE_REFERENCE);
483 	assertSearchResults(
484 		"src/Test.java void Test.foo(Object) [		if ((field instanceof !|Test|!)) {@85] EXACT_MATCH\n" +
485 		"src/Test.java void Test.foo(Object) [		if ((param instanceof !|java.lang.Throwable|!)) {@122] EXACT_MATCH"
486 	);
487 }
488 
489 /*
490  * References to a all types (using '*' string pattern)
491  */
setUpTypeRefAll()492 private void setUpTypeRefAll() throws JavaModelException {
493 	final ProblemRequestor problemRequestor = new ProblemRequestor();
494 	this.wcOwner = new WorkingCopyOwner() {
495 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
496 			return problemRequestor;
497 		}
498 	};
499 	this.workingCopies = new ICompilationUnit[3];
500 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/type/def/Types.java",
501 		"package type.def;\n" +
502 		"@Bug\n" +
503 		"@ATest\n" +
504 		"public class Types extends Exception implements ITest1, ITest2 {\n" +
505 		"	ITest1 test1;\n" +
506 		"	ITest2 test2;\n" +
507 		"}\n" +
508 		"@Bug\n" +
509 		"interface ITest1 {}\n" +
510 		"@ATest\n" +
511 		"interface ITest2 extends ITest1 {}\n" +
512 		"@Bug\n" +
513 		"@ATest\n" +
514 		"enum ETest {}\n" +
515 		"@Bug\n" +
516 		"@interface ATest {}\n"
517 	);
518 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/type/def/Bug.java",
519 		"package type.def;\n" +
520 		"public @interface Bug {\n" +
521 		"	int num() default 0;\n" +
522 		"	String comment() default \"\";\n" +
523 		"}\n"
524 	);
525 	this.workingCopies[2] = getWorkingCopy("/JavaSearch15/src/all/types/ref/TestTypes.java",
526 		"package all.types.ref;\n" +
527 		"\n" +
528 		"import type.def.Bug;\n" +
529 		"import type.def.Types;\n" +
530 		"\n" +
531 		"@Bug(num=155013)\n" +
532 		"public class TestTypes extends Types {\n" +
533 		"	@Bug(comment=\"field\")\n" +
534 		"	Types field = new Types(), local, other = new Types();\n" +
535 		"	{\n" +
536 		"		Object o;\n" +
537 		"		Types t;\n" +
538 		"		if (this.field == null) {\n" +
539 		"			try {\n" +
540 		"				t = new TestTypes();\n" +
541 		"			} catch (RuntimeException e) {\n" +
542 		"				t = new Types();\n" +
543 		"			} \n" +
544 		"		} else {\n" +
545 		"			o = this.field;\n" +
546 		"			t = (Types) o;\n" +
547 		"		}\n" +
548 		"		local = t;\n" +
549 		"	};\n" +
550 		"	@Bug(comment=\"method\", num=155013)\n" +
551 		"	Types method(Types param) throws Types {\n" +
552 		"		Object obj = new Types();\n" +
553 		"		Types local = (Types) obj;\n" +
554 		"		return local;\n" +
555 		"	}\n" +
556 		"	Bug bar(Bug bug) {\n" +
557 		"		try {\n" +
558 		"			method(this);\n" +
559 		"		}\n" +
560 		"		catch (Types ex) {}\n" +
561 		"		catch (Exception ex) {}\n" +
562 		"		return bug; \n" +
563 		"	}\n" +
564 		"	// Other types references\n" +
565 		"	Object object;\n" +
566 		"	String str;\n" +
567 		"	TestTypes() throws Types, RuntimeException {\n" +
568 		"		if (this.object instanceof String) {\n" +
569 		"			this.str = (String) this.object;\n" +
570 		"		} else {\n" +
571 		"			this.str = new String();\n" +
572 		"			this.object = new Object();\n" +
573 		"		}\n" +
574 		"	}\n" +
575 		"}\n"
576 	);
577 	assertEquals("CU Should not have any problem!",
578 		"----------\n" +
579 		"----------\n",
580 		problemRequestor.problems.toString()
581 	);
582 	this.resultCollector.showSelection();
583 	this.resultCollector.showOffset();
584 }
testTypeRefAll_Allocation()585 public void testTypeRefAll_Allocation() throws CoreException {
586 	setUpTypeRefAll();
587 	search("*", TYPE, CLASS_INSTANCE_CREATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
588 	assertSearchResults(
589 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	Types field = new !|Types|!(), local, other = new Types();@167] EXACT_MATCH\n" +
590 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.other [	Types field = new Types(), local, other = new !|Types|!();@195] EXACT_MATCH\n" +
591 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [				t = new !|TestTypes|!();@279] EXACT_MATCH\n" +
592 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [				t = new !|Types|!();@338] EXACT_MATCH\n" +
593 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [		Object obj = new !|Types|!();@519] EXACT_MATCH\n" +
594 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.str = new !|String|!();@897] EXACT_MATCH\n" +
595 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.object = new !|Object|!();@928] EXACT_MATCH"
596 	);
597 }
testTypeRefAll_Annotation()598 public void testTypeRefAll_Annotation() throws CoreException {
599 	setUpTypeRefAll();
600 	search("*", TYPE, ANNOTATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
601 	assertSearchResults(
602 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes [@!|Bug|!(num=155013)@70] EXACT_MATCH\n" +
603 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	@!|Bug|!(comment=\"field\")@127] EXACT_MATCH\n" +
604 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [	@!|Bug|!(comment=\"method\", num=155013)@424] EXACT_MATCH\n" +
605 		"src/type/def/Types.java type.def.Types [@!|Bug|!@19] EXACT_MATCH\n" +
606 		"src/type/def/Types.java type.def.Types [@!|ATest|!@24] EXACT_MATCH\n" +
607 		"src/type/def/Types.java type.def.ITest1 [@!|Bug|!@128] EXACT_MATCH\n" +
608 		"src/type/def/Types.java type.def.ITest2 [@!|ATest|!@153] EXACT_MATCH\n" +
609 		"src/type/def/Types.java type.def.ETest [@!|Bug|!@195] EXACT_MATCH\n" +
610 		"src/type/def/Types.java type.def.ETest [@!|ATest|!@200] EXACT_MATCH\n" +
611 		"src/type/def/Types.java type.def.ATest [@!|Bug|!@221] EXACT_MATCH"
612 	);
613 }
testTypeRefAll_Cast()614 public void testTypeRefAll_Cast() throws CoreException {
615 	setUpTypeRefAll();
616 	search("*", TYPE, CAST_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
617 	assertSearchResults(
618 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [			t = (!|Types|!) o;@391] EXACT_MATCH\n" +
619 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [		Types local = (!|Types|!) obj;@545] EXACT_MATCH\n" +
620 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.str = (!|String|!) this.object;@847] EXACT_MATCH"
621 	);
622 }
testTypeRefAll_Catch()623 public void testTypeRefAll_Catch() throws CoreException {
624 	setUpTypeRefAll();
625 	search("*", TYPE, CATCH_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
626 	assertSearchResults(
627 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [			} catch (!|RuntimeException|! e) {@304] EXACT_MATCH\n" +
628 		"src/all/types/ref/TestTypes.java Bug all.types.ref.TestTypes.bar(Bug) [		catch (!|Types|! ex) {}@634] EXACT_MATCH\n" +
629 		"src/all/types/ref/TestTypes.java Bug all.types.ref.TestTypes.bar(Bug) [		catch (!|Exception|! ex) {}@656] EXACT_MATCH"
630 	);
631 }
testTypeRefAll_Field()632 public void testTypeRefAll_Field() throws CoreException {
633 	setUpTypeRefAll();
634 	search("*", TYPE, FIELD_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
635 	assertSearchResults(
636 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	!|Types|! field = new Types(), local, other = new Types();@149] EXACT_MATCH\n" +
637 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.object [	!|Object|! object;@719] EXACT_MATCH\n" +
638 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.str [	!|String|! str;@735] EXACT_MATCH\n" +
639 		"src/type/def/Types.java type.def.Types.test1 [	!|ITest1|! test1;@96] EXACT_MATCH\n" +
640 		"src/type/def/Types.java type.def.Types.test2 [	!|ITest2|! test2;@111] EXACT_MATCH"
641 	);
642 }
testTypeRefAll_Import()643 public void testTypeRefAll_Import() throws CoreException {
644 	setUpTypeRefAll();
645 	search("*", TYPE, IMPORT_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
646 	assertSearchResults(
647 		"src/all/types/ref/TestTypes.java [import !|type.def.Bug|!;@31] EXACT_MATCH\n" +
648 		"src/all/types/ref/TestTypes.java [import !|type.def.Types|!;@52] EXACT_MATCH"
649 	);
650 }
testTypeRefAll_MethodParameter()651 public void testTypeRefAll_MethodParameter() throws CoreException {
652 	setUpTypeRefAll();
653 	search("*", TYPE, PARAMETER_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
654 	assertSearchResults(
655 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [	Types method(!|Types|! param) throws Types {@472] EXACT_MATCH\n" +
656 		"src/all/types/ref/TestTypes.java Bug all.types.ref.TestTypes.bar(Bug) [	Bug bar(!|Bug|! bug) {@585] EXACT_MATCH"
657 	);
658 }
testTypeRefAll_Return()659 public void testTypeRefAll_Return() throws CoreException {
660 	setUpTypeRefAll();
661 	search("*", TYPE, RETURN_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
662 	assertSearchResults(
663 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [	!|Types|! method(Types param) throws Types {@459] EXACT_MATCH\n" +
664 		"src/all/types/ref/TestTypes.java Bug all.types.ref.TestTypes.bar(Bug) [	!|Bug|! bar(Bug bug) {@577] EXACT_MATCH\n" +
665 		"src/type/def/Bug.java int type.def.Bug.num() [	!|int|! num() default 0;@43] EXACT_MATCH\n" +
666 		"src/type/def/Bug.java String type.def.Bug.comment() [	!|String|! comment() default \"\";@65] EXACT_MATCH"
667 	);
668 }
testTypeRefAll_Supertype()669 public void testTypeRefAll_Supertype() throws CoreException {
670 	setUpTypeRefAll();
671 	search("*", TYPE, SUPERTYPE_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
672 	assertSearchResults(
673 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes [public class TestTypes extends !|Types|! {@117] EXACT_MATCH\n" +
674 		"src/type/def/Types.java type.def.Types [public class Types extends !|Exception|! implements ITest1, ITest2 {@57] EXACT_MATCH\n" +
675 		"src/type/def/Types.java type.def.Types [public class Types extends Exception implements !|ITest1|!, ITest2 {@78] EXACT_MATCH\n" +
676 		"src/type/def/Types.java type.def.Types [public class Types extends Exception implements ITest1, !|ITest2|! {@86] EXACT_MATCH\n" +
677 		"src/type/def/Types.java type.def.ITest2 [interface ITest2 extends !|ITest1|! {}@184] EXACT_MATCH"
678 	);
679 }
testTypeRefAll_Throws()680 public void testTypeRefAll_Throws() throws CoreException {
681 	setUpTypeRefAll();
682 	search("*", TYPE, THROWS_CLAUSE_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
683 	assertSearchResults(
684 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [	Types method(Types param) throws !|Types|! {@492] EXACT_MATCH\n" +
685 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [	TestTypes() throws !|Types|!, RuntimeException {@767] EXACT_MATCH\n" +
686 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [	TestTypes() throws Types, !|RuntimeException|! {@774] EXACT_MATCH"
687 	);
688 }
testTypeRefAll_Variable()689 public void testTypeRefAll_Variable() throws CoreException {
690 	setUpTypeRefAll();
691 	search("*", TYPE, LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
692 	assertSearchResults(
693 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [		!|Object|! o;@209] EXACT_MATCH\n" +
694 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [		!|Types|! t;@221] EXACT_MATCH\n" +
695 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [		!|Object|! obj = new Types();@502] EXACT_MATCH\n" +
696 		"src/all/types/ref/TestTypes.java Types all.types.ref.TestTypes.method(Types) [		!|Types|! local = (Types) obj;@530] EXACT_MATCH"
697 	);
698 }
699 
700 private final static int ALL_GENERIC_TYPE_FINE_GRAIN_FLAGS =
701 	TYPE_VARIABLE_BOUND_TYPE_REFERENCE |
702 	TYPE_ARGUMENT_TYPE_REFERENCE |
703 	WILDCARD_BOUND_TYPE_REFERENCE;
704 
705 /*
706  * References to a specific generic IType and all types.
707  */
setUpTypeRefGeneric01()708 private IType setUpTypeRefGeneric01() throws JavaModelException {
709 	final ProblemRequestor problemRequestor = new ProblemRequestor();
710 	this.wcOwner = new WorkingCopyOwner() {
711 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
712 			return problemRequestor;
713 		}
714 	};
715 	this.workingCopies = new ICompilationUnit[3];
716 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/type/def/Types.java",
717 		"package type.def;\n" +
718 		"public class Types {}\n"
719 	);
720 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/test01/Generic.java",
721 		"package test01;\n" +
722 		"import java.io.Serializable;\n" +
723 		"import type.def.Types;\n" +
724 		"public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {\n" +
725 		"	Generic<? extends Types, ?, ?> field;\n" +
726 		"	Comparable<String> comp;\n" +
727 		"	Class<? extends Exception> clazz;\n" +
728 		"}\n" +
729 		"class A<R> {}\n"
730 	);
731 	this.workingCopies[2] = getWorkingCopy("/JavaSearch15/src/test01/TestGeneric.java",
732 		"package test01;\n" +
733 		"import java.io.Serializable;\n" +
734 		"import type.def.Types;\n" +
735 		"public class TestGeneric<T> extends Generic<Types, UClass, VClass> {\n" +
736 		"	TestGeneric<Types> test;\n" +
737 		"	TestGeneric<String> foo(TestGeneric<Types> param1, Comparable<String> param2) {\n" +
738 		"		return  null;\n" +
739 		"	}\n" +
740 		"	Comparable<TestGeneric<Types>> bar() {\n" +
741 		"		return null;\n" +
742 		"	} \n" +
743 		"}\n" +
744 		"class UClass extends Types implements Comparable<Types>, Serializable {\n" +
745 		"	private static final long serialVersionUID = 1L;\n" +
746 		"	public int compareTo(Types o) {\n" +
747 		"		return 0;\n" +
748 		"	}\n" +
749 		"}\n" +
750 		"class VClass extends A<Types> {}\n"
751 	);
752 	assertEquals("CU Should not have any problem!",
753 		"----------\n" +
754 		"----------\n",
755 		problemRequestor.problems.toString()
756 	);
757 	this.resultCollector.showSelection();
758 	this.resultCollector.showOffset();
759 	return this.workingCopies[0].getType("Types");
760 }
testTypeRefGeneric01()761 public void testTypeRefGeneric01() throws CoreException {
762 	search(setUpTypeRefGeneric01(), REFERENCES);
763 	assertSearchResults(
764 		"src/test01/Generic.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
765 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
766 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH\n" +
767 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
768 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
769 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH\n" +
770 		"src/test01/TestGeneric.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
771 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
772 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
773 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
774 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
775 		"src/test01/TestGeneric.java test01.UClass [class UClass extends !|Types|! implements Comparable<Types>, Serializable {@345] EXACT_MATCH\n" +
776 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
777 		"src/test01/TestGeneric.java int test01.UClass.compareTo(Types) [	public int compareTo(!|Types|! o) {@468] EXACT_MATCH\n" +
778 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
779 	);
780 }
testTypeRefGeneric01_AllFlags()781 public void testTypeRefGeneric01_AllFlags() throws CoreException {
782 	search(setUpTypeRefGeneric01(), ALL_TYPE_FINE_GRAIN_FLAGS);
783 	assertSearchResults(
784 		"src/test01/Generic.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
785 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
786 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH\n" +
787 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
788 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
789 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH\n" +
790 		"src/test01/TestGeneric.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
791 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
792 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
793 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
794 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
795 		"src/test01/TestGeneric.java test01.UClass [class UClass extends !|Types|! implements Comparable<Types>, Serializable {@345] EXACT_MATCH\n" +
796 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
797 		"src/test01/TestGeneric.java int test01.UClass.compareTo(Types) [	public int compareTo(!|Types|! o) {@468] EXACT_MATCH\n" +
798 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
799 	);
800 }
testTypeRefGeneric01_TypeArgument()801 public void testTypeRefGeneric01_TypeArgument() throws CoreException {
802 	search(setUpTypeRefGeneric01(), TYPE_ARGUMENT_TYPE_REFERENCE);
803 	assertSearchResults(
804 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
805 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
806 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
807 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
808 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
809 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
810 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
811 	);
812 }
testTypeRefGeneric01_TypeVariableBound()813 public void testTypeRefGeneric01_TypeVariableBound() throws CoreException {
814 	search(setUpTypeRefGeneric01(), TYPE_VARIABLE_BOUND_TYPE_REFERENCE);
815 	assertSearchResults(
816 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
817 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH"
818 	);
819 }
testTypeRefGeneric01_WildcardBound()820 public void testTypeRefGeneric01_WildcardBound() throws CoreException {
821 	search(setUpTypeRefGeneric01(), WILDCARD_BOUND_TYPE_REFERENCE);
822 	assertSearchResults(
823 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
824 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH"
825 	);
826 }
testTypeRefGenericAll01()827 public void testTypeRefGenericAll01() throws CoreException {
828 	setUpTypeRefGeneric01();
829 	search("*", TYPE, REFERENCES, getJavaSearchWorkingCopiesScope());
830 	assertSearchResults(
831 		"src/test01/Generic.java [import !|java.io.Serializable|!;@23] EXACT_MATCH\n" +
832 		"src/test01/Generic.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
833 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
834 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH\n" +
835 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & !|Comparable|!<Types> & Serializable, V extends A<? super Types>> {@124] EXACT_MATCH\n" +
836 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
837 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & !|Serializable|!, V extends A<? super Types>> {@144] EXACT_MATCH\n" +
838 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends !|A|!<? super Types>> {@168] EXACT_MATCH\n" +
839 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
840 		"src/test01/Generic.java test01.Generic.field [	!|Generic|!<? extends Types, ?, ?> field;@189] EXACT_MATCH\n" +
841 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH\n" +
842 		"src/test01/Generic.java test01.Generic.comp [	!|Comparable|!<String> comp;@228] EXACT_MATCH\n" +
843 		"src/test01/Generic.java test01.Generic.comp [	Comparable<!|String|!> comp;@239] EXACT_MATCH\n" +
844 		"src/test01/Generic.java test01.Generic.clazz [	!|Class|!<? extends Exception> clazz;@254] EXACT_MATCH\n" +
845 		"src/test01/Generic.java test01.Generic.clazz [	Class<? extends !|Exception|!> clazz;@270] EXACT_MATCH\n" +
846 		"src/test01/TestGeneric.java [import !|java.io.Serializable|!;@23] EXACT_MATCH\n" +
847 		"src/test01/TestGeneric.java [import !|type.def.Types|!;@52] EXACT_MATCH\n" +
848 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends !|Generic|!<Types, UClass, VClass> {@104] EXACT_MATCH\n" +
849 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
850 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, !|UClass|!, VClass> {@119] EXACT_MATCH\n" +
851 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, UClass, !|VClass|!> {@127] EXACT_MATCH\n" +
852 		"src/test01/TestGeneric.java test01.TestGeneric.test [	!|TestGeneric|!<Types> test;@138] EXACT_MATCH\n" +
853 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
854 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	!|TestGeneric|!<String> foo(TestGeneric<Types> param1, Comparable<String> param2) {@164] EXACT_MATCH\n" +
855 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<!|String|!> foo(TestGeneric<Types> param1, Comparable<String> param2) {@176] EXACT_MATCH\n" +
856 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(!|TestGeneric|!<Types> param1, Comparable<String> param2) {@188] EXACT_MATCH\n" +
857 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
858 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<Types> param1, !|Comparable|!<String> param2) {@215] EXACT_MATCH\n" +
859 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<Types> param1, Comparable<!|String|!> param2) {@226] EXACT_MATCH\n" +
860 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	!|Comparable|!<TestGeneric<Types>> bar() {@264] EXACT_MATCH\n" +
861 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<!|TestGeneric|!<Types>> bar() {@275] EXACT_MATCH\n" +
862 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
863 		"src/test01/TestGeneric.java test01.UClass [class UClass extends !|Types|! implements Comparable<Types>, Serializable {@345] EXACT_MATCH\n" +
864 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements !|Comparable|!<Types>, Serializable {@362] EXACT_MATCH\n" +
865 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
866 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<Types>, !|Serializable|! {@381] EXACT_MATCH\n" +
867 		"src/test01/TestGeneric.java test01.UClass.serialVersionUID [	private static final !|long|! serialVersionUID = 1L;@418] EXACT_MATCH\n" +
868 		"src/test01/TestGeneric.java int test01.UClass.compareTo(Types) [	public !|int|! compareTo(Types o) {@454] EXACT_MATCH\n" +
869 		"src/test01/TestGeneric.java int test01.UClass.compareTo(Types) [	public int compareTo(!|Types|! o) {@468] EXACT_MATCH\n" +
870 		"src/test01/TestGeneric.java test01.VClass [class VClass extends !|A|!<Types> {}@517] EXACT_MATCH\n" +
871 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
872 	);
873 }
testTypeRefGenericAll01_AllGenericFlags()874 public void testTypeRefGenericAll01_AllGenericFlags() throws CoreException {
875 	setUpTypeRefGeneric01();
876 	search("*", TYPE, ALL_GENERIC_TYPE_FINE_GRAIN_FLAGS, getJavaSearchWorkingCopiesScope());
877 	assertSearchResults(
878 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
879 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH\n" +
880 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & !|Comparable|!<Types> & Serializable, V extends A<? super Types>> {@124] EXACT_MATCH\n" +
881 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
882 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & !|Serializable|!, V extends A<? super Types>> {@144] EXACT_MATCH\n" +
883 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends !|A|!<? super Types>> {@168] EXACT_MATCH\n" +
884 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
885 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH\n" +
886 		"src/test01/Generic.java test01.Generic.comp [	Comparable<!|String|!> comp;@239] EXACT_MATCH\n" +
887 		"src/test01/Generic.java test01.Generic.clazz [	Class<? extends !|Exception|!> clazz;@270] EXACT_MATCH\n" +
888 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
889 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, !|UClass|!, VClass> {@119] EXACT_MATCH\n" +
890 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, UClass, !|VClass|!> {@127] EXACT_MATCH\n" +
891 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
892 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<!|String|!> foo(TestGeneric<Types> param1, Comparable<String> param2) {@176] EXACT_MATCH\n" +
893 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
894 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<Types> param1, Comparable<!|String|!> param2) {@226] EXACT_MATCH\n" +
895 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<!|TestGeneric|!<Types>> bar() {@275] EXACT_MATCH\n" +
896 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
897 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
898 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
899 	);
900 }
testTypeRefGenericAll01_TypeArgument()901 public void testTypeRefGenericAll01_TypeArgument() throws CoreException {
902 	setUpTypeRefGeneric01();
903 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
904 	assertSearchResults(
905 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<!|Types|!> & Serializable, V extends A<? super Types>> {@135] EXACT_MATCH\n" +
906 		"src/test01/Generic.java test01.Generic.comp [	Comparable<!|String|!> comp;@239] EXACT_MATCH\n" +
907 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<!|Types|!, UClass, VClass> {@112] EXACT_MATCH\n" +
908 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, !|UClass|!, VClass> {@119] EXACT_MATCH\n" +
909 		"src/test01/TestGeneric.java test01.TestGeneric [public class TestGeneric<T> extends Generic<Types, UClass, !|VClass|!> {@127] EXACT_MATCH\n" +
910 		"src/test01/TestGeneric.java test01.TestGeneric.test [	TestGeneric<!|Types|!> test;@150] EXACT_MATCH\n" +
911 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<!|String|!> foo(TestGeneric<Types> param1, Comparable<String> param2) {@176] EXACT_MATCH\n" +
912 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<!|Types|!> param1, Comparable<String> param2) {@200] EXACT_MATCH\n" +
913 		"src/test01/TestGeneric.java TestGeneric<String> test01.TestGeneric.foo(TestGeneric<Types>, Comparable<String>) [	TestGeneric<String> foo(TestGeneric<Types> param1, Comparable<!|String|!> param2) {@226] EXACT_MATCH\n" +
914 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<!|TestGeneric|!<Types>> bar() {@275] EXACT_MATCH\n" +
915 		"src/test01/TestGeneric.java Comparable<TestGeneric<Types>> test01.TestGeneric.bar() [	Comparable<TestGeneric<!|Types|!>> bar() {@287] EXACT_MATCH\n" +
916 		"src/test01/TestGeneric.java test01.UClass [class UClass extends Types implements Comparable<!|Types|!>, Serializable {@373] EXACT_MATCH\n" +
917 		"src/test01/TestGeneric.java test01.VClass [class VClass extends A<!|Types|!> {}@519] EXACT_MATCH"
918 	);
919 }
testTypeRefGenericAll01_TypeVariableBound()920 public void testTypeRefGenericAll01_TypeVariableBound() throws CoreException {
921 	setUpTypeRefGeneric01();
922 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
923 	assertSearchResults(
924 		"src/test01/Generic.java test01.Generic [public class Generic<T extends !|Types|!, U extends Types & Comparable<Types> & Serializable, V extends A<? super Types>> {@99] EXACT_MATCH\n" +
925 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends !|Types|! & Comparable<Types> & Serializable, V extends A<? super Types>> {@116] EXACT_MATCH\n" +
926 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & !|Comparable|!<Types> & Serializable, V extends A<? super Types>> {@124] EXACT_MATCH\n" +
927 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & !|Serializable|!, V extends A<? super Types>> {@144] EXACT_MATCH\n" +
928 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends !|A|!<? super Types>> {@168] EXACT_MATCH"
929 	);
930 }
testTypeRefGenericAll01_WildcardBound()931 public void testTypeRefGenericAll01_WildcardBound() throws CoreException {
932 	setUpTypeRefGeneric01();
933 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
934 	assertSearchResults(
935 		"src/test01/Generic.java test01.Generic [public class Generic<T extends Types, U extends Types & Comparable<Types> & Serializable, V extends A<? super !|Types|!>> {@178] EXACT_MATCH\n" +
936 		"src/test01/Generic.java test01.Generic.field [	Generic<? extends !|Types|!, ?, ?> field;@207] EXACT_MATCH\n" +
937 		"src/test01/Generic.java test01.Generic.clazz [	Class<? extends !|Exception|!> clazz;@270] EXACT_MATCH"
938 	);
939 }
940 /*
941  * Same test than previous ones with another example
942  */
setUpTypeRefGeneric02()943 private IType setUpTypeRefGeneric02() throws JavaModelException {
944 	final ProblemRequestor problemRequestor = new ProblemRequestor();
945 	this.wcOwner = new WorkingCopyOwner() {
946 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
947 			return problemRequestor;
948 		}
949 	};
950 	this.workingCopies = new ICompilationUnit[1];
951 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test02/Test.java",
952 		"package test02;\n" +
953 		"public class Test <T, U, V> {\n" +
954 		"	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, X<String>> () {\n" +
955 		"		X<String> x;\n" +
956 		"		Test<A, B, C> t;\n" +
957 		"		Test<X<Y<Z<String>>>, Y<Z<String>>, Z<String>> bar() {\n" +
958 		"			return new Test<X<Y<Z<String>>>, Y<Z<String>>, Z<String>>();\n" +
959 		"		}\n" +
960 		"	};\n" +
961 		"	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super B, C> param) {\n" +
962 		"		return null;\n" +
963 		"	};\n" +
964 		"}\n" +
965 		"class A {}\n" +
966 		"class B {}\n" +
967 		"class C extends X<String> {}\n" +
968 		"class X<R> {}\n" +
969 		"class Y<S> extends A {}\n" +
970 		"class Z<P> extends B {}\n" +
971 		"\n"
972 	);
973 	assertEquals("CU Should not have any problem!",
974 		"----------\n" +
975 		"----------\n",
976 		problemRequestor.problems.toString()
977 	);
978 	this.resultCollector.showSelection();
979 	this.resultCollector.showOffset();
980 	return this.workingCopies[0].getType("Types");
981 }
testTypeRefGenericAll02()982 public void testTypeRefGenericAll02() throws CoreException {
983 	setUpTypeRefGeneric02();
984 	search("*", TYPE, REFERENCES, getJavaSearchWorkingCopiesScope());
985 	assertSearchResults(
986 		"src/test02/Test.java test02.Test.field:<anonymous>#1 [	Test<A, ? extends B, ? super C> field = new !|Test|!<A, Z<String>, X<String>> () {@91] EXACT_MATCH\n" +
987 		"src/test02/Test.java test02.Test.field:<anonymous>#1.x [		!|X|!<String> x;@128] EXACT_MATCH\n" +
988 		"src/test02/Test.java test02.Test.field:<anonymous>#1.x [		X<!|String|!> x;@130] EXACT_MATCH\n" +
989 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		!|Test|!<A, B, C> t;@143] EXACT_MATCH\n" +
990 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<!|A|!, B, C> t;@148] EXACT_MATCH\n" +
991 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, !|B|!, C> t;@151] EXACT_MATCH\n" +
992 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, B, !|C|!> t;@154] EXACT_MATCH\n" +
993 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		!|Test|!<X<Y<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@162] EXACT_MATCH\n" +
994 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@167] EXACT_MATCH\n" +
995 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@169] EXACT_MATCH\n" +
996 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>> bar() {@171] EXACT_MATCH\n" +
997 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>> bar() {@173] EXACT_MATCH\n" +
998 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>> bar() {@184] EXACT_MATCH\n" +
999 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>> bar() {@186] EXACT_MATCH\n" +
1000 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>> bar() {@188] EXACT_MATCH\n" +
1001 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>> bar() {@198] EXACT_MATCH\n" +
1002 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>> bar() {@200] EXACT_MATCH\n" +
1003 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new !|Test|!<X<Y<Z<String>>>, Y<Z<String>>, Z<String>>();@231] EXACT_MATCH\n" +
1004 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>>();@236] EXACT_MATCH\n" +
1005 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>>();@238] EXACT_MATCH\n" +
1006 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>>();@240] EXACT_MATCH\n" +
1007 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>>();@242] EXACT_MATCH\n" +
1008 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>>();@253] EXACT_MATCH\n" +
1009 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>>();@255] EXACT_MATCH\n" +
1010 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>>();@257] EXACT_MATCH\n" +
1011 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>>();@267] EXACT_MATCH\n" +
1012 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>>();@269] EXACT_MATCH\n" +
1013 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<!|A|!, Z<String>, X<String>> () {@96] EXACT_MATCH\n" +
1014 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, !|Z|!<String>, X<String>> () {@99] EXACT_MATCH\n" +
1015 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<!|String|!>, X<String>> () {@101] EXACT_MATCH\n" +
1016 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, !|X|!<String>> () {@110] EXACT_MATCH\n" +
1017 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, X<!|String|!>> () {@112] EXACT_MATCH\n" +
1018 		"src/test02/Test.java test02.Test.field [	!|Test|!<A, ? extends B, ? super C> field = new Test<A, Z<String>, X<String>> () {@47] EXACT_MATCH\n" +
1019 		"src/test02/Test.java test02.Test.field [	Test<!|A|!, ? extends B, ? super C> field = new Test<A, Z<String>, X<String>> () {@52] EXACT_MATCH\n" +
1020 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends !|B|!, ? super C> field = new Test<A, Z<String>, X<String>> () {@65] EXACT_MATCH\n" +
1021 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super !|C|!> field = new Test<A, Z<String>, X<String>> () {@76] EXACT_MATCH\n" +
1022 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	!|Test|!<? super A, B, ? extends C> foo(Test<? extends A, ? super B, C> param) {@290] EXACT_MATCH\n" +
1023 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super !|A|!, B, ? extends C> foo(Test<? extends A, ? super B, C> param) {@303] EXACT_MATCH\n" +
1024 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, !|B|!, ? extends C> foo(Test<? extends A, ? super B, C> param) {@306] EXACT_MATCH\n" +
1025 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends !|C|!> foo(Test<? extends A, ? super B, C> param) {@319] EXACT_MATCH\n" +
1026 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(!|Test|!<? extends A, ? super B, C> param) {@326] EXACT_MATCH\n" +
1027 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends !|A|!, ? super B, C> param) {@341] EXACT_MATCH\n" +
1028 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super !|B|!, C> param) {@352] EXACT_MATCH\n" +
1029 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super B, !|C|!> param) {@355] EXACT_MATCH\n" +
1030 		"src/test02/Test.java test02.C [class C extends !|X|!<String> {}@426] EXACT_MATCH\n" +
1031 		"src/test02/Test.java test02.C [class C extends X<!|String|!> {}@428] EXACT_MATCH\n" +
1032 		"src/test02/Test.java test02.Y [class Y<S> extends !|A|! {}@472] EXACT_MATCH\n" +
1033 		"src/test02/Test.java test02.Z [class Z<P> extends !|B|! {}@496] EXACT_MATCH"
1034 	);
1035 }
testTypeRefGenericAll02_AllGenericFlags()1036 public void testTypeRefGenericAll02_AllGenericFlags() throws CoreException {
1037 	setUpTypeRefGeneric02();
1038 	search("*", TYPE, ALL_GENERIC_TYPE_FINE_GRAIN_FLAGS, getJavaSearchWorkingCopiesScope());
1039 	assertSearchResults(
1040 		"src/test02/Test.java test02.Test.field:<anonymous>#1.x [		X<!|String|!> x;@130] EXACT_MATCH\n" +
1041 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<!|A|!, B, C> t;@148] EXACT_MATCH\n" +
1042 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, !|B|!, C> t;@151] EXACT_MATCH\n" +
1043 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, B, !|C|!> t;@154] EXACT_MATCH\n" +
1044 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@167] EXACT_MATCH\n" +
1045 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@169] EXACT_MATCH\n" +
1046 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>> bar() {@171] EXACT_MATCH\n" +
1047 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>> bar() {@173] EXACT_MATCH\n" +
1048 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>> bar() {@184] EXACT_MATCH\n" +
1049 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>> bar() {@186] EXACT_MATCH\n" +
1050 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>> bar() {@188] EXACT_MATCH\n" +
1051 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>> bar() {@198] EXACT_MATCH\n" +
1052 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>> bar() {@200] EXACT_MATCH\n" +
1053 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>>();@236] EXACT_MATCH\n" +
1054 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>>();@238] EXACT_MATCH\n" +
1055 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>>();@240] EXACT_MATCH\n" +
1056 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>>();@242] EXACT_MATCH\n" +
1057 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>>();@253] EXACT_MATCH\n" +
1058 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>>();@255] EXACT_MATCH\n" +
1059 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>>();@257] EXACT_MATCH\n" +
1060 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>>();@267] EXACT_MATCH\n" +
1061 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>>();@269] EXACT_MATCH\n" +
1062 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<!|A|!, Z<String>, X<String>> () {@96] EXACT_MATCH\n" +
1063 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, !|Z|!<String>, X<String>> () {@99] EXACT_MATCH\n" +
1064 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<!|String|!>, X<String>> () {@101] EXACT_MATCH\n" +
1065 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, !|X|!<String>> () {@110] EXACT_MATCH\n" +
1066 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, X<!|String|!>> () {@112] EXACT_MATCH\n" +
1067 		"src/test02/Test.java test02.Test.field [	Test<!|A|!, ? extends B, ? super C> field = new Test<A, Z<String>, X<String>> () {@52] EXACT_MATCH\n" +
1068 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends !|B|!, ? super C> field = new Test<A, Z<String>, X<String>> () {@65] EXACT_MATCH\n" +
1069 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super !|C|!> field = new Test<A, Z<String>, X<String>> () {@76] EXACT_MATCH\n" +
1070 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super !|A|!, B, ? extends C> foo(Test<? extends A, ? super B, C> param) {@303] EXACT_MATCH\n" +
1071 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, !|B|!, ? extends C> foo(Test<? extends A, ? super B, C> param) {@306] EXACT_MATCH\n" +
1072 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends !|C|!> foo(Test<? extends A, ? super B, C> param) {@319] EXACT_MATCH\n" +
1073 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends !|A|!, ? super B, C> param) {@341] EXACT_MATCH\n" +
1074 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super !|B|!, C> param) {@352] EXACT_MATCH\n" +
1075 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super B, !|C|!> param) {@355] EXACT_MATCH\n" +
1076 		"src/test02/Test.java test02.C [class C extends X<!|String|!> {}@428] EXACT_MATCH"
1077 	);
1078 }
testTypeRefGenericAll02_TypeArgumentl()1079 public void testTypeRefGenericAll02_TypeArgumentl() throws CoreException {
1080 	setUpTypeRefGeneric02();
1081 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1082 	assertSearchResults(
1083 		"src/test02/Test.java test02.Test.field:<anonymous>#1.x [		X<!|String|!> x;@130] EXACT_MATCH\n" +
1084 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<!|A|!, B, C> t;@148] EXACT_MATCH\n" +
1085 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, !|B|!, C> t;@151] EXACT_MATCH\n" +
1086 		"src/test02/Test.java test02.Test.field:<anonymous>#1.t [		Test<A, B, !|C|!> t;@154] EXACT_MATCH\n" +
1087 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@167] EXACT_MATCH\n" +
1088 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>> bar() {@169] EXACT_MATCH\n" +
1089 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>> bar() {@171] EXACT_MATCH\n" +
1090 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>> bar() {@173] EXACT_MATCH\n" +
1091 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>> bar() {@184] EXACT_MATCH\n" +
1092 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>> bar() {@186] EXACT_MATCH\n" +
1093 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>> bar() {@188] EXACT_MATCH\n" +
1094 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>> bar() {@198] EXACT_MATCH\n" +
1095 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [		Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>> bar() {@200] EXACT_MATCH\n" +
1096 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<!|X|!<Y<Z<String>>>, Y<Z<String>>, Z<String>>();@236] EXACT_MATCH\n" +
1097 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<!|Y|!<Z<String>>>, Y<Z<String>>, Z<String>>();@238] EXACT_MATCH\n" +
1098 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<!|Z|!<String>>>, Y<Z<String>>, Z<String>>();@240] EXACT_MATCH\n" +
1099 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<!|String|!>>>, Y<Z<String>>, Z<String>>();@242] EXACT_MATCH\n" +
1100 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, !|Y|!<Z<String>>, Z<String>>();@253] EXACT_MATCH\n" +
1101 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<!|Z|!<String>>, Z<String>>();@255] EXACT_MATCH\n" +
1102 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<!|String|!>>, Z<String>>();@257] EXACT_MATCH\n" +
1103 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, !|Z|!<String>>();@267] EXACT_MATCH\n" +
1104 		"src/test02/Test.java Test<X<Y<Z<String>>>,Y<Z<String>>,Z<String>> test02.Test.field:<anonymous>#1.bar() [			return new Test<X<Y<Z<String>>>, Y<Z<String>>, Z<!|String|!>>();@269] EXACT_MATCH\n" +
1105 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<!|A|!, Z<String>, X<String>> () {@96] EXACT_MATCH\n" +
1106 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, !|Z|!<String>, X<String>> () {@99] EXACT_MATCH\n" +
1107 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<!|String|!>, X<String>> () {@101] EXACT_MATCH\n" +
1108 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, !|X|!<String>> () {@110] EXACT_MATCH\n" +
1109 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super C> field = new Test<A, Z<String>, X<!|String|!>> () {@112] EXACT_MATCH\n" +
1110 		"src/test02/Test.java test02.Test.field [	Test<!|A|!, ? extends B, ? super C> field = new Test<A, Z<String>, X<String>> () {@52] EXACT_MATCH\n" +
1111 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, !|B|!, ? extends C> foo(Test<? extends A, ? super B, C> param) {@306] EXACT_MATCH\n" +
1112 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super B, !|C|!> param) {@355] EXACT_MATCH\n" +
1113 		"src/test02/Test.java test02.C [class C extends X<!|String|!> {}@428] EXACT_MATCH"
1114 	);
1115 }
testTypeRefGenericAll02_TypeVariableBound()1116 public void testTypeRefGenericAll02_TypeVariableBound() throws CoreException {
1117 	setUpTypeRefGeneric02();
1118 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1119 	assertSearchResults("");
1120 }
testTypeRefGenericAll02_WildcardBound()1121 public void testTypeRefGenericAll02_WildcardBound() throws CoreException {
1122 	setUpTypeRefGeneric02();
1123 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1124 	assertSearchResults(
1125 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends !|B|!, ? super C> field = new Test<A, Z<String>, X<String>> () {@65] EXACT_MATCH\n" +
1126 		"src/test02/Test.java test02.Test.field [	Test<A, ? extends B, ? super !|C|!> field = new Test<A, Z<String>, X<String>> () {@76] EXACT_MATCH\n" +
1127 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super !|A|!, B, ? extends C> foo(Test<? extends A, ? super B, C> param) {@303] EXACT_MATCH\n" +
1128 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends !|C|!> foo(Test<? extends A, ? super B, C> param) {@319] EXACT_MATCH\n" +
1129 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends !|A|!, ? super B, C> param) {@341] EXACT_MATCH\n" +
1130 		"src/test02/Test.java Test<? super A,B,? extends C> test02.Test.foo(Test<? extends A,? super B,C>) [	Test<? super A, B, ? extends C> foo(Test<? extends A, ? super !|B|!, C> param) {@352] EXACT_MATCH"
1131 	);
1132 }
1133 
1134 /*
1135  * References to all qualified types (using '*' string pattern)
1136  */
setUpTypeRefGenericMethod()1137 private void setUpTypeRefGenericMethod() throws JavaModelException {
1138 	final ProblemRequestor problemRequestor = new ProblemRequestor();
1139 	this.wcOwner = new WorkingCopyOwner() {
1140 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
1141 			return problemRequestor;
1142 		}
1143 	};
1144 	this.workingCopies = new ICompilationUnit[1];
1145 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test/Test.java",
1146 		"package test;\n" +
1147 		"public class Test {\n" +
1148 		"	void foo(A<String> a) {\n" +
1149 		"		a.<String>foo();\n" +
1150 		"		a.<A<? extends Exception>>foo();\n" +
1151 		"	}\n" +
1152 		"}\n" +
1153 		"class A<T> {\n" +
1154 		"	<U> void foo() {}\n" +
1155 		"}\n"
1156 	);
1157 	assertEquals("CU Should not have any problem!",
1158 		"----------\n" +
1159 		"----------\n",
1160 		problemRequestor.problems.toString()
1161 	);
1162 	this.resultCollector.showSelection();
1163 	this.resultCollector.showOffset();
1164 }
testTypeRefGenericMethod_AllGenericFlags()1165 public void testTypeRefGenericMethod_AllGenericFlags() throws CoreException {
1166 	setUpTypeRefGenericMethod();
1167 	search("*", TYPE, ALL_GENERIC_TYPE_FINE_GRAIN_FLAGS, getJavaSearchWorkingCopiesScope());
1168 	assertSearchResults(
1169 		"src/test/Test.java void test.Test.foo(A<String>) [	void foo(A<!|String|!> a) {@46] EXACT_MATCH\n" +
1170 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<!|String|!>foo();@64] EXACT_MATCH\n" +
1171 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<!|A|!<? extends Exception>>foo();@83] EXACT_MATCH\n" +
1172 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<A<? extends !|Exception|!>>foo();@95] EXACT_MATCH"
1173 	);
1174 }
testTypeRefGenericMethod_TypeArgument()1175 public void testTypeRefGenericMethod_TypeArgument() throws CoreException {
1176 	setUpTypeRefGenericMethod();
1177 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1178 	assertSearchResults(
1179 		"src/test/Test.java void test.Test.foo(A<String>) [	void foo(A<!|String|!> a) {@46] EXACT_MATCH\n" +
1180 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<!|String|!>foo();@64] EXACT_MATCH\n" +
1181 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<!|A|!<? extends Exception>>foo();@83] EXACT_MATCH"
1182 	);
1183 }
testTypeRefGenericMethod_TypeVariableBound()1184 public void testTypeRefGenericMethod_TypeVariableBound() throws CoreException {
1185 	setUpTypeRefGenericMethod();
1186 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1187 	assertSearchResults("");
1188 }
testTypeRefGenericMethod_WildcardBound()1189 public void testTypeRefGenericMethod_WildcardBound() throws CoreException {
1190 	setUpTypeRefGenericMethod();
1191 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1192 	assertSearchResults(
1193 		"src/test/Test.java void test.Test.foo(A<String>) [		a.<A<? extends !|Exception|!>>foo();@95] EXACT_MATCH"
1194 	);
1195 }
1196 
1197 /*
1198  * References to all qualified types (using '*' string pattern)
1199  */
setUpTypeRefQualifiedAll()1200 private void setUpTypeRefQualifiedAll() throws JavaModelException {
1201 	final ProblemRequestor problemRequestor = new ProblemRequestor();
1202 	this.wcOwner = new WorkingCopyOwner() {
1203 		public IProblemRequestor getProblemRequestor(ICompilationUnit workingCopy) {
1204 			return problemRequestor;
1205 		}
1206 	};
1207 	this.workingCopies = new ICompilationUnit[3];
1208 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/type/def/Types.java",
1209 		"package type.def;\n" +
1210 		"@Bug\n" +
1211 		"@ATest\n" +
1212 		"public class Types extends Exception implements ITest1, ITest2 {\n" +
1213 		"	ITest1 test1;\n" +
1214 		"	ITest2 test2;\n" +
1215 		"}\n" +
1216 		"@Bug\n" +
1217 		"interface ITest1 {}\n" +
1218 		"@ATest\n" +
1219 		"interface ITest2 extends ITest1 {}\n" +
1220 		"@Bug\n" +
1221 		"@ATest\n" +
1222 		"enum ETest {}\n" +
1223 		"@Bug\n" +
1224 		"@interface ATest {}\n"
1225 	);
1226 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/type/def/Bug.java",
1227 		"package type.def;\n" +
1228 		"public @interface Bug {\n" +
1229 		"	int num() default 0;\n" +
1230 		"	String comment() default \"\";\n" +
1231 		"}\n"
1232 	);
1233 	this.workingCopies[2] = getWorkingCopy("/JavaSearch15/src/all/types/ref/TestTypes.java",
1234 		"package all.types.ref;\n" +
1235 		"\n" +
1236 		"@type.def.Bug(num=155013)\n" +
1237 		"public class TestTypes extends type.def.Types {\n" +
1238 		"	@type.def.Bug(comment=\"field\")\n" +
1239 		"	type.def.Types field = new type.def.Types(), local, other = new type.def.Types();\n" +
1240 		"	{\n" +
1241 		"		Object o;\n" +
1242 		"		type.def.Types t;\n" +
1243 		"		if (this.field == null) {\n" +
1244 		"			try {\n" +
1245 		"				t = new TestTypes();\n" +
1246 		"			} catch (RuntimeException e) {\n" +
1247 		"				t = new type.def.Types();\n" +
1248 		"			} \n" +
1249 		"		} else {\n" +
1250 		"			o = this.field;\n" +
1251 		"			t = (type.def.Types) o;\n" +
1252 		"		}\n" +
1253 		"		local = t;\n" +
1254 		"	};\n" +
1255 		"	@type.def.Bug(comment=\"method\", num=155013)\n" +
1256 		"	type.def.Types method(type.def.Types param) throws type.def.Types {\n" +
1257 		"		Object obj = new type.def.Types();\n" +
1258 		"		type.def.Types local = (type.def.Types) obj;\n" +
1259 		"		return local;\n" +
1260 		"	}\n" +
1261 		"	type.def.Bug bar(type.def.Bug bug) {\n" +
1262 		"		try {\n" +
1263 		"			method(this);\n" +
1264 		"		}\n" +
1265 		"		catch (type.def.Types ex) {}\n" +
1266 		"		catch (Exception ex) {}\n" +
1267 		"		return bug; \n" +
1268 		"	}\n" +
1269 		"	// Other types references\n" +
1270 		"	Object object;\n" +
1271 		"	String str;\n" +
1272 		"	TestTypes() throws type.def.Types, RuntimeException {\n" +
1273 		"		if (this.object instanceof String) {\n" +
1274 		"			this.str = (String) this.object;\n" +
1275 		"		} else {\n" +
1276 		"			this.str = new String();\n" +
1277 		"			this.object = new Object();\n" +
1278 		"		}\n" +
1279 		"	}\n" +
1280 		"}\n"
1281 	);
1282 	assertEquals("CU Should not have any problem!",
1283 		"----------\n" +
1284 		"----------\n",
1285 		problemRequestor.problems.toString()
1286 	);
1287 	this.resultCollector.showSelection();
1288 	this.resultCollector.showOffset();
1289 }
testTypeRefQualifiedAll_Allocation()1290 public void testTypeRefQualifiedAll_Allocation() throws CoreException {
1291 	setUpTypeRefQualifiedAll();
1292 	search("*", TYPE, CLASS_INSTANCE_CREATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1293 	assertSearchResults(
1294 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	type.def.Types field = new !|type.def.Types|!(), local, other = new type.def.Types();@158] EXACT_MATCH\n" +
1295 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.other [	type.def.Types field = new type.def.Types(), local, other = new !|type.def.Types|!();@195] EXACT_MATCH\n" +
1296 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [				t = new !|TestTypes|!();@297] EXACT_MATCH\n" +
1297 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [				t = new !|type.def.Types|!();@356] EXACT_MATCH\n" +
1298 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [		Object obj = new !|type.def.Types|!();@591] EXACT_MATCH\n" +
1299 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.str = new !|String|!();@1032] EXACT_MATCH\n" +
1300 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.object = new !|Object|!();@1063] EXACT_MATCH"
1301 	);
1302 }
testTypeRefQualifiedAll_Annotation()1303 public void testTypeRefQualifiedAll_Annotation() throws CoreException {
1304 	setUpTypeRefQualifiedAll();
1305 	search("*", TYPE, ANNOTATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1306 	assertSearchResults(
1307 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes [@!|type.def.Bug|!(num=155013)@25] EXACT_MATCH\n" +
1308 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	@!|type.def.Bug|!(comment=\"field\")@100] EXACT_MATCH\n" +
1309 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [	@!|type.def.Bug|!(comment=\"method\", num=155013)@460] EXACT_MATCH\n" +
1310 		"src/type/def/Types.java type.def.Types [@!|Bug|!@19] EXACT_MATCH\n" +
1311 		"src/type/def/Types.java type.def.Types [@!|ATest|!@24] EXACT_MATCH\n" +
1312 		"src/type/def/Types.java type.def.ITest1 [@!|Bug|!@128] EXACT_MATCH\n" +
1313 		"src/type/def/Types.java type.def.ITest2 [@!|ATest|!@153] EXACT_MATCH\n" +
1314 		"src/type/def/Types.java type.def.ETest [@!|Bug|!@195] EXACT_MATCH\n" +
1315 		"src/type/def/Types.java type.def.ETest [@!|ATest|!@200] EXACT_MATCH\n" +
1316 		"src/type/def/Types.java type.def.ATest [@!|Bug|!@221] EXACT_MATCH"
1317 	);
1318 }
testTypeRefQualifiedAll_Cast()1319 public void testTypeRefQualifiedAll_Cast() throws CoreException {
1320 	setUpTypeRefQualifiedAll();
1321 	search("*", TYPE, CAST_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1322 	assertSearchResults(
1323 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [			t = (!|type.def.Types|!) o;@418] EXACT_MATCH\n" +
1324 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [		type.def.Types local = (!|type.def.Types|!) obj;@635] EXACT_MATCH\n" +
1325 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [			this.str = (!|String|!) this.object;@982] EXACT_MATCH"
1326 	);
1327 }
testTypeRefQualifiedAll_Catch()1328 public void testTypeRefQualifiedAll_Catch() throws CoreException {
1329 	setUpTypeRefQualifiedAll();
1330 	search("*", TYPE, CATCH_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1331 	assertSearchResults(
1332 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [			} catch (!|RuntimeException|! e) {@322] EXACT_MATCH\n" +
1333 		"src/all/types/ref/TestTypes.java type.def.Bug all.types.ref.TestTypes.bar(type.def.Bug) [		catch (!|type.def.Types|! ex) {}@751] EXACT_MATCH\n" +
1334 		"src/all/types/ref/TestTypes.java type.def.Bug all.types.ref.TestTypes.bar(type.def.Bug) [		catch (!|Exception|! ex) {}@782] EXACT_MATCH"
1335 	);
1336 }
testTypeRefQualifiedAll_Field()1337 public void testTypeRefQualifiedAll_Field() throws CoreException {
1338 	setUpTypeRefQualifiedAll();
1339 	search("*", TYPE, FIELD_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1340 	assertSearchResults(
1341 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.field [	!|type.def.Types|! field = new type.def.Types(), local, other = new type.def.Types();@131] EXACT_MATCH\n" +
1342 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.object [	!|Object|! object;@845] EXACT_MATCH\n" +
1343 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.str [	!|String|! str;@861] EXACT_MATCH\n" +
1344 		"src/type/def/Types.java type.def.Types.test1 [	!|ITest1|! test1;@96] EXACT_MATCH\n" +
1345 		"src/type/def/Types.java type.def.Types.test2 [	!|ITest2|! test2;@111] EXACT_MATCH"
1346 	);
1347 }
testTypeRefQualifiedAll_Import()1348 public void testTypeRefQualifiedAll_Import() throws CoreException {
1349 	setUpTypeRefQualifiedAll();
1350 	search("*", TYPE, IMPORT_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1351 	assertSearchResults("");
1352 }
testTypeRefQualifiedAll_MethodParameter()1353 public void testTypeRefQualifiedAll_MethodParameter() throws CoreException {
1354 	setUpTypeRefQualifiedAll();
1355 	search("*", TYPE, PARAMETER_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1356 	assertSearchResults(
1357 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [	type.def.Types method(!|type.def.Types|! param) throws type.def.Types {@526] EXACT_MATCH\n" +
1358 		"src/all/types/ref/TestTypes.java type.def.Bug all.types.ref.TestTypes.bar(type.def.Bug) [	type.def.Bug bar(!|type.def.Bug|! bug) {@693] EXACT_MATCH"
1359 	);
1360 }
testTypeRefQualifiedAll_Return()1361 public void testTypeRefQualifiedAll_Return() throws CoreException {
1362 	setUpTypeRefQualifiedAll();
1363 	search("*", TYPE, RETURN_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1364 	assertSearchResults(
1365 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [	!|type.def.Types|! method(type.def.Types param) throws type.def.Types {@504] EXACT_MATCH\n" +
1366 		"src/all/types/ref/TestTypes.java type.def.Bug all.types.ref.TestTypes.bar(type.def.Bug) [	!|type.def.Bug|! bar(type.def.Bug bug) {@676] EXACT_MATCH\n" +
1367 		"src/type/def/Bug.java int type.def.Bug.num() [	!|int|! num() default 0;@43] EXACT_MATCH\n" +
1368 		"src/type/def/Bug.java String type.def.Bug.comment() [	!|String|! comment() default \"\";@65] EXACT_MATCH"
1369 	);
1370 }
testTypeRefQualifiedAll_Supertype()1371 public void testTypeRefQualifiedAll_Supertype() throws CoreException {
1372 	setUpTypeRefQualifiedAll();
1373 	search("*", TYPE, SUPERTYPE_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1374 	assertSearchResults(
1375 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes [public class TestTypes extends !|type.def.Types|! {@81] EXACT_MATCH\n" +
1376 		"src/type/def/Types.java type.def.Types [public class Types extends !|Exception|! implements ITest1, ITest2 {@57] EXACT_MATCH\n" +
1377 		"src/type/def/Types.java type.def.Types [public class Types extends Exception implements !|ITest1|!, ITest2 {@78] EXACT_MATCH\n" +
1378 		"src/type/def/Types.java type.def.Types [public class Types extends Exception implements ITest1, !|ITest2|! {@86] EXACT_MATCH\n" +
1379 		"src/type/def/Types.java type.def.ITest2 [interface ITest2 extends !|ITest1|! {}@184] EXACT_MATCH"
1380 	);
1381 }
testTypeRefQualifiedAll_Throws()1382 public void testTypeRefQualifiedAll_Throws() throws CoreException {
1383 	setUpTypeRefQualifiedAll();
1384 	search("*", TYPE, THROWS_CLAUSE_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1385 	assertSearchResults(
1386 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [	type.def.Types method(type.def.Types param) throws !|type.def.Types|! {@555] EXACT_MATCH\n" +
1387 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [	TestTypes() throws !|type.def.Types|!, RuntimeException {@893] EXACT_MATCH\n" +
1388 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes() [	TestTypes() throws type.def.Types, !|RuntimeException|! {@909] EXACT_MATCH"
1389 	);
1390 }
testTypeRefQualifiedAll_Variable()1391 public void testTypeRefQualifiedAll_Variable() throws CoreException {
1392 	setUpTypeRefQualifiedAll();
1393 	search("*", TYPE, LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
1394 	assertSearchResults(
1395 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [		!|Object|! o;@218] EXACT_MATCH\n" +
1396 		"src/all/types/ref/TestTypes.java all.types.ref.TestTypes.{} [		!|type.def.Types|! t;@230] EXACT_MATCH\n" +
1397 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [		!|Object|! obj = new type.def.Types();@574] EXACT_MATCH\n" +
1398 		"src/all/types/ref/TestTypes.java type.def.Types all.types.ref.TestTypes.method(type.def.Types) [		!|type.def.Types|! local = (type.def.Types) obj;@611] EXACT_MATCH"
1399 	);
1400 }
1401 
1402 /*
1403  * Tests using classes defined in JavaSearch15 project
1404  */
testTypeRefGenericAllG1_TypeArgument()1405 public void testTypeRefGenericAllG1_TypeArgument() throws CoreException {
1406 	IType type = getCompilationUnit("JavaSearch15/src/g1/t/s/ref/R3.java").getType("R3");
1407 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1408 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, scope);
1409 	assertSearchResults(
1410 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_obj [	public Generic<!|Object|!>.MemberGeneric<Object> gen_obj;@393] EXACT_MATCH\n" +
1411 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_obj [	public Generic<Object>.MemberGeneric<!|Object|!> gen_obj;@415] EXACT_MATCH\n" +
1412 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_exc [	public Generic<!|Exception|!>.MemberGeneric<Exception> gen_exc;@448] EXACT_MATCH\n" +
1413 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_exc [	public Generic<Exception>.MemberGeneric<!|Exception|!> gen_exc;@473] EXACT_MATCH\n" +
1414 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_obj [	public g1.t.s.def.Generic<!|Object|!>.MemberGeneric<Object> qgen_obj;@803] EXACT_MATCH\n" +
1415 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_obj [	public g1.t.s.def.Generic<Object>.MemberGeneric<!|Object|!> qgen_obj;@825] EXACT_MATCH\n" +
1416 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_exc [	public g1.t.s.def.Generic<!|Exception|!>.MemberGeneric<Exception> qgen_exc;@870] EXACT_MATCH\n" +
1417 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_exc [	public g1.t.s.def.Generic<Exception>.MemberGeneric<!|Exception|!> qgen_exc;@895] EXACT_MATCH"
1418 	);
1419 }
testTypeRefGenericAllG1_WildcardBounds()1420 public void testTypeRefGenericAllG1_WildcardBounds() throws CoreException {
1421 	IType type = getCompilationUnit("JavaSearch15/src/g1/t/s/ref/R3.java").getType("R3");
1422 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1423 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, scope);
1424 	assertSearchResults(
1425 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_thr [	public Generic<? extends !|Throwable|!>.MemberGeneric<? super RuntimeException> gen_thr;@564] EXACT_MATCH\n" +
1426 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_thr [	public Generic<? extends Throwable>.MemberGeneric<? super !|RuntimeException|!> gen_thr;@597] EXACT_MATCH\n" +
1427 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_run [	public Generic<? super !|RuntimeException|!>.MemberGeneric<? extends Throwable> gen_run;@648] EXACT_MATCH\n" +
1428 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.gen_run [	public Generic<? super RuntimeException>.MemberGeneric<? extends !|Throwable|!> gen_run;@690] EXACT_MATCH\n" +
1429 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_thr [	public g1.t.s.def.Generic<? extends !|Throwable|!>.MemberGeneric<? super RuntimeException> qgen_thr;@1010] EXACT_MATCH\n" +
1430 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_thr [	public g1.t.s.def.Generic<? extends Throwable>.MemberGeneric<? super !|RuntimeException|!> qgen_thr;@1043] EXACT_MATCH\n" +
1431 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_run [	public g1.t.s.def.Generic<? super !|RuntimeException|!>.MemberGeneric<? extends Throwable> qgen_run;@1106] EXACT_MATCH\n" +
1432 		"src/g1/t/s/ref/R3.java g1.t.s.ref.R3.qgen_run [	public g1.t.s.def.Generic<? super RuntimeException>.MemberGeneric<? extends !|Throwable|!> qgen_run;@1148] EXACT_MATCH"
1433 	);
1434 }
testTypeRefGenericAllG2_TypeArgument()1435 public void testTypeRefGenericAllG2_TypeArgument() throws CoreException {
1436 	// TODO The JavaSearch15/src/g2/f/s/def/R3.java should be updated as it contains compilation errors!
1437 	IType type = getCompilationUnit("JavaSearch15/src/g2/f/s/def/R3.java").getType("R3");
1438 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1439 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, scope);
1440 	assertSearchResults(
1441 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<!|Object|!>.MemberGeneric<Object> member = new Generic<Object>().new MemberGeneric<Object>();@177] EXACT_MATCH\n" +
1442 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Object>.MemberGeneric<!|Object|!> member = new Generic<Object>().new MemberGeneric<Object>();@199] EXACT_MATCH\n" +
1443 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Object>.MemberGeneric<Object> member = new Generic<!|Object|!>().new MemberGeneric<Object>();@228] EXACT_MATCH\n" +
1444 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Object>.MemberGeneric<Object> member = new Generic<Object>().new MemberGeneric<!|Object|!>();@256] EXACT_MATCH\n" +
1445 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<!|Exception|!>.MemberGeneric<Exception> member = new Generic<Exception>().new MemberGeneric<Exception>();@306] EXACT_MATCH\n" +
1446 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Exception>.MemberGeneric<!|Exception|!> member = new Generic<Exception>().new MemberGeneric<Exception>();@331] EXACT_MATCH\n" +
1447 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Exception>.MemberGeneric<Exception> member = new Generic<!|Exception|!>().new MemberGeneric<Exception>();@363] EXACT_MATCH\n" +
1448 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<Exception>.MemberGeneric<Exception> member = new Generic<Exception>().new MemberGeneric<!|Exception|!>();@394] EXACT_MATCH\n" +
1449 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<!|Exception|!>().new MemberGeneric<Exception>();@633] EXACT_MATCH\n" +
1450 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<Exception>().new MemberGeneric<!|Exception|!>();@664] EXACT_MATCH\n" +
1451 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<!|Exception|!>().new MemberGeneric<? extends Throwable>();@794] EXACT_MATCH\n" +
1452 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<? extends Throwable>().new MemberGeneric<!|Exception|!>();@1006] EXACT_MATCH\n" +
1453 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<!|Exception|!>().new MemberGeneric<Exception>();@1327] EXACT_MATCH\n" +
1454 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<Exception>().new MemberGeneric<!|Exception|!>();@1358] EXACT_MATCH\n" +
1455 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<!|Exception|!>().new MemberGeneric<? super RuntimeException>();@1498] EXACT_MATCH\n" +
1456 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<? super RuntimeException>().new MemberGeneric<!|Exception|!>();@1730] EXACT_MATCH"
1457 	);
1458 }
testTypeRefGenericAllG2_WildcardBounds()1459 public void testTypeRefGenericAllG2_WildcardBounds() throws CoreException {
1460 	// TODO The JavaSearch15/src/g2/f/s/def/R3.java should be updated as it contains compilation errors!
1461 	IType type = getCompilationUnit("JavaSearch15/src/g2/f/s/def/R3.java").getType("R3");
1462 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1463 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, scope);
1464 	assertSearchResults(
1465 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends !|Throwable|!>.MemberGeneric<? extends Throwable> member = new Generic<Exception>().new MemberGeneric<Exception>();@566] EXACT_MATCH\n" +
1466 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends !|Throwable|!> member = new Generic<Exception>().new MemberGeneric<Exception>();@601] EXACT_MATCH\n" +
1467 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends !|Throwable|!>.MemberGeneric<? extends Throwable> member = new Generic<Exception>().new MemberGeneric<? extends Throwable>();@727] EXACT_MATCH\n" +
1468 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends !|Throwable|!> member = new Generic<Exception>().new MemberGeneric<? extends Throwable>();@762] EXACT_MATCH\n" +
1469 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<Exception>().new MemberGeneric<? extends !|Throwable|!>();@835] EXACT_MATCH\n" +
1470 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends !|Throwable|!>.MemberGeneric<? extends Throwable> member = new Generic<? extends Throwable>().new MemberGeneric<Exception>();@898] EXACT_MATCH\n" +
1471 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends !|Throwable|!> member = new Generic<? extends Throwable>().new MemberGeneric<Exception>();@933] EXACT_MATCH\n" +
1472 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<? extends !|Throwable|!>().new MemberGeneric<Exception>();@975] EXACT_MATCH\n" +
1473 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends !|Throwable|!>.MemberGeneric<? extends Throwable> member = new Generic<? extends Throwable>().new MemberGeneric<? extends Throwable>();@1069] EXACT_MATCH\n" +
1474 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends !|Throwable|!> member = new Generic<? extends Throwable>().new MemberGeneric<? extends Throwable>();@1104] EXACT_MATCH\n" +
1475 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<? extends !|Throwable|!>().new MemberGeneric<? extends Throwable>();@1146] EXACT_MATCH\n" +
1476 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? extends Throwable>.MemberGeneric<? extends Throwable> member = new Generic<? extends Throwable>().new MemberGeneric<? extends !|Throwable|!>();@1187] EXACT_MATCH\n" +
1477 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super !|RuntimeException|!>.MemberGeneric<? super RuntimeException> member = new Generic<Exception>().new MemberGeneric<Exception>();@1248] EXACT_MATCH\n" +
1478 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super !|RuntimeException|!> member = new Generic<Exception>().new MemberGeneric<Exception>();@1288] EXACT_MATCH\n" +
1479 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super !|RuntimeException|!>.MemberGeneric<? super RuntimeException> member = new Generic<Exception>().new MemberGeneric<? super RuntimeException>();@1419] EXACT_MATCH\n" +
1480 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super !|RuntimeException|!> member = new Generic<Exception>().new MemberGeneric<? super RuntimeException>();@1459] EXACT_MATCH\n" +
1481 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<Exception>().new MemberGeneric<? super !|RuntimeException|!>();@1537] EXACT_MATCH\n" +
1482 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super !|RuntimeException|!>.MemberGeneric<? super RuntimeException> member = new Generic<? super RuntimeException>().new MemberGeneric<Exception>();@1605] EXACT_MATCH\n" +
1483 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super !|RuntimeException|!> member = new Generic<? super RuntimeException>().new MemberGeneric<Exception>();@1645] EXACT_MATCH\n" +
1484 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<? super !|RuntimeException|!>().new MemberGeneric<Exception>();@1692] EXACT_MATCH\n" +
1485 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super !|RuntimeException|!>.MemberGeneric<? super RuntimeException> member = new Generic<? super RuntimeException>().new MemberGeneric<? super RuntimeException>();@1791] EXACT_MATCH\n" +
1486 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super !|RuntimeException|!> member = new Generic<? super RuntimeException>().new MemberGeneric<? super RuntimeException>();@1831] EXACT_MATCH\n" +
1487 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<? super !|RuntimeException|!>().new MemberGeneric<? super RuntimeException>();@1878] EXACT_MATCH\n" +
1488 		"src/g2/f/s/def/R3.java g2.f.s.def.R3.{} [		Generic<? super RuntimeException>.MemberGeneric<? super RuntimeException> member = new Generic<? super RuntimeException>().new MemberGeneric<? super !|RuntimeException|!>();@1924] EXACT_MATCH"
1489 	);
1490 }
testTypeRefGenericAllG3R3_TypeArgument()1491 public void testTypeRefGenericAllG3R3_TypeArgument() throws CoreException {
1492 	IType type = getCompilationUnit("JavaSearch15/src/g3/t/ref/R3.java").getType("R3");
1493 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1494 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1495 	assertSearchResults(
1496 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_wld [	public GS<!|GM<?, ?, ?>.Generic|!<?, ?, ?>>.Generic<?> sgsm_wld;@321] EXACT_MATCH\n" +
1497 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_www [	public GS<!|GM<GM<?, ?, ?>.Generic<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>>.Generic|!<?,?,?>>.Generic<?> sgsm_www;@383] EXACT_MATCH\n" +
1498 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_www [	public GS<GM<!|GM<?, ?, ?>.Generic|!<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>>.Generic<?,?,?>>.Generic<?> sgsm_www;@386] EXACT_MATCH\n" +
1499 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_www [	public GS<GM<GM<?, ?, ?>.Generic<?,?,?>,!|GM<?, ?, ?>.Generic|!<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>>.Generic<?,?,?>>.Generic<?> sgsm_www;@413] EXACT_MATCH\n" +
1500 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_www [	public GS<GM<GM<?, ?, ?>.Generic<?,?,?>,GM<?, ?, ?>.Generic<?,?,?>,!|GM<?, ?, ?>.Generic|!<?,?,?>>.Generic<?,?,?>>.Generic<?> sgsm_www;@440] EXACT_MATCH\n" +
1501 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<!|GM<Object, Exception, RuntimeException>.Generic|!<Object, Exception, RuntimeException>>.Generic<Exception> sgsm_obj;@516] EXACT_MATCH\n" +
1502 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<!|Object|!, Exception, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> sgsm_obj;@519] EXACT_MATCH\n" +
1503 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, !|Exception|!, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> sgsm_obj;@527] EXACT_MATCH\n" +
1504 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, Exception, !|RuntimeException|!>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> sgsm_obj;@538] EXACT_MATCH\n" +
1505 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, Exception, RuntimeException>.Generic<!|Object|!, Exception, RuntimeException>>.Generic<Exception> sgsm_obj;@564] EXACT_MATCH\n" +
1506 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, Exception, RuntimeException>.Generic<Object, !|Exception|!, RuntimeException>>.Generic<Exception> sgsm_obj;@572] EXACT_MATCH\n" +
1507 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, Exception, RuntimeException>.Generic<Object, Exception, !|RuntimeException|!>>.Generic<Exception> sgsm_obj;@583] EXACT_MATCH\n" +
1508 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgsm_obj [	public GS<GM<Object, Exception, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<!|Exception|!> sgsm_obj;@610] EXACT_MATCH\n" +
1509 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_wld [	public GM<!|GS<?>.Generic|!<?>, GS<?>.Generic<?>, GS<?>.Generic<?>>.Generic<?,?,?> sgms_wld;@642] EXACT_MATCH\n" +
1510 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_wld [	public GM<GS<?>.Generic<?>, !|GS<?>.Generic|!<?>, GS<?>.Generic<?>>.Generic<?,?,?> sgms_wld;@660] EXACT_MATCH\n" +
1511 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_wld [	public GM<GS<?>.Generic<?>, GS<?>.Generic<?>, !|GS<?>.Generic|!<?>>.Generic<?,?,?> sgms_wld;@678] EXACT_MATCH\n" +
1512 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<!|GS<?>.Generic|!<?>, GS<GS<?>.Generic<?>>.Generic<?>, GS<GS<GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> sgms_www;@732] EXACT_MATCH\n" +
1513 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<GS<?>.Generic<?>, !|GS<GS<?>.Generic<?>>.Generic|!<?>, GS<GS<GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> sgms_www;@750] EXACT_MATCH\n" +
1514 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<GS<?>.Generic<?>, GS<!|GS<?>.Generic|!<?>>.Generic<?>, GS<GS<GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> sgms_www;@753] EXACT_MATCH\n" +
1515 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<GS<?>.Generic<?>, GS<GS<?>.Generic<?>>.Generic<?>, !|GS<GS<GS<?>.Generic<?>>.Generic<?>>.Generic|!<?>>.Generic<?,?,?> sgms_www;@783] EXACT_MATCH\n" +
1516 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<GS<?>.Generic<?>, GS<GS<?>.Generic<?>>.Generic<?>, GS<!|GS<GS<?>.Generic<?>>.Generic|!<?>>.Generic<?>>.Generic<?,?,?> sgms_www;@786] EXACT_MATCH\n" +
1517 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_www [	public GM<GS<?>.Generic<?>, GS<GS<?>.Generic<?>>.Generic<?>, GS<GS<!|GS<?>.Generic|!<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> sgms_www;@789] EXACT_MATCH\n" +
1518 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<!|GS<Object>.Generic|!<?>, GS<? extends Throwable>.Generic<?>, GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> sgms_obj;@867] EXACT_MATCH\n" +
1519 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<GS<!|Object|!>.Generic<?>, GS<? extends Throwable>.Generic<?>, GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> sgms_obj;@870] EXACT_MATCH\n" +
1520 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<GS<Object>.Generic<?>, !|GS<? extends Throwable>.Generic|!<?>, GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> sgms_obj;@890] EXACT_MATCH\n" +
1521 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<GS<Object>.Generic<?>, GS<? extends Throwable>.Generic<?>, !|GS<? super RuntimeException>.Generic|!<?>>.Generic<?,?,?> sgms_obj;@926] EXACT_MATCH\n" +
1522 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_wld [	public g3.t.def.GS<!|g3.t.def.GM<?, ?, ?>.Generic|!<?, ?, ?>>.Generic<?> qgsm_wld;@1031] EXACT_MATCH\n" +
1523 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_www [	public g3.t.def.GS<!|g3.t.def.GM<g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>>.Generic|!<?,?,?>>.Generic<?> qgsm_www;@1111] EXACT_MATCH\n" +
1524 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_www [	public g3.t.def.GS<g3.t.def.GM<!|g3.t.def.GM<?, ?, ?>.Generic|!<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>>.Generic<?,?,?>>.Generic<?> qgsm_www;@1123] EXACT_MATCH\n" +
1525 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_www [	public g3.t.def.GS<g3.t.def.GM<g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,!|g3.t.def.GM<?, ?, ?>.Generic|!<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>>.Generic<?,?,?>>.Generic<?> qgsm_www;@1159] EXACT_MATCH\n" +
1526 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_www [	public g3.t.def.GS<g3.t.def.GM<g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,g3.t.def.GM<?, ?, ?>.Generic<?,?,?>,!|g3.t.def.GM<?, ?, ?>.Generic|!<?,?,?>>.Generic<?,?,?>>.Generic<?> qgsm_www;@1195] EXACT_MATCH\n" +
1527 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<!|g3.t.def.GM<Object, Exception, RuntimeException>.Generic|!<Object, Exception, RuntimeException>>.Generic<Exception> qgsm_obj;@1289] EXACT_MATCH\n" +
1528 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<!|Object|!, Exception, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> qgsm_obj;@1301] EXACT_MATCH\n" +
1529 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, !|Exception|!, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> qgsm_obj;@1309] EXACT_MATCH\n" +
1530 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, Exception, !|RuntimeException|!>.Generic<Object, Exception, RuntimeException>>.Generic<Exception> qgsm_obj;@1320] EXACT_MATCH\n" +
1531 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, Exception, RuntimeException>.Generic<!|Object|!, Exception, RuntimeException>>.Generic<Exception> qgsm_obj;@1346] EXACT_MATCH\n" +
1532 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, Exception, RuntimeException>.Generic<Object, !|Exception|!, RuntimeException>>.Generic<Exception> qgsm_obj;@1354] EXACT_MATCH\n" +
1533 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, Exception, RuntimeException>.Generic<Object, Exception, !|RuntimeException|!>>.Generic<Exception> qgsm_obj;@1365] EXACT_MATCH\n" +
1534 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgsm_obj [	public g3.t.def.GS<g3.t.def.GM<Object, Exception, RuntimeException>.Generic<Object, Exception, RuntimeException>>.Generic<!|Exception|!> qgsm_obj;@1392] EXACT_MATCH\n" +
1535 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_wld [	public g3.t.def.GM<!|g3.t.def.GS<?>.Generic|!<?>, g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<?>.Generic<?>>.Generic<?,?,?> qgms_wld;@1433] EXACT_MATCH\n" +
1536 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_wld [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, !|g3.t.def.GS<?>.Generic|!<?>, g3.t.def.GS<?>.Generic<?>>.Generic<?,?,?> qgms_wld;@1460] EXACT_MATCH\n" +
1537 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_wld [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<?>.Generic<?>, !|g3.t.def.GS<?>.Generic|!<?>>.Generic<?,?,?> qgms_wld;@1487] EXACT_MATCH\n" +
1538 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<!|g3.t.def.GS<?>.Generic|!<?>, g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>, g3.t.def.GS<g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> qgms_www;@1559] EXACT_MATCH\n" +
1539 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, !|g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic|!<?>, g3.t.def.GS<g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> qgms_www;@1586] EXACT_MATCH\n" +
1540 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<!|g3.t.def.GS<?>.Generic|!<?>>.Generic<?>, g3.t.def.GS<g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> qgms_www;@1598] EXACT_MATCH\n" +
1541 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>, !|g3.t.def.GS<g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>>.Generic|!<?>>.Generic<?,?,?> qgms_www;@1637] EXACT_MATCH\n" +
1542 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>, g3.t.def.GS<!|g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic|!<?>>.Generic<?>>.Generic<?,?,?> qgms_www;@1649] EXACT_MATCH\n" +
1543 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_www [	public g3.t.def.GM<g3.t.def.GS<?>.Generic<?>, g3.t.def.GS<g3.t.def.GS<?>.Generic<?>>.Generic<?>, g3.t.def.GS<g3.t.def.GS<!|g3.t.def.GS<?>.Generic|!<?>>.Generic<?>>.Generic<?>>.Generic<?,?,?> qgms_www;@1661] EXACT_MATCH\n" +
1544 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<!|g3.t.def.GS<Object>.Generic|!<?>, g3.t.def.GS<? extends Throwable>.Generic<?>, g3.t.def.GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> qgms_obj;@1757] EXACT_MATCH\n" +
1545 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<g3.t.def.GS<!|Object|!>.Generic<?>, g3.t.def.GS<? extends Throwable>.Generic<?>, g3.t.def.GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> qgms_obj;@1769] EXACT_MATCH\n" +
1546 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<g3.t.def.GS<Object>.Generic<?>, !|g3.t.def.GS<? extends Throwable>.Generic|!<?>, g3.t.def.GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> qgms_obj;@1789] EXACT_MATCH\n" +
1547 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<g3.t.def.GS<Object>.Generic<?>, g3.t.def.GS<? extends Throwable>.Generic<?>, !|g3.t.def.GS<? super RuntimeException>.Generic|!<?>>.Generic<?,?,?> qgms_obj;@1834] EXACT_MATCH"
1548 	);
1549 }
testTypeRefGenericAllG3R3_WildcardBounds()1550 public void testTypeRefGenericAllG3R3_WildcardBounds() throws CoreException {
1551 	IType type = getCompilationUnit("JavaSearch15/src/g3/t/ref/R3.java").getType("R3");
1552 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1553 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1554 	assertSearchResults(
1555 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<GS<Object>.Generic<?>, GS<? extends !|Throwable|!>.Generic<?>, GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> sgms_obj;@903] EXACT_MATCH\n" +
1556 		"src/g3/t/ref/R3.java g3.t.ref.R3.sgms_obj [	public GM<GS<Object>.Generic<?>, GS<? extends Throwable>.Generic<?>, GS<? super !|RuntimeException|!>.Generic<?>>.Generic<?,?,?> sgms_obj;@937] EXACT_MATCH\n" +
1557 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<g3.t.def.GS<Object>.Generic<?>, g3.t.def.GS<? extends !|Throwable|!>.Generic<?>, g3.t.def.GS<? super RuntimeException>.Generic<?>>.Generic<?,?,?> qgms_obj;@1811] EXACT_MATCH\n" +
1558 		"src/g3/t/ref/R3.java g3.t.ref.R3.qgms_obj [	public g3.t.def.GM<g3.t.def.GS<Object>.Generic<?>, g3.t.def.GS<? extends Throwable>.Generic<?>, g3.t.def.GS<? super !|RuntimeException|!>.Generic<?>>.Generic<?,?,?> qgms_obj;@1854] EXACT_MATCH"
1559 	);
1560 }
testTypeRefGenericAllG3R3_TypeVariableBounds()1561 public void testTypeRefGenericAllG3R3_TypeVariableBounds() throws CoreException {
1562 	IType type = getCompilationUnit("JavaSearch15/src/g3/t/ref/R3.java").getType("R3");
1563 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1564 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1565 	assertSearchResults("");
1566 }
testTypeRefGenericAllG5_TypeArgument()1567 public void testTypeRefGenericAllG5_TypeArgument() throws CoreException {
1568 	IType type = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java").getType("RefMultiple");
1569 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1570 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1571 	assertSearchResults(
1572 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<!|Object|!, Exception, RuntimeException> gm = new Multiple<Object, Exception, RuntimeException>();@115] EXACT_MATCH\n" +
1573 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<Object, !|Exception|!, RuntimeException> gm = new Multiple<Object, Exception, RuntimeException>();@123] EXACT_MATCH\n" +
1574 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<Object, Exception, !|RuntimeException|!> gm = new Multiple<Object, Exception, RuntimeException>();@134] EXACT_MATCH\n" +
1575 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<Object, Exception, RuntimeException> gm = new Multiple<!|Object|!, Exception, RuntimeException>();@170] EXACT_MATCH\n" +
1576 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<Object, Exception, RuntimeException> gm = new Multiple<Object, !|Exception|!, RuntimeException>();@178] EXACT_MATCH\n" +
1577 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		Multiple<Object, Exception, RuntimeException> gm = new Multiple<Object, Exception, !|RuntimeException|!>();@189] EXACT_MATCH\n" +
1578 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.<!|Object|!, Exception, RuntimeException>generic(new Object(), new Exception(), new RuntimeException());@367] EXACT_MATCH\n" +
1579 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.<Object, !|Exception|!, RuntimeException>generic(new Object(), new Exception(), new RuntimeException());@375] EXACT_MATCH\n" +
1580 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.<Object, Exception, !|RuntimeException|!>generic(new Object(), new Exception(), new RuntimeException());@386] EXACT_MATCH\n" +
1581 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.paramTypesArgs(new Single<!|Object|!>(), new Single<Exception>(), new Single<RuntimeException>(), gm);@656] EXACT_MATCH\n" +
1582 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.paramTypesArgs(new Single<Object>(), new Single<!|Exception|!>(), new Single<RuntimeException>(), gm);@678] EXACT_MATCH\n" +
1583 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm.paramTypesArgs(new Single<Object>(), new Single<Exception>(), new Single<!|RuntimeException|!>(), gm);@703] EXACT_MATCH\n" +
1584 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm = gm.<!|Object|!, Exception, RuntimeException>complete(new Object(), new Exception(), new RuntimeException(), gm);@838] EXACT_MATCH\n" +
1585 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm = gm.<Object, !|Exception|!, RuntimeException>complete(new Object(), new Exception(), new RuntimeException(), gm);@846] EXACT_MATCH\n" +
1586 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [		gm = gm.<Object, Exception, !|RuntimeException|!>complete(new Object(), new Exception(), new RuntimeException(), gm);@857] EXACT_MATCH\n" +
1587 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testUnbound() [		gm.paramTypesArgs(new Single<!|Object|!>(), new Single<Object>(), new Single<Object>(), gm);@1095] EXACT_MATCH\n" +
1588 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testUnbound() [		gm.paramTypesArgs(new Single<Object>(), new Single<!|Object|!>(), new Single<Object>(), gm);@1117] EXACT_MATCH\n" +
1589 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testUnbound() [		gm.paramTypesArgs(new Single<Object>(), new Single<Object>(), new Single<!|Object|!>(), gm);@1139] EXACT_MATCH\n" +
1590 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<!|Object|!, ? extends Throwable, ? extends Exception> gm = new Multiple<Object, Exception, RuntimeException>();@1295] EXACT_MATCH\n" +
1591 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<Object, ? extends Throwable, ? extends Exception> gm = new Multiple<!|Object|!, Exception, RuntimeException>();@1363] EXACT_MATCH\n" +
1592 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<Object, ? extends Throwable, ? extends Exception> gm = new Multiple<Object, !|Exception|!, RuntimeException>();@1371] EXACT_MATCH\n" +
1593 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<Object, ? extends Throwable, ? extends Exception> gm = new Multiple<Object, Exception, !|RuntimeException|!>();@1382] EXACT_MATCH\n" +
1594 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.<!|Object|!, RuntimeException, RuntimeException>generic(new Object(), new RuntimeException(), new RuntimeException());@1409] EXACT_MATCH\n" +
1595 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.<Object, !|RuntimeException|!, RuntimeException>generic(new Object(), new RuntimeException(), new RuntimeException());@1417] EXACT_MATCH\n" +
1596 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.<Object, RuntimeException, !|RuntimeException|!>generic(new Object(), new RuntimeException(), new RuntimeException());@1435] EXACT_MATCH\n" +
1597 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.paramTypesArgs(new Single<!|Object|!>(), new Single<Throwable>(), new Single<Exception>(), gm);@1554] EXACT_MATCH\n" +
1598 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.paramTypesArgs(new Single<Object>(), new Single<!|Throwable|!>(), new Single<Exception>(), gm);@1576] EXACT_MATCH\n" +
1599 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm.paramTypesArgs(new Single<Object>(), new Single<Throwable>(), new Single<!|Exception|!>(), gm);@1601] EXACT_MATCH\n" +
1600 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm = gm.<!|Object|!, RuntimeException, RuntimeException>complete(new Object(), new RuntimeException(), new RuntimeException(), gm);@1660] EXACT_MATCH\n" +
1601 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm = gm.<Object, !|RuntimeException|!, RuntimeException>complete(new Object(), new RuntimeException(), new RuntimeException(), gm);@1668] EXACT_MATCH\n" +
1602 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		gm = gm.<Object, RuntimeException, !|RuntimeException|!>complete(new Object(), new RuntimeException(), new RuntimeException(), gm);@1686] EXACT_MATCH\n" +
1603 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<!|Object|!, ? super RuntimeException, ? super IllegalMonitorStateException> gm = new Multiple<Object, Exception, RuntimeException>();@1893] EXACT_MATCH\n" +
1604 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<Object, ? super RuntimeException, ? super IllegalMonitorStateException> gm = new Multiple<!|Object|!, Exception, RuntimeException>();@1983] EXACT_MATCH\n" +
1605 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<Object, ? super RuntimeException, ? super IllegalMonitorStateException> gm = new Multiple<Object, !|Exception|!, RuntimeException>();@1991] EXACT_MATCH\n" +
1606 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<Object, ? super RuntimeException, ? super IllegalMonitorStateException> gm = new Multiple<Object, Exception, !|RuntimeException|!>();@2002] EXACT_MATCH\n" +
1607 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.<!|Object|!, RuntimeException, IllegalMonitorStateException>generic(new Object(), new RuntimeException(), new IllegalMonitorStateException());@2029] EXACT_MATCH\n" +
1608 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.<Object, !|RuntimeException|!, IllegalMonitorStateException>generic(new Object(), new RuntimeException(), new IllegalMonitorStateException());@2037] EXACT_MATCH\n" +
1609 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.<Object, RuntimeException, !|IllegalMonitorStateException|!>generic(new Object(), new RuntimeException(), new IllegalMonitorStateException());@2055] EXACT_MATCH\n" +
1610 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.paramTypesArgs(new Single<!|Object|!>(), new Single<RuntimeException>(), new Single<RuntimeException>(), gm);@2198] EXACT_MATCH\n" +
1611 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.paramTypesArgs(new Single<Object>(), new Single<!|RuntimeException|!>(), new Single<RuntimeException>(), gm);@2220] EXACT_MATCH\n" +
1612 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm.paramTypesArgs(new Single<Object>(), new Single<RuntimeException>(), new Single<!|RuntimeException|!>(), gm);@2252] EXACT_MATCH\n" +
1613 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm = gm.<!|Object|!, RuntimeException, IllegalMonitorStateException>complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm);@2318] EXACT_MATCH\n" +
1614 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm = gm.<Object, !|RuntimeException|!, IllegalMonitorStateException>complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm);@2326] EXACT_MATCH\n" +
1615 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		gm = gm.<Object, RuntimeException, !|IllegalMonitorStateException|!>complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm);@2344] EXACT_MATCH"
1616 	);
1617 }
testTypeRefGenericAllG5_WildcardBounds()1618 public void testTypeRefGenericAllG5_WildcardBounds() throws CoreException {
1619 	IType type = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java").getType("RefMultiple");
1620 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1621 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1622 	assertSearchResults(
1623 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<Object, ? extends !|Throwable|!, ? extends Exception> gm = new Multiple<Object, Exception, RuntimeException>();@1313] EXACT_MATCH\n" +
1624 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [		Multiple<Object, ? extends Throwable, ? extends !|Exception|!> gm = new Multiple<Object, Exception, RuntimeException>();@1334] EXACT_MATCH\n" +
1625 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<Object, ? super !|RuntimeException|!, ? super IllegalMonitorStateException> gm = new Multiple<Object, Exception, RuntimeException>();@1909] EXACT_MATCH\n" +
1626 		"src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [		Multiple<Object, ? super RuntimeException, ? super !|IllegalMonitorStateException|!> gm = new Multiple<Object, Exception, RuntimeException>();@1935] EXACT_MATCH"
1627 	);
1628 }
testTypeRefGenericAllG5_TypeVariableBounds()1629 public void testTypeRefGenericAllG5_TypeVariableBounds() throws CoreException {
1630 	IType type = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java").getType("RefMultiple");
1631 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1632 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1633 	assertSearchResults("");
1634 }
testTypeRefGenericAllG6_TypeArgument()1635 public void testTypeRefGenericAllG6_TypeArgument() throws CoreException {
1636 	IType type = getCompilationUnit("JavaSearch15/src/g6/t/ref/QualifMultiple.java").getType("QualifMultiple");
1637 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1638 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1639 	assertSearchResults(
1640 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryException [	g6.t.def.Table<!|String|!, Exception>.Entry<String, Exception> entryException;@64] EXACT_MATCH\n" +
1641 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryException [	g6.t.def.Table<String, !|Exception|!>.Entry<String, Exception> entryException;@72] EXACT_MATCH\n" +
1642 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryException [	g6.t.def.Table<String, Exception>.Entry<!|String|!, Exception> entryException;@89] EXACT_MATCH\n" +
1643 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryException [	g6.t.def.Table<String, Exception>.Entry<String, !|Exception|!> entryException;@97] EXACT_MATCH\n" +
1644 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryExceptionArray [	g6.t.def.Table<!|String|!, Exception>.Entry<String, Exception>[] entryExceptionArray;@140] EXACT_MATCH\n" +
1645 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryExceptionArray [	g6.t.def.Table<String, !|Exception|!>.Entry<String, Exception>[] entryExceptionArray;@148] EXACT_MATCH\n" +
1646 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryExceptionArray [	g6.t.def.Table<String, Exception>.Entry<!|String|!, Exception>[] entryExceptionArray;@165] EXACT_MATCH\n" +
1647 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryExceptionArray [	g6.t.def.Table<String, Exception>.Entry<String, !|Exception|!>[] entryExceptionArray;@173] EXACT_MATCH\n" +
1648 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<!|String|!, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@223] EXACT_MATCH\n" +
1649 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, !|g6.t.def.Table<String, Exception>.Entry<String, Exception>[]|!>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@231] EXACT_MATCH\n" +
1650 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<!|String|!, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@246] EXACT_MATCH\n" +
1651 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, !|Exception|!>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@254] EXACT_MATCH\n" +
1652 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<!|String|!, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@271] EXACT_MATCH\n" +
1653 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, !|Exception|!>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@279] EXACT_MATCH\n" +
1654 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<!|String|!, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@299] EXACT_MATCH\n" +
1655 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, !|g6.t.def.Table<String, Exception>.Entry<String, Exception>[]|!> tableOfEntryExceptionArray;@307] EXACT_MATCH\n" +
1656 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<!|String|!, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@322] EXACT_MATCH\n" +
1657 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, !|Exception|!>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@330] EXACT_MATCH\n" +
1658 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<!|String|!, Exception>[]> tableOfEntryExceptionArray;@347] EXACT_MATCH\n" +
1659 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry<String, g6.t.def.Table<String, Exception>.Entry<String, !|Exception|!>[]> tableOfEntryExceptionArray;@355] EXACT_MATCH"
1660 	);
1661 }
testTypeRefGenericAllG6_WildcardBounds()1662 public void testTypeRefGenericAllG6_WildcardBounds() throws CoreException {
1663 	IType type = getCompilationUnit("JavaSearch15/src/g6/t/ref/QualifMultiple.java").getType("QualifMultiple");
1664 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1665 	search("*", TYPE, FIELD_DECLARATION_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1666 	assertSearchResults(
1667 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryException [	!|g6.t.def.Table<String, Exception>.Entry|!<String, Exception> entryException;@49] EXACT_MATCH\n" +
1668 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.entryExceptionArray [	!|g6.t.def.Table<String, Exception>.Entry<String, Exception>[]|! entryExceptionArray;@125] EXACT_MATCH\n" +
1669 		"src/g6/t/ref/QualifMultiple.java g6.t.ref.QualifMultiple.tableOfEntryExceptionArray [	!|g6.t.def.Table<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]>.Entry|!<String, g6.t.def.Table<String, Exception>.Entry<String, Exception>[]> tableOfEntryExceptionArray;@208] EXACT_MATCH"
1670 	);
1671 }
testTypeRefGenericAllG6_TypeVariableBounds()1672 public void testTypeRefGenericAllG6_TypeVariableBounds() throws CoreException {
1673 	IType type = getCompilationUnit("JavaSearch15/src/g6/t/ref/QualifMultiple.java").getType("QualifMultiple");
1674 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1675 	search("*", TYPE, TYPE_VARIABLE_BOUND_TYPE_REFERENCE | WILDCARD_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1676 	assertSearchResults("");
1677 }
1678 /**
1679  * @bug 561268: [search] fine grained search for return type references should include generic methods
1680  * @test Ensure that generic methods are found when searching for return type fine grain references
1681  * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=561268"
1682  */
testBug561268()1683 public void testBug561268() throws CoreException {
1684 	IType type = getCompilationUnit("JavaSearch15/src/g7/a/ref/TestSearch.java").getType("TestSearch");
1685 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1686 	search("ISearchTest", TYPE, RETURN_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1687 	assertSearchResults(
1688 			"src/g7/a/ref/TestSearch.java ISearchTest<T> g7.a.ref.TestSearch.getSearchTestImpl() [	public static <T> !|ISearchTest|!<T> getSearchTestImpl() {@125] EXACT_MATCH\n" +
1689 			"src/g7/a/ref/TestSearch.java ISearchTest<Integer> g7.a.ref.TestSearch.getSearchTestImpl2() [	public static !|ISearchTest|!<Integer> getSearchTestImpl2() {@213] EXACT_MATCH");
1690 }
1691 
1692 // Additional tests
testTypeRefGenericsTest06_TypeArgument()1693 public void testTypeRefGenericsTest06_TypeArgument() throws CoreException {
1694 	this.workingCopies = new ICompilationUnit[1];
1695 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test06/Test.java",
1696 		"package test06;\n" +
1697 		"public class Test {\n" +
1698 		"	X<Exception> x; \n" +
1699 		"	Y<Object, String, Exception> y; \n" +
1700 		"}\n" +
1701 		"class X<T> {}\n" +
1702 		"class Y<R, S, T> {}\n"
1703 	);
1704 	IType type = this.workingCopies[0].getType("Test");
1705 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1706 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1707 	assertSearchResults(
1708 		"src/test06/Test.java test06.Test.x [	X<!|Exception|!> x; @39] EXACT_MATCH\n" +
1709 		"src/test06/Test.java test06.Test.y [	Y<!|Object|!, String, Exception> y; @57] EXACT_MATCH\n" +
1710 		"src/test06/Test.java test06.Test.y [	Y<Object, !|String|!, Exception> y; @65] EXACT_MATCH\n" +
1711 		"src/test06/Test.java test06.Test.y [	Y<Object, String, !|Exception|!> y; @73] EXACT_MATCH"
1712 	);
1713 }
testTypeRefGenericsTest07_TypeArgument()1714 public void testTypeRefGenericsTest07_TypeArgument() throws CoreException {
1715 	this.workingCopies = new ICompilationUnit[1];
1716 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test07/Test.java",
1717 		"package test07;\n" +
1718 		"public class Test {\n" +
1719 		"	Y<Y<Exception>> y1;\n" +
1720 		"	Y<X<Object, String, Exception>> y2;\n" +
1721 		"	X<Y<Object>, Y<String>, Y<Exception>> x1;\n" +
1722 		"	X<X<Object, Object, Object>, X<String, String, String>, X<Exception, Exception, Exception>> x2;\n" +
1723 		"}\n" +
1724 		"class X<R, S, T> {}\n" +
1725 		"class Y<U> {}"
1726 	);
1727 	IType type = this.workingCopies[0].getType("Test");
1728 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1729 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1730 	assertSearchResults(
1731 		"src/test07/Test.java test07.Test.y1 [	Y<!|Y|!<Exception>> y1;@39] EXACT_MATCH\n" +
1732 		"src/test07/Test.java test07.Test.y1 [	Y<Y<!|Exception|!>> y1;@41] EXACT_MATCH\n" +
1733 		"src/test07/Test.java test07.Test.y2 [	Y<!|X|!<Object, String, Exception>> y2;@60] EXACT_MATCH\n" +
1734 		"src/test07/Test.java test07.Test.y2 [	Y<X<!|Object|!, String, Exception>> y2;@62] EXACT_MATCH\n" +
1735 		"src/test07/Test.java test07.Test.y2 [	Y<X<Object, !|String|!, Exception>> y2;@70] EXACT_MATCH\n" +
1736 		"src/test07/Test.java test07.Test.y2 [	Y<X<Object, String, !|Exception|!>> y2;@78] EXACT_MATCH\n" +
1737 		"src/test07/Test.java test07.Test.x1 [	X<!|Y|!<Object>, Y<String>, Y<Exception>> x1;@97] EXACT_MATCH\n" +
1738 		"src/test07/Test.java test07.Test.x1 [	X<Y<!|Object|!>, Y<String>, Y<Exception>> x1;@99] EXACT_MATCH\n" +
1739 		"src/test07/Test.java test07.Test.x1 [	X<Y<Object>, !|Y|!<String>, Y<Exception>> x1;@108] EXACT_MATCH\n" +
1740 		"src/test07/Test.java test07.Test.x1 [	X<Y<Object>, Y<!|String|!>, Y<Exception>> x1;@110] EXACT_MATCH\n" +
1741 		"src/test07/Test.java test07.Test.x1 [	X<Y<Object>, Y<String>, !|Y|!<Exception>> x1;@119] EXACT_MATCH\n" +
1742 		"src/test07/Test.java test07.Test.x1 [	X<Y<Object>, Y<String>, Y<!|Exception|!>> x1;@121] EXACT_MATCH\n" +
1743 		"src/test07/Test.java test07.Test.x2 [	X<!|X|!<Object, Object, Object>, X<String, String, String>, X<Exception, Exception, Exception>> x2;@140] EXACT_MATCH\n" +
1744 		"src/test07/Test.java test07.Test.x2 [	X<X<!|Object|!, Object, Object>, X<String, String, String>, X<Exception, Exception, Exception>> x2;@142] EXACT_MATCH\n" +
1745 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, !|Object|!, Object>, X<String, String, String>, X<Exception, Exception, Exception>> x2;@150] EXACT_MATCH\n" +
1746 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, !|Object|!>, X<String, String, String>, X<Exception, Exception, Exception>> x2;@158] EXACT_MATCH\n" +
1747 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, !|X|!<String, String, String>, X<Exception, Exception, Exception>> x2;@167] EXACT_MATCH\n" +
1748 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<!|String|!, String, String>, X<Exception, Exception, Exception>> x2;@169] EXACT_MATCH\n" +
1749 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, !|String|!, String>, X<Exception, Exception, Exception>> x2;@177] EXACT_MATCH\n" +
1750 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, String, !|String|!>, X<Exception, Exception, Exception>> x2;@185] EXACT_MATCH\n" +
1751 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, String, String>, !|X|!<Exception, Exception, Exception>> x2;@194] EXACT_MATCH\n" +
1752 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, String, String>, X<!|Exception|!, Exception, Exception>> x2;@196] EXACT_MATCH\n" +
1753 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, String, String>, X<Exception, !|Exception|!, Exception>> x2;@207] EXACT_MATCH\n" +
1754 		"src/test07/Test.java test07.Test.x2 [	X<X<Object, Object, Object>, X<String, String, String>, X<Exception, Exception, !|Exception|!>> x2;@218] EXACT_MATCH"
1755 	);
1756 }
testTypeRefGenericsTest08_TypeArgument()1757 public void testTypeRefGenericsTest08_TypeArgument() throws CoreException {
1758 	this.workingCopies = new ICompilationUnit[1];
1759 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test08/Test.java",
1760 		"package test08;\n" +
1761 		"public class Test {\n" +
1762 		"	Z<\n" +
1763 		"		Y<X<Object>, X<String>, X<Exception>>,\n" +
1764 		"		X<Y<Object, String, X<Exception>>>,\n" +
1765 		"		Z<Object, X<String>, X<X<Exception>>, X<X<X<java.io.Serializable>>>>,\n" +
1766 		"		X<X<X<X<String>>>>> z;\n" +
1767 		"}\n" +
1768 		"class X<R> {}\n" +
1769 		"class Y<S, T, U> {}\n" +
1770 		"class Z<A, B, C, D> {}\n"
1771 	);
1772 	IType type = this.workingCopies[0].getType("Test");
1773 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1774 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1775 	assertSearchResults(
1776 		"src/test08/Test.java test08.Test.z [		!|Y|!<X<Object>, X<String>, X<Exception>>,@42] EXACT_MATCH\n" +
1777 		"src/test08/Test.java test08.Test.z [		Y<!|X|!<Object>, X<String>, X<Exception>>,@44] EXACT_MATCH\n" +
1778 		"src/test08/Test.java test08.Test.z [		Y<X<!|Object|!>, X<String>, X<Exception>>,@46] EXACT_MATCH\n" +
1779 		"src/test08/Test.java test08.Test.z [		Y<X<Object>, !|X|!<String>, X<Exception>>,@55] EXACT_MATCH\n" +
1780 		"src/test08/Test.java test08.Test.z [		Y<X<Object>, X<!|String|!>, X<Exception>>,@57] EXACT_MATCH\n" +
1781 		"src/test08/Test.java test08.Test.z [		Y<X<Object>, X<String>, !|X|!<Exception>>,@66] EXACT_MATCH\n" +
1782 		"src/test08/Test.java test08.Test.z [		Y<X<Object>, X<String>, X<!|Exception|!>>,@68] EXACT_MATCH\n" +
1783 		"src/test08/Test.java test08.Test.z [		!|X|!<Y<Object, String, X<Exception>>>,@83] EXACT_MATCH\n" +
1784 		"src/test08/Test.java test08.Test.z [		X<!|Y|!<Object, String, X<Exception>>>,@85] EXACT_MATCH\n" +
1785 		"src/test08/Test.java test08.Test.z [		X<Y<!|Object|!, String, X<Exception>>>,@87] EXACT_MATCH\n" +
1786 		"src/test08/Test.java test08.Test.z [		X<Y<Object, !|String|!, X<Exception>>>,@95] EXACT_MATCH\n" +
1787 		"src/test08/Test.java test08.Test.z [		X<Y<Object, String, !|X|!<Exception>>>,@103] EXACT_MATCH\n" +
1788 		"src/test08/Test.java test08.Test.z [		X<Y<Object, String, X<!|Exception|!>>>,@105] EXACT_MATCH\n" +
1789 		"src/test08/Test.java test08.Test.z [		!|Z|!<Object, X<String>, X<X<Exception>>, X<X<X<java.io.Serializable>>>>,@121] EXACT_MATCH\n" +
1790 		"src/test08/Test.java test08.Test.z [		Z<!|Object|!, X<String>, X<X<Exception>>, X<X<X<java.io.Serializable>>>>,@123] EXACT_MATCH\n" +
1791 		"src/test08/Test.java test08.Test.z [		Z<Object, !|X|!<String>, X<X<Exception>>, X<X<X<java.io.Serializable>>>>,@131] EXACT_MATCH\n" +
1792 		"src/test08/Test.java test08.Test.z [		Z<Object, X<!|String|!>, X<X<Exception>>, X<X<X<java.io.Serializable>>>>,@133] EXACT_MATCH\n" +
1793 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, !|X|!<X<Exception>>, X<X<X<java.io.Serializable>>>>,@142] EXACT_MATCH\n" +
1794 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<!|X|!<Exception>>, X<X<X<java.io.Serializable>>>>,@144] EXACT_MATCH\n" +
1795 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<X<!|Exception|!>>, X<X<X<java.io.Serializable>>>>,@146] EXACT_MATCH\n" +
1796 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<X<Exception>>, !|X|!<X<X<java.io.Serializable>>>>,@159] EXACT_MATCH\n" +
1797 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<X<Exception>>, X<!|X|!<X<java.io.Serializable>>>>,@161] EXACT_MATCH\n" +
1798 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<X<Exception>>, X<X<!|X|!<java.io.Serializable>>>>,@163] EXACT_MATCH\n" +
1799 		"src/test08/Test.java test08.Test.z [		Z<Object, X<String>, X<X<Exception>>, X<X<X<!|java.io.Serializable|!>>>>,@165] EXACT_MATCH\n" +
1800 		"src/test08/Test.java test08.Test.z [		!|X|!<X<X<X<String>>>>> z;@193] EXACT_MATCH\n" +
1801 		"src/test08/Test.java test08.Test.z [		X<!|X|!<X<X<String>>>>> z;@195] EXACT_MATCH\n" +
1802 		"src/test08/Test.java test08.Test.z [		X<X<!|X|!<X<String>>>>> z;@197] EXACT_MATCH\n" +
1803 		"src/test08/Test.java test08.Test.z [		X<X<X<!|X|!<String>>>>> z;@199] EXACT_MATCH\n" +
1804 		"src/test08/Test.java test08.Test.z [		X<X<X<X<!|String|!>>>>> z;@201] EXACT_MATCH"
1805 	);
1806 }
testTypeRefGenericsTest09_TypeArgument()1807 public void testTypeRefGenericsTest09_TypeArgument() throws CoreException {
1808 	this.workingCopies = new ICompilationUnit[1];
1809 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test09/Test.java",
1810 		"package test09;\n" +
1811 		"public class Test {\n" +
1812 		"	X<? extends Exception> x; \n" +
1813 		"	Y<? extends Object, ? super String, ? extends Exception> y; \n" +
1814 		"}\n" +
1815 		"class X< R> {}\n" +
1816 		"class Y<S, T, U> {}\n"
1817 	);
1818 	IType type = this.workingCopies[0].getType("Test");
1819 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1820 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE | TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1821 	assertSearchResults(
1822 		"src/test09/Test.java test09.Test.x [	X<? extends !|Exception|!> x; @49] EXACT_MATCH\n" +
1823 		"src/test09/Test.java test09.Test.y [	Y<? extends !|Object|!, ? super String, ? extends Exception> y; @77] EXACT_MATCH\n" +
1824 		"src/test09/Test.java test09.Test.y [	Y<? extends Object, ? super !|String|!, ? extends Exception> y; @93] EXACT_MATCH\n" +
1825 		"src/test09/Test.java test09.Test.y [	Y<? extends Object, ? super String, ? extends !|Exception|!> y; @111] EXACT_MATCH"
1826 	);
1827 }
testTypeRefGenericsTest10_TypeArgument()1828 public void testTypeRefGenericsTest10_TypeArgument() throws CoreException {
1829 	this.workingCopies = new ICompilationUnit[1];
1830 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test10/Test.java",
1831 		"package test10;\n" +
1832 		"public class Test {\n" +
1833 		"	Y<Y<? extends Exception>> y1;\n" +
1834 		"	Y<X<? extends Object, ? super String, ? extends Exception>> y2;\n" +
1835 		"	X<Y<? super Object>, Y<? extends String>, Y<? super Exception>> x1;\n" +
1836 		"	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;\n" +
1837 		"}\n" +
1838 		"class X<R, S, T> {}\n" +
1839 		"class Y<U> {}"
1840 	);
1841 	IType type = this.workingCopies[0].getType("Test");
1842 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1843 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1844 	assertSearchResults(
1845 		"src/test10/Test.java test10.Test.y1 [	Y<!|Y|!<? extends Exception>> y1;@39] EXACT_MATCH\n" +
1846 		"src/test10/Test.java test10.Test.y2 [	Y<!|X|!<? extends Object, ? super String, ? extends Exception>> y2;@70] EXACT_MATCH\n" +
1847 		"src/test10/Test.java test10.Test.x1 [	X<!|Y|!<? super Object>, Y<? extends String>, Y<? super Exception>> x1;@135] EXACT_MATCH\n" +
1848 		"src/test10/Test.java test10.Test.x1 [	X<Y<? super Object>, !|Y|!<? extends String>, Y<? super Exception>> x1;@154] EXACT_MATCH\n" +
1849 		"src/test10/Test.java test10.Test.x1 [	X<Y<? super Object>, Y<? extends String>, !|Y|!<? super Exception>> x1;@175] EXACT_MATCH\n" +
1850 		"src/test10/Test.java test10.Test.x2 [	X<!|X|!<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@204] EXACT_MATCH\n" +
1851 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, !|X|!<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@261] EXACT_MATCH\n" +
1852 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, !|X|!<? extends Exception, ? super Exception, ? extends Exception>> x2;@312] EXACT_MATCH"
1853 	);
1854 }
testTypeRefGenericsTest10_WildcardBound()1855 public void testTypeRefGenericsTest10_WildcardBound() throws CoreException {
1856 	this.workingCopies = new ICompilationUnit[1];
1857 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test10/Test.java",
1858 		"package test10;\n" +
1859 		"public class Test {\n" +
1860 		"	Y<Y<? extends Exception>> y1;\n" +
1861 		"	Y<X<? extends Object, ? super String, ? extends Exception>> y2;\n" +
1862 		"	X<Y<? super Object>, Y<? extends String>, Y<? super Exception>> x1;\n" +
1863 		"	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;\n" +
1864 		"}\n" +
1865 		"class X<R, S, T> {}\n" +
1866 		"class Y<U> {}"
1867 	);
1868 	IType type = this.workingCopies[0].getType("Test");
1869 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1870 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1871 	assertSearchResults(
1872 		"src/test10/Test.java test10.Test.y1 [	Y<Y<? extends !|Exception|!>> y1;@51] EXACT_MATCH\n" +
1873 		"src/test10/Test.java test10.Test.y2 [	Y<X<? extends !|Object|!, ? super String, ? extends Exception>> y2;@82] EXACT_MATCH\n" +
1874 		"src/test10/Test.java test10.Test.y2 [	Y<X<? extends Object, ? super !|String|!, ? extends Exception>> y2;@98] EXACT_MATCH\n" +
1875 		"src/test10/Test.java test10.Test.y2 [	Y<X<? extends Object, ? super String, ? extends !|Exception|!>> y2;@116] EXACT_MATCH\n" +
1876 		"src/test10/Test.java test10.Test.x1 [	X<Y<? super !|Object|!>, Y<? extends String>, Y<? super Exception>> x1;@145] EXACT_MATCH\n" +
1877 		"src/test10/Test.java test10.Test.x1 [	X<Y<? super Object>, Y<? extends !|String|!>, Y<? super Exception>> x1;@166] EXACT_MATCH\n" +
1878 		"src/test10/Test.java test10.Test.x1 [	X<Y<? super Object>, Y<? extends String>, Y<? super !|Exception|!>> x1;@185] EXACT_MATCH\n" +
1879 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends !|Object|!, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@216] EXACT_MATCH\n" +
1880 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends !|Object|!, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@234] EXACT_MATCH\n" +
1881 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends !|Object|!>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@252] EXACT_MATCH\n" +
1882 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super !|String|!, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@271] EXACT_MATCH\n" +
1883 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super !|String|!, ? super String>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@287] EXACT_MATCH\n" +
1884 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super !|String|!>, X<? extends Exception, ? super Exception, ? extends Exception>> x2;@303] EXACT_MATCH\n" +
1885 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends !|Exception|!, ? super Exception, ? extends Exception>> x2;@324] EXACT_MATCH\n" +
1886 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super !|Exception|!, ? extends Exception>> x2;@343] EXACT_MATCH\n" +
1887 		"src/test10/Test.java test10.Test.x2 [	X<X<? extends Object, ? extends Object, ? extends Object>, X<? super String, ? super String, ? super String>, X<? extends Exception, ? super Exception, ? extends !|Exception|!>> x2;@364] EXACT_MATCH"
1888 	);
1889 }
testTypeRefGenericsTest11_TypeArgument()1890 public void testTypeRefGenericsTest11_TypeArgument() throws CoreException {
1891 	this.workingCopies = new ICompilationUnit[1];
1892 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test11/Test.java",
1893 		"package test11;\n" +
1894 		"public class Test {\n" +
1895 		"	Z<\n" +
1896 		"		Y<X<? extends Object>, X<? super String>, X<? extends Exception>>,\n" +
1897 		"		X<Y<? extends Object, ? super String, X<? extends Exception>>>,\n" +
1898 		"		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,\n" +
1899 		"		X<X<X<X<? super String>>>>> z;\n" +
1900 		"}\n" +
1901 		"class X<R> {}\n" +
1902 		"class Y<S, T, U> {}\n" +
1903 		"class Z<A, B, C, D> {}\n"
1904 	);
1905 	IType type = this.workingCopies[0].getType("Test");
1906 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1907 	search("*", TYPE, TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1908 	assertSearchResults(
1909 		"src/test11/Test.java test11.Test.z [		!|Y|!<X<? extends Object>, X<? super String>, X<? extends Exception>>,@42] EXACT_MATCH\n" +
1910 		"src/test11/Test.java test11.Test.z [		Y<!|X|!<? extends Object>, X<? super String>, X<? extends Exception>>,@44] EXACT_MATCH\n" +
1911 		"src/test11/Test.java test11.Test.z [		Y<X<? extends Object>, !|X|!<? super String>, X<? extends Exception>>,@65] EXACT_MATCH\n" +
1912 		"src/test11/Test.java test11.Test.z [		Y<X<? extends Object>, X<? super String>, !|X|!<? extends Exception>>,@84] EXACT_MATCH\n" +
1913 		"src/test11/Test.java test11.Test.z [		!|X|!<Y<? extends Object, ? super String, X<? extends Exception>>>,@111] EXACT_MATCH\n" +
1914 		"src/test11/Test.java test11.Test.z [		X<!|Y|!<? extends Object, ? super String, X<? extends Exception>>>,@113] EXACT_MATCH\n" +
1915 		"src/test11/Test.java test11.Test.z [		X<Y<? extends Object, ? super String, !|X|!<? extends Exception>>>,@149] EXACT_MATCH\n" +
1916 		"src/test11/Test.java test11.Test.z [		!|Z|!<? extends Object, X<? super String>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@177] EXACT_MATCH\n" +
1917 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, !|X|!<? super String>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@197] EXACT_MATCH\n" +
1918 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, !|X|!<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@216] EXACT_MATCH\n" +
1919 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<!|X|!<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@218] EXACT_MATCH\n" +
1920 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, !|X|!<X<X<? extends java.io.Serializable>>>>,@243] EXACT_MATCH\n" +
1921 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, X<!|X|!<X<? extends java.io.Serializable>>>>,@245] EXACT_MATCH\n" +
1922 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, X<X<!|X|!<? extends java.io.Serializable>>>>,@247] EXACT_MATCH\n" +
1923 		"src/test11/Test.java test11.Test.z [		!|X|!<X<X<X<? super String>>>>> z;@287] EXACT_MATCH\n" +
1924 		"src/test11/Test.java test11.Test.z [		X<!|X|!<X<X<? super String>>>>> z;@289] EXACT_MATCH\n" +
1925 		"src/test11/Test.java test11.Test.z [		X<X<!|X|!<X<? super String>>>>> z;@291] EXACT_MATCH\n" +
1926 		"src/test11/Test.java test11.Test.z [		X<X<X<!|X|!<? super String>>>>> z;@293] EXACT_MATCH"
1927 	);
1928 }
testTypeRefGenericsTest11_WildcardBound()1929 public void testTypeRefGenericsTest11_WildcardBound() throws CoreException {
1930 	this.workingCopies = new ICompilationUnit[1];
1931 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test11/Test.java",
1932 		"package test11;\n" +
1933 		"public class Test {\n" +
1934 		"	Z<\n" +
1935 		"		Y<X<? extends Object>, X<? super String>, X<? extends Exception>>,\n" +
1936 		"		X<Y<? extends Object, ? super String, X<? extends Exception>>>,\n" +
1937 		"		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,\n" +
1938 		"		X<X<X<X<? super String>>>>> z;\n" +
1939 		"}\n" +
1940 		"class X<R> {}\n" +
1941 		"class Y<S, T, U> {}\n" +
1942 		"class Z<A, B, C, D> {}\n"
1943 	);
1944 	IType type = this.workingCopies[0].getType("Test");
1945 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1946 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1947 	assertSearchResults(
1948 		"src/test11/Test.java test11.Test.z [		Y<X<? extends !|Object|!>, X<? super String>, X<? extends Exception>>,@56] EXACT_MATCH\n" +
1949 		"src/test11/Test.java test11.Test.z [		Y<X<? extends Object>, X<? super !|String|!>, X<? extends Exception>>,@75] EXACT_MATCH\n" +
1950 		"src/test11/Test.java test11.Test.z [		Y<X<? extends Object>, X<? super String>, X<? extends !|Exception|!>>,@96] EXACT_MATCH\n" +
1951 		"src/test11/Test.java test11.Test.z [		X<Y<? extends !|Object|!, ? super String, X<? extends Exception>>>,@125] EXACT_MATCH\n" +
1952 		"src/test11/Test.java test11.Test.z [		X<Y<? extends Object, ? super !|String|!, X<? extends Exception>>>,@141] EXACT_MATCH\n" +
1953 		"src/test11/Test.java test11.Test.z [		X<Y<? extends Object, ? super String, X<? extends !|Exception|!>>>,@161] EXACT_MATCH\n" +
1954 		"src/test11/Test.java test11.Test.z [		Z<? extends !|Object|!, X<? super String>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@189] EXACT_MATCH\n" +
1955 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super !|String|!>, X<X<? extends Exception>>, X<X<X<? extends java.io.Serializable>>>>,@207] EXACT_MATCH\n" +
1956 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<X<? extends !|Exception|!>>, X<X<X<? extends java.io.Serializable>>>>,@230] EXACT_MATCH\n" +
1957 		"src/test11/Test.java test11.Test.z [		Z<? extends Object, X<? super String>, X<X<? extends Exception>>, X<X<X<? extends !|java.io.Serializable|!>>>>,@259] EXACT_MATCH\n" +
1958 		"src/test11/Test.java test11.Test.z [		X<X<X<X<? super !|String|!>>>>> z;@303] EXACT_MATCH"
1959 	);
1960 }
testTypeRefGenericsTest12_TypeArgument()1961 public void testTypeRefGenericsTest12_TypeArgument() throws CoreException {
1962 	this.workingCopies = new ICompilationUnit[1];
1963 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test12/Test.java",
1964 		"package test12;\n" +
1965 		"public class Test extends S<Exception> {\n" +
1966 		"	void foo(Test test) {\n" +
1967 		"		this.<Exception>foo(null);\n" +
1968 		"		super.<Exception>foo(null);\n" +
1969 		"		foo(null);\n" +
1970 		"		test.<RuntimeException>foo(null);\n" +
1971 		"	}\n" +
1972 		"	void bar(Test test) {\n" +
1973 		"		this.<Object, RuntimeException, Test>bar(null);\n" +
1974 		"		super.<Object, RuntimeException, Test>bar(null);\n" +
1975 		"		bar(null);\n" +
1976 		"		test.<Object, RuntimeException, Test>bar(null);\n" +
1977 		"	}\n" +
1978 		"}\n" +
1979 		"class S<R> {\n" +
1980 		"	<T> T foo(T t) { return t; }\n" +
1981 		"	<T, U extends Exception, V extends S<R>>void bar(S s) {}\n" +
1982 		"}\n" +
1983 		"class X<T> {}\n"
1984 	);
1985 	IType type = this.workingCopies[0].getType("Test");
1986 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
1987 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE | TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
1988 	assertSearchResults(
1989 		"src/test12/Test.java test12.Test [public class Test extends S<!|Exception|!> {@44] EXACT_MATCH\n" +
1990 		"src/test12/Test.java void test12.Test.foo(Test) [		this.<!|Exception|!>foo(null);@88] EXACT_MATCH\n" +
1991 		"src/test12/Test.java void test12.Test.foo(Test) [		super.<!|Exception|!>foo(null);@118] EXACT_MATCH\n" +
1992 		"src/test12/Test.java void test12.Test.foo(Test) [		test.<!|RuntimeException|!>foo(null);@160] EXACT_MATCH\n" +
1993 		"src/test12/Test.java void test12.Test.bar(Test) [		this.<!|Object|!, RuntimeException, Test>bar(null);@222] EXACT_MATCH\n" +
1994 		"src/test12/Test.java void test12.Test.bar(Test) [		this.<Object, !|RuntimeException|!, Test>bar(null);@230] EXACT_MATCH\n" +
1995 		"src/test12/Test.java void test12.Test.bar(Test) [		this.<Object, RuntimeException, !|Test|!>bar(null);@248] EXACT_MATCH\n" +
1996 		"src/test12/Test.java void test12.Test.bar(Test) [		super.<!|Object|!, RuntimeException, Test>bar(null);@273] EXACT_MATCH\n" +
1997 		"src/test12/Test.java void test12.Test.bar(Test) [		super.<Object, !|RuntimeException|!, Test>bar(null);@281] EXACT_MATCH\n" +
1998 		"src/test12/Test.java void test12.Test.bar(Test) [		super.<Object, RuntimeException, !|Test|!>bar(null);@299] EXACT_MATCH\n" +
1999 		"src/test12/Test.java void test12.Test.bar(Test) [		test.<!|Object|!, RuntimeException, Test>bar(null);@336] EXACT_MATCH\n" +
2000 		"src/test12/Test.java void test12.Test.bar(Test) [		test.<Object, !|RuntimeException|!, Test>bar(null);@344] EXACT_MATCH\n" +
2001 		"src/test12/Test.java void test12.Test.bar(Test) [		test.<Object, RuntimeException, !|Test|!>bar(null);@362] EXACT_MATCH\n" +
2002 		"src/test12/Test.java void test12.S.bar(S) [	<T, U extends Exception, V extends S<!|R|!>>void bar(S s) {}@464] EXACT_MATCH"
2003 	);
2004 }
testTypeRefGenericsTest13_TypeArgument()2005 public void testTypeRefGenericsTest13_TypeArgument() throws CoreException {
2006 	this.workingCopies = new ICompilationUnit[1];
2007 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test13/Test.java",
2008 		"package test13;\n" +
2009 		"public class Test<T> extends S<Exception> {\n" +
2010 		"	void foo(Test<Exception> test) {\n" +
2011 		"		this.<X<Exception>>foo(null);\n" +
2012 		"		super.<X<X<Exception>>>foo(null);\n" +
2013 		"		foo(null);\n" +
2014 		"		test.<X<X<X<RuntimeException>>>>foo(null);\n" +
2015 		"	}\n" +
2016 		"	void fred(Test<String> test) {\n" +
2017 		"		this.<X<Object>, Exception, Test<Exception>>bar(null);\n" +
2018 		"		super.<X<X<Object>>, RuntimeException, Test<X<Exception>>>bar(null);\n" +
2019 		"		bar(null);\n" +
2020 		"		test.<X<X<X<Object>>>, RuntimeException, Test<X<X<Exception>>>>bar(null);\n" +
2021 		"	}\n" +
2022 		"}\n" +
2023 		"class S<R> {\n" +
2024 		"	<T> T foo(T t) { return t; }\n" +
2025 		"	<T, U extends Exception, V extends S<R>>void bar(S s) {}\n" +
2026 		"}\n" +
2027 		"class X<T> {}\n"
2028 	);
2029 	IType type = this.workingCopies[0].getType("Test");
2030 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
2031 	search("*", TYPE, WILDCARD_BOUND_TYPE_REFERENCE | TYPE_ARGUMENT_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
2032 	assertSearchResults(
2033 		"src/test13/Test.java test13.Test [public class Test<T> extends S<!|Exception|!> {@47] EXACT_MATCH\n" +
2034 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [	void foo(Test<!|Exception|!> test) {@75] EXACT_MATCH\n" +
2035 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		this.<!|X|!<Exception>>foo(null);@102] EXACT_MATCH\n" +
2036 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		this.<X<!|Exception|!>>foo(null);@104] EXACT_MATCH\n" +
2037 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		super.<!|X|!<X<Exception>>>foo(null);@135] EXACT_MATCH\n" +
2038 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		super.<X<!|X|!<Exception>>>foo(null);@137] EXACT_MATCH\n" +
2039 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		super.<X<X<!|Exception|!>>>foo(null);@139] EXACT_MATCH\n" +
2040 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		test.<!|X|!<X<X<RuntimeException>>>>foo(null);@183] EXACT_MATCH\n" +
2041 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		test.<X<!|X|!<X<RuntimeException>>>>foo(null);@185] EXACT_MATCH\n" +
2042 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		test.<X<X<!|X|!<RuntimeException>>>>foo(null);@187] EXACT_MATCH\n" +
2043 		"src/test13/Test.java void test13.Test.foo(Test<Exception>) [		test.<X<X<X<!|RuntimeException|!>>>>foo(null);@189] EXACT_MATCH\n" +
2044 		"src/test13/Test.java void test13.Test.fred(Test<String>) [	void fred(Test<!|String|!> test) {@239] EXACT_MATCH\n" +
2045 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		this.<!|X|!<Object>, Exception, Test<Exception>>bar(null);@263] EXACT_MATCH\n" +
2046 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		this.<X<!|Object|!>, Exception, Test<Exception>>bar(null);@265] EXACT_MATCH\n" +
2047 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		this.<X<Object>, !|Exception|!, Test<Exception>>bar(null);@274] EXACT_MATCH\n" +
2048 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		this.<X<Object>, Exception, !|Test|!<Exception>>bar(null);@285] EXACT_MATCH\n" +
2049 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		this.<X<Object>, Exception, Test<!|Exception|!>>bar(null);@290] EXACT_MATCH\n" +
2050 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<!|X|!<X<Object>>, RuntimeException, Test<X<Exception>>>bar(null);@321] EXACT_MATCH\n" +
2051 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<!|X|!<Object>>, RuntimeException, Test<X<Exception>>>bar(null);@323] EXACT_MATCH\n" +
2052 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<X<!|Object|!>>, RuntimeException, Test<X<Exception>>>bar(null);@325] EXACT_MATCH\n" +
2053 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<X<Object>>, !|RuntimeException|!, Test<X<Exception>>>bar(null);@335] EXACT_MATCH\n" +
2054 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<X<Object>>, RuntimeException, !|Test|!<X<Exception>>>bar(null);@353] EXACT_MATCH\n" +
2055 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<X<Object>>, RuntimeException, Test<!|X|!<Exception>>>bar(null);@358] EXACT_MATCH\n" +
2056 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		super.<X<X<Object>>, RuntimeException, Test<X<!|Exception|!>>>bar(null);@360] EXACT_MATCH\n" +
2057 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<!|X|!<X<X<Object>>>, RuntimeException, Test<X<X<Exception>>>>bar(null);@404] EXACT_MATCH\n" +
2058 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<!|X|!<X<Object>>>, RuntimeException, Test<X<X<Exception>>>>bar(null);@406] EXACT_MATCH\n" +
2059 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<!|X|!<Object>>>, RuntimeException, Test<X<X<Exception>>>>bar(null);@408] EXACT_MATCH\n" +
2060 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<!|Object|!>>>, RuntimeException, Test<X<X<Exception>>>>bar(null);@410] EXACT_MATCH\n" +
2061 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<Object>>>, !|RuntimeException|!, Test<X<X<Exception>>>>bar(null);@421] EXACT_MATCH\n" +
2062 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<Object>>>, RuntimeException, !|Test|!<X<X<Exception>>>>bar(null);@439] EXACT_MATCH\n" +
2063 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<Object>>>, RuntimeException, Test<!|X|!<X<Exception>>>>bar(null);@444] EXACT_MATCH\n" +
2064 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<Object>>>, RuntimeException, Test<X<!|X|!<Exception>>>>bar(null);@446] EXACT_MATCH\n" +
2065 		"src/test13/Test.java void test13.Test.fred(Test<String>) [		test.<X<X<X<Object>>>, RuntimeException, Test<X<X<!|Exception|!>>>>bar(null);@448] EXACT_MATCH\n" +
2066 		"src/test13/Test.java void test13.S.bar(S) [	<T, U extends Exception, V extends S<!|R|!>>void bar(S s) {}@558] EXACT_MATCH"
2067 	);
2068 }
testTypeRefGenericsTest15_ClassInstanceCreation()2069 public void testTypeRefGenericsTest15_ClassInstanceCreation() throws CoreException {
2070 	this.workingCopies = new ICompilationUnit[1];
2071 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/test15/Test.java",
2072 		"package test15;\n" +
2073 		"public class Test {\n" +
2074 		"	Test() {}\n" +
2075 		"	<U> Test(U u) {}\n" +
2076 		"	static Test foo() {\n" +
2077 		"		return new <String> Test(\"\");\n" +
2078 		"	}\n" +
2079 		"	static Test bar()  {\n" +
2080 		"		return new Test();\n" +
2081 		"	}\n" +
2082 		"}\n"
2083 	);
2084 	IType type = this.workingCopies[0].getType("Test");
2085 	IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { type });
2086 	search("*", TYPE, CLASS_INSTANCE_CREATION_TYPE_REFERENCE, SearchPattern.R_ERASURE_MATCH, scope);
2087 	assertSearchResults(
2088 		"src/test15/Test.java Test test15.Test.foo() [		return new <String> !|Test|!(\"\");@108] EXACT_MATCH\n" +
2089 		"src/test15/Test.java Test test15.Test.bar() [		return new !|Test|!();@156] EXACT_MATCH"
2090 	);
2091 }
2092 
2093 /**
2094  * @bug 212599: [search] fine grained search must not report matches in Javadoc
2095  * @test Ensure that fine grain references are not found in javadoc
2096  * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=212599"
2097  */
testBug212599()2098 public void testBug212599() throws CoreException {
2099 	this.workingCopies = new ICompilationUnit[2];
2100 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/Ref.java",
2101 		"public class Ref {\n" +
2102 		"	public int field;\n" +
2103 		"	public Ref foo() {\n" +
2104 		"		return null;\n" +
2105 		"	}\n" +
2106 		"}\n"
2107 	);
2108 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/Test.java",
2109 		"/**\n" +
2110 		" * @see Ref\n" +
2111 		" */\n" +
2112 		"public class Test {\n" +
2113 		"	Ref test;\n" +
2114 		"	/**\n" +
2115 		"	 * @see Ref#field\n" +
2116 		"	 * @see Ref#foo()\n" +
2117 		"	 */\n" +
2118 		"	Ref bar() {\n" +
2119 		"		if (this.test != null) {\n" +
2120 		"			if (this.test.field > 0) {\n" +
2121 		"				return this.test;\n" +
2122 		"			}\n" +
2123 		"			return new Ref();\n" +
2124 		"		}\n" +
2125 		"		return null;\n" +
2126 		"	}\n" +
2127 		"}\n"
2128 	);
2129 	IType type = this.workingCopies[0].getType("Ref");
2130 	search(type, RETURN_TYPE_REFERENCE, getJavaSearchWorkingCopiesScope());
2131 	assertSearchResults(
2132 		"src/Ref.java Ref Ref.foo() [	public !|Ref|! foo() {@46] EXACT_MATCH\n" +
2133 		"src/Test.java Ref Test.bar() [	!|Ref|! bar() {@100] EXACT_MATCH"
2134 	);
2135 }
testBug212599_all()2136 public void testBug212599_all() throws CoreException {
2137 	this.workingCopies = new ICompilationUnit[2];
2138 	this.workingCopies[0] = getWorkingCopy("/JavaSearch15/src/Ref.java",
2139 		"public class Ref {\n" +
2140 		"	public int field;\n" +
2141 		"	public Ref foo() {\n" +
2142 		"		return null;\n" +
2143 		"	}\n" +
2144 		"}\n"
2145 	);
2146 	this.workingCopies[1] = getWorkingCopy("/JavaSearch15/src/Test.java",
2147 		"/**\n" +
2148 		" * @see Ref\n" +
2149 		" */\n" +
2150 		"public class Test {\n" +
2151 		"	Ref test;\n" +
2152 		"	/**\n" +
2153 		"	 * @see Ref#field\n" +
2154 		"	 * @see Ref#foo()\n" +
2155 		"	 */\n" +
2156 		"	Ref bar() {\n" +
2157 		"		if (this.test != null) {\n" +
2158 		"			if (this.test.field > 0) {\n" +
2159 		"				return this.test;\n" +
2160 		"			}\n" +
2161 		"			return new Ref();\n" +
2162 		"		}\n" +
2163 		"		return null;\n" +
2164 		"	}\n" +
2165 		"}\n"
2166 	);
2167 	IType type = this.workingCopies[0].getType("Ref");
2168 	search(type, ALL_TYPE_FINE_GRAIN_FLAGS, getJavaSearchWorkingCopiesScope());
2169 	assertSearchResults(
2170 		"src/Ref.java Ref Ref.foo() [	public !|Ref|! foo() {@46] EXACT_MATCH\n" +
2171 		"src/Test.java Test.test [	!|Ref|! test;@41] EXACT_MATCH\n" +
2172 		"src/Test.java Ref Test.bar() [	!|Ref|! bar() {@100] EXACT_MATCH\n" +
2173 		"src/Test.java Ref Test.bar() [			return new !|Ref|!();@210] EXACT_MATCH"
2174 	);
2175 }
2176 }
2177