1 /******************************************************************************* 2 * Copyright (c) 2000, 2009 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.*; 21 22 /** 23 * Test for generic methods search using R_ERASURE_MATCH rule. 24 */ 25 public class JavaSearchGenericMethodTests extends AbstractJavaSearchGenericTests { 26 JavaSearchGenericMethodTests(String name)27 public JavaSearchGenericMethodTests(String name) { 28 super(name, ERASURE_RULE); 29 } 30 // defined for sub-classes JavaSearchGenericMethodTests(String name, int matchRule)31 JavaSearchGenericMethodTests(String name, int matchRule) { 32 super(name, matchRule); 33 } suite()34 public static Test suite() { 35 return buildModelTestSuite(JavaSearchGenericMethodTests.class); 36 } 37 // Use this static initializer to specify subset for tests 38 // All specified tests which do not belong to the class are skipped... 39 static { 40 // TESTS_PREFIX = "testMethodReferencesElementPatternSingleParamArguments"; 41 // TESTS_NAMES = new String[] { "testMethodReferencesElementPatternMultipleParamArguments04" }; 42 // TESTS_NUMBERS = new int[] { 8 }; 43 // TESTS_RANGE = new int[] { -1, -1 }; 44 } 45 46 /* 47 * Remove last type arguments from a line of an expected result. 48 * This line contains one search match print out. 49 */ removeFirstTypeArgument(char[] line)50 long removeFirstTypeArgument(char[] line) { 51 int idx=0; 52 int length = line.length; 53 while (line[idx++] != '[') { 54 if (idx == length) return -1; 55 } 56 if (line[idx++] != '<') return -1; 57 int start = idx; 58 int n = 1; 59 while(idx < length && n!= 0) { 60 switch (line[idx++]) { 61 case '<': n++; break; 62 case '>': n--; break; 63 } 64 } 65 if (n!= 0) { 66 // something wrong here... 67 return -1; 68 } 69 return ((long)start<<32) + idx; 70 } 71 72 @Override addResultLine(StringBuffer buffer, char[] line)73 void addResultLine(StringBuffer buffer, char[] line) { 74 long positions = removeFirstTypeArgument(line); 75 if (buffer.length() > 0) buffer.append('\n'); 76 if (positions != -1) { 77 int stop = (int) (positions >>> 32) - 1; 78 int restart = (int) positions; 79 buffer.append(line, 0, stop); 80 buffer.append(line, restart, line.length-restart); 81 } else { 82 buffer.append(line); 83 } 84 } 85 86 /** 87 * Bug 75642: [1.5][search] Methods and constructor search does not work with generics 88 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=75642" 89 */ 90 /* 91 * REFERENCES 92 */ 93 // Search references to methods defined in a single type parameter class testMethodReferencesElementPatternSingleTypeParameter01()94 public void testMethodReferencesElementPatternSingleTypeParameter01() throws CoreException { 95 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Single.java").getType("Single"); 96 // search reference to a standard method 97 IMethod method = type.getMethod("standard", new String[] { "QT;" }); 98 IJavaSearchScope scope = getJavaSearchScope15(); 99 search(method, REFERENCES, scope, this.resultCollector); 100 assertSearchResults( 101 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [standard(new Exception())] ERASURE_RAW_MATCH\n" + 102 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [standard(new Object())] ERASURE_MATCH\n" + 103 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [standard(new Exception())] ERASURE_MATCH\n" + 104 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [standard(new RuntimeException())] ERASURE_MATCH" 105 ); 106 } testMethodReferencesElementPatternSingleTypeParameter02()107 public void testMethodReferencesElementPatternSingleTypeParameter02() throws CoreException { 108 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Single.java").getType("Single"); 109 // search reference to a generic method 110 IMethod method = type.getMethod("generic", new String[] { "QU;" }); 111 IJavaSearchScope scope = getJavaSearchScope15(); 112 search(method, REFERENCES, scope, this.resultCollector); 113 assertSearchResults( 114 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] ERASURE_RAW_MATCH\n" + 115 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] ERASURE_MATCH\n" + 116 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] ERASURE_MATCH\n" + 117 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] ERASURE_MATCH" 118 ); 119 } testMethodReferencesElementPatternSingleTypeParameter03()120 public void testMethodReferencesElementPatternSingleTypeParameter03() throws CoreException { 121 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Single.java").getType("Single"); 122 // search reference to a method returning a parameterized type 123 IMethod method = type.getMethod("returnParamType", new String[] {}); 124 IJavaSearchScope scope = getJavaSearchScope15(); 125 search(method, REFERENCES, scope, this.resultCollector); 126 assertSearchResults( 127 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [returnParamType()] EXACT_MATCH\n" + 128 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [returnParamType()] ERASURE_RAW_MATCH\n" + 129 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [returnParamType()] ERASURE_MATCH\n" + 130 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [returnParamType()] ERASURE_MATCH\n" + 131 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [returnParamType()] ERASURE_MATCH\n" + 132 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [returnParamType()] ERASURE_MATCH\n" + 133 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [returnParamType()] ERASURE_MATCH\n" + 134 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [returnParamType()] ERASURE_MATCH" 135 ); 136 } testMethodReferencesElementPatternSingleTypeParameter04()137 public void testMethodReferencesElementPatternSingleTypeParameter04() throws CoreException { 138 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Single.java").getType("Single"); 139 // search reference to a method with parameterized type arguments 140 IMethod method = type.getMethod("paramTypesArgs", new String[] { "QSingle<QT;>;" }); 141 IJavaSearchScope scope = getJavaSearchScope15(); 142 search(method, REFERENCES, scope, this.resultCollector); 143 assertSearchResults( 144 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [paramTypesArgs(gs)] ERASURE_RAW_MATCH\n" + 145 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [paramTypesArgs(gs)] ERASURE_MATCH\n" + 146 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [paramTypesArgs(gs)] ERASURE_MATCH\n" + 147 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [paramTypesArgs(gs)] ERASURE_MATCH\n" + 148 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [paramTypesArgs(gs)] POTENTIAL_MATCH\n" + 149 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [paramTypesArgs(gs)] POTENTIAL_MATCH\n" + 150 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [paramTypesArgs(gs)] POTENTIAL_MATCH" 151 ); 152 } testMethodReferencesElementPatternSingleTypeParameter05()153 public void testMethodReferencesElementPatternSingleTypeParameter05() throws CoreException { 154 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Single.java").getType("Single"); 155 // search reference to a generic method returning a param type with param type parameters (=complete) 156 IMethod method = type.getMethod("complete", new String[] { "QU;", "QSingle<QT;>;" }); 157 IJavaSearchScope scope = getJavaSearchScope15(); 158 search(method, REFERENCES, scope, this.resultCollector); 159 assertSearchResults( 160 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] ERASURE_RAW_MATCH\n" + 161 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [complete(new Object(), gs)] ERASURE_MATCH\n" + 162 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [complete(new Exception(), gs)] ERASURE_MATCH\n" + 163 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] ERASURE_MATCH\n" + 164 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 165 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 166 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 167 ); 168 } 169 170 // Search references to methods defined in a multiple type parameters class testMethodReferencesElementPatternMultipleTypeParameter01()171 public void testMethodReferencesElementPatternMultipleTypeParameter01() throws CoreException { 172 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Multiple.java").getType("Multiple"); 173 IMethod method = type.getMethod("standard", new String[] { "QT1;","QT2;","QT3;" }); 174 IJavaSearchScope scope = getJavaSearchScope15(); 175 search(method, REFERENCES, scope, this.resultCollector); 176 assertSearchResults( 177 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [standard(new Object(), new Exception(), new RuntimeException())] ERASURE_MATCH\n" + 178 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [standard(new Object(), new Exception(), new RuntimeException())] ERASURE_RAW_MATCH" 179 ); 180 } testMethodReferencesElementPatternMultipleTypeParameter02()181 public void testMethodReferencesElementPatternMultipleTypeParameter02() throws CoreException { 182 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Multiple.java").getType("Multiple"); 183 IMethod method = type.getMethod("generic", new String[] { "QU1;","QU2;","QU3;" }); 184 IJavaSearchScope scope = getJavaSearchScope15(); 185 search(method, REFERENCES, scope, this.resultCollector); 186 assertSearchResults( 187 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] ERASURE_MATCH\n" + 188 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [generic(new Object(), new RuntimeException(), new RuntimeException())] ERASURE_MATCH\n" + 189 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] ERASURE_MATCH\n" + 190 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] ERASURE_RAW_MATCH" 191 ); 192 } testMethodReferencesElementPatternMultipleTypeParameter03()193 public void testMethodReferencesElementPatternMultipleTypeParameter03() throws CoreException { 194 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Multiple.java").getType("Multiple"); 195 IMethod method = type.getMethod("returnParamType", new String[] {}); 196 IJavaSearchScope scope = getJavaSearchScope15(); 197 search(method, REFERENCES, scope, this.resultCollector); 198 assertSearchResults( 199 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [returnParamType()] EXACT_MATCH\n" + 200 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [returnParamType()] ERASURE_MATCH\n" + 201 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testUnbound() [returnParamType()] ERASURE_MATCH\n" + 202 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [returnParamType()] ERASURE_MATCH\n" + 203 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [returnParamType()] ERASURE_MATCH\n" + 204 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [returnParamType()] ERASURE_RAW_MATCH" 205 ); 206 } testMethodReferencesElementPatternMultipleTypeParameter04()207 public void testMethodReferencesElementPatternMultipleTypeParameter04() throws CoreException { 208 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Multiple.java").getType("Multiple"); 209 IMethod method = type.getMethod("paramTypesArgs", new String[] { "QSingle<QT1;>;","QSingle<QT2;>;","QSingle<QT3;>;","QMultiple<QT1;QT2;QT3;>;" }); 210 IJavaSearchScope scope = getJavaSearchScope15(); 211 search(method, REFERENCES, scope, this.resultCollector); 212 assertSearchResults( 213 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [paramTypesArgs(new Single<Object>(), new Single<Exception>(), new Single<RuntimeException>(), gm)] ERASURE_MATCH\n" + 214 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testUnbound() [paramTypesArgs(new Single<Object>(), new Single<Object>(), new Single<Object>(), gm)] POTENTIAL_MATCH\n" + 215 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [paramTypesArgs(new Single<Object>(), new Single<Throwable>(), new Single<Exception>(), gm)] POTENTIAL_MATCH\n" + 216 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [paramTypesArgs(new Single<Object>(), new Single<RuntimeException>(), new Single<RuntimeException>(), gm)] POTENTIAL_MATCH\n" + 217 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [paramTypesArgs(new Single<Object>(), new Single<Exception>(), new Single<RuntimeException>(), gm)] ERASURE_RAW_MATCH" 218 ); 219 } testMethodReferencesElementPatternMultipleTypeParameter05()220 public void testMethodReferencesElementPatternMultipleTypeParameter05() throws CoreException { 221 IType type = getCompilationUnit("JavaSearch15/src/g5/m/def/Multiple.java").getType("Multiple"); 222 IMethod method = type.getMethod("complete", new String[] { "QU1;","QU2;","QU3;", "QMultiple<QT1;QT2;QT3;>;" }); 223 IJavaSearchScope scope = getJavaSearchScope15(); 224 search(method, REFERENCES, scope, this.resultCollector); 225 assertSearchResults( 226 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [complete(new Object(), new Exception(), new RuntimeException(), gm)] ERASURE_MATCH\n" + 227 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 228 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 229 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] ERASURE_RAW_MATCH" 230 ); 231 } 232 233 // Search references to single parameterized methods testMethodReferencesElementPatternSingleParamArguments01()234 public void testMethodReferencesElementPatternSingleParamArguments01() throws CoreException { 235 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 236 IMethod method = selectMethod(unit, "generic", 3); 237 IJavaSearchScope scope = getJavaSearchScope15(); 238 search(method, REFERENCES, scope, this.resultCollector); 239 assertSearchResults( 240 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EQUIVALENT_RAW_MATCH\n" + 241 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [<Object>generic(new Object())] EXACT_MATCH\n" + 242 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] ERASURE_MATCH\n" + 243 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] ERASURE_MATCH" 244 ); 245 } testMethodReferencesElementPatternSingleParamArguments02()246 public void testMethodReferencesElementPatternSingleParamArguments02() throws CoreException { 247 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 248 IMethod method = selectMethod(unit, "generic", 6); 249 IJavaSearchScope scope = getJavaSearchScope15(); 250 search(method, REFERENCES, scope, this.resultCollector); 251 assertSearchResults( 252 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EQUIVALENT_RAW_MATCH\n" + 253 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] ERASURE_MATCH\n" + 254 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>generic(new Exception())] EXACT_MATCH\n" + 255 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] ERASURE_MATCH" 256 ); 257 } testMethodReferencesElementPatternSingleParamArguments03()258 public void testMethodReferencesElementPatternSingleParamArguments03() throws CoreException { 259 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 260 IMethod method = selectMethod(unit, "complete"); 261 IJavaSearchScope scope = getJavaSearchScope15(); 262 search(method, REFERENCES, scope, this.resultCollector); 263 assertSearchResults( 264 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EQUIVALENT_RAW_MATCH\n" + 265 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [<Object>complete(new Object(), gs)] EXACT_MATCH\n" + 266 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [complete(new Exception(), gs)] ERASURE_MATCH\n" + 267 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] ERASURE_MATCH\n" + 268 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 269 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 270 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 271 ); 272 } testMethodReferencesElementPatternSingleParamArguments04()273 public void testMethodReferencesElementPatternSingleParamArguments04() throws CoreException { 274 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 275 IMethod method = selectMethod(unit, "complete", 2); 276 IJavaSearchScope scope = getJavaSearchScope15(); 277 search(method, REFERENCES, scope, this.resultCollector); 278 assertSearchResults( 279 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EQUIVALENT_RAW_MATCH\n" + 280 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [complete(new Object(), gs)] ERASURE_MATCH\n" + 281 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>complete(new Exception(), gs)] EXACT_MATCH\n" + 282 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] ERASURE_MATCH\n" + 283 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 284 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 285 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 286 ); 287 } testMethodReferencesElementPatternSingleParamArguments05()288 public void testMethodReferencesElementPatternSingleParamArguments05() throws CoreException { 289 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 290 IMethod method = selectMethod(unit, "generic", 2); 291 IJavaSearchScope scope = getJavaSearchScope15(); 292 search(method, REFERENCES, scope, this.resultCollector); 293 assertSearchResults( 294 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EXACT_RAW_MATCH\n" + 295 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] EQUIVALENT_MATCH\n" + 296 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] EQUIVALENT_MATCH\n" + 297 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] EQUIVALENT_MATCH" 298 ); 299 } testMethodReferencesElementPatternSingleParamArguments06()300 public void testMethodReferencesElementPatternSingleParamArguments06() throws CoreException { 301 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 302 IMethod method = selectMethod(unit, "complete"); 303 IJavaSearchScope scope = getJavaSearchScope15(); 304 search(method, REFERENCES, scope, this.resultCollector); 305 assertSearchResults( 306 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EXACT_RAW_MATCH\n" + 307 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [complete(new Object(), gs)] EQUIVALENT_MATCH\n" + 308 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [complete(new Exception(), gs)] EQUIVALENT_MATCH\n" + 309 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] EQUIVALENT_MATCH\n" + 310 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 311 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 312 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 313 ); 314 } 315 316 // Search references to multiple parameterized methods testMethodReferencesElementPatternMultipleParamArguments01()317 public void testMethodReferencesElementPatternMultipleParamArguments01() throws CoreException { 318 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 319 IMethod method = selectMethod(unit, "generic", 2); 320 IJavaSearchScope scope = getJavaSearchScope15(); 321 search(method, REFERENCES, scope, this.resultCollector); 322 assertSearchResults( 323 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>generic(new Object(), new Exception(), new RuntimeException())] EXACT_MATCH\n" + 324 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [generic(new Object(), new RuntimeException(), new RuntimeException())] ERASURE_MATCH\n" + 325 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] ERASURE_MATCH\n" + 326 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_RAW_MATCH" 327 ); 328 } testMethodReferencesElementPatternMultipleParamArguments02()329 public void testMethodReferencesElementPatternMultipleParamArguments02() throws CoreException { 330 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 331 IMethod method = selectMethod(unit, "generic", 6); 332 search(method, REFERENCES); 333 assertSearchResults( 334 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] ERASURE_MATCH\n" + 335 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [<Object, RuntimeException, RuntimeException>generic(new Object(), new RuntimeException(), new RuntimeException())] EXACT_MATCH\n" + 336 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] ERASURE_MATCH\n" + 337 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_RAW_MATCH" 338 ); 339 } testMethodReferencesElementPatternMultipleParamArguments03()340 public void testMethodReferencesElementPatternMultipleParamArguments03() throws CoreException { 341 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 342 IMethod method = selectMethod(unit, "complete"); 343 IJavaSearchScope scope = getJavaSearchScope15(); 344 search(method, REFERENCES, scope, this.resultCollector); 345 assertSearchResults( 346 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>complete(new Object(), new Exception(), new RuntimeException(), gm)] EXACT_MATCH\n" + 347 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 348 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 349 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_RAW_MATCH" 350 ); 351 } testMethodReferencesElementPatternMultipleParamArguments04()352 public void testMethodReferencesElementPatternMultipleParamArguments04() throws CoreException { 353 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 354 IMethod method = selectMethod(unit, "complete", 2); 355 IJavaSearchScope scope = getJavaSearchScope15(); 356 search(method, REFERENCES, scope, this.resultCollector); 357 assertSearchResults( 358 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [complete(new Object(), new Exception(), new RuntimeException(), gm)] ERASURE_MATCH\n" + 359 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [<Object, RuntimeException, RuntimeException>complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 360 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 361 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_RAW_MATCH" 362 ); 363 } testMethodReferencesElementPatternMultipleParamArguments05()364 public void testMethodReferencesElementPatternMultipleParamArguments05() throws CoreException { 365 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 366 IMethod method = selectMethod(unit, "generic", 4); 367 IJavaSearchScope scope = getJavaSearchScope15(); 368 search(method, REFERENCES, scope, this.resultCollector); 369 assertSearchResults( 370 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_MATCH\n" + 371 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [generic(new Object(), new RuntimeException(), new RuntimeException())] EQUIVALENT_MATCH\n" + 372 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] EQUIVALENT_MATCH\n" + 373 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EXACT_RAW_MATCH" 374 ); 375 } testMethodReferencesElementPatternMultipleParamArguments06()376 public void testMethodReferencesElementPatternMultipleParamArguments06() throws CoreException { 377 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 378 IMethod method = selectMethod(unit, "complete", 2); 379 IJavaSearchScope scope = getJavaSearchScope15(); 380 search(method, REFERENCES, scope, this.resultCollector); 381 assertSearchResults( 382 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_MATCH\n" + 383 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 384 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 385 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EXACT_RAW_MATCH" 386 ); 387 } 388 389 // Search string pattern references to single parameterized methods testMethodReferencesStringPatternSingleParamArguments01()390 public void testMethodReferencesStringPatternSingleParamArguments01() throws CoreException { 391 search("<Exception>generic", METHOD, REFERENCES); 392 assertSearchResults( 393 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EQUIVALENT_RAW_MATCH\n" + 394 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] ERASURE_MATCH\n" + 395 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>generic(new Exception())] EXACT_MATCH\n" + 396 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] ERASURE_MATCH" 397 ); 398 } testMethodReferencesStringPatternSingleParamArguments02()399 public void testMethodReferencesStringPatternSingleParamArguments02() throws CoreException { 400 IJavaSearchScope scope = getJavaSearchScope15(); 401 search("<? extends Exception> complete ", METHOD, REFERENCES, scope, this.resultCollector); 402 assertSearchResults( 403 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EQUIVALENT_RAW_MATCH\n" + 404 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [complete(new Object(), gs)] ERASURE_MATCH\n" + 405 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>complete(new Exception(), gs)] EQUIVALENT_MATCH\n" + 406 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [<RuntimeException>complete(new RuntimeException(), gs)] EQUIVALENT_MATCH\n" + 407 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 408 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 409 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [<RuntimeException>complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 410 ); 411 } testMethodReferencesStringPatternSingleParamArguments03()412 public void testMethodReferencesStringPatternSingleParamArguments03() throws CoreException { 413 IJavaSearchScope scope = getJavaSearchScope15(); 414 search("<? super Exception>*e?e*", METHOD, REFERENCES, scope, this.resultCollector); 415 assertSearchResults( 416 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EQUIVALENT_RAW_MATCH\n" + 417 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EQUIVALENT_RAW_MATCH\n" + 418 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [<Object>generic(new Object())] EQUIVALENT_MATCH\n" + 419 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [<Object>complete(new Object(), gs)] EQUIVALENT_MATCH\n" + 420 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>generic(new Exception())] EQUIVALENT_MATCH\n" + 421 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>complete(new Exception(), gs)] EQUIVALENT_MATCH\n" + 422 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] ERASURE_MATCH\n" + 423 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] ERASURE_MATCH\n" + 424 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 425 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [<Throwable>complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 426 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 427 ); 428 } testMethodReferencesStringPatternSingleParamArguments04()429 public void testMethodReferencesStringPatternSingleParamArguments04() throws CoreException { 430 IJavaSearchScope scope = getJavaSearchScope15("g5.m.ref", false); 431 search("generic", METHOD, REFERENCES, scope, this.resultCollector); 432 assertSearchResults( 433 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] EXACT_MATCH\n" + 434 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [generic(new Object(), new RuntimeException(), new RuntimeException())] EXACT_MATCH\n" + 435 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] EXACT_MATCH\n" + 436 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EXACT_MATCH\n" + 437 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EXACT_MATCH\n" + 438 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] EXACT_MATCH\n" + 439 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] EXACT_MATCH\n" + 440 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] EXACT_MATCH" 441 ); 442 } testMethodReferencesStringPatternSingleParamArguments05()443 public void testMethodReferencesStringPatternSingleParamArguments05() throws CoreException { 444 IJavaSearchScope scope = getJavaSearchScope15(); 445 search("generic(Object)", METHOD, REFERENCES, scope, this.resultCollector); 446 assertSearchResults( 447 /* Results while resolving string pattern with no qualification (currently disabled as it is not comaptible with previous results): 448 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EQUIVALENT_RAW_MATCH\n" + 449 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] EQUIVALENT_RAW_MATCH" 450 */ 451 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [generic(new Exception())] EXACT_MATCH\n" + 452 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [generic(new Object())] EXACT_MATCH\n" + 453 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] EXACT_MATCH\n" + 454 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [generic(new RuntimeException())] EXACT_MATCH" 455 ); 456 } testMethodReferencesStringPatternSingleParamArguments06()457 public void testMethodReferencesStringPatternSingleParamArguments06() throws CoreException { 458 IJavaSearchScope scope = getJavaSearchScope15(); 459 search("complete(Exception, Single<Exception>)", METHOD, REFERENCES, scope, this.resultCollector); 460 assertSearchResults( 461 /* Results while resolving string pattern with no qualification (currently disabled as it is not comaptible with previous results): 462 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [complete(new Exception(), gs)] EQUIVALENT_RAW_MATCH" 463 */ 464 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testSingle() [complete(new Exception(), gs)] EXACT_MATCH\n" + 465 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testObject() [complete(new Object(), gs)] EXACT_MATCH\n" + 466 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [complete(new Exception(), gs)] EXACT_MATCH\n" + 467 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testRuntimeException() [complete(new RuntimeException(), gs)] EXACT_MATCH\n" + 468 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] EXACT_MATCH\n" + 469 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] EXACT_MATCH\n" + 470 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] EXACT_MATCH" 471 ); 472 } testMethodReferencesStringPatternSingleParamArguments07()473 public void testMethodReferencesStringPatternSingleParamArguments07() throws CoreException { 474 IJavaSearchScope scope = getJavaSearchScope15(); 475 search("<Exception> generic ( Exception ) ", METHOD, REFERENCES, scope, this.resultCollector); 476 assertSearchResults( 477 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>generic(new Exception())] EXACT_MATCH" 478 ); 479 } testMethodReferencesStringPatternSingleParamArguments08()480 public void testMethodReferencesStringPatternSingleParamArguments08() throws CoreException { 481 IJavaSearchScope scope = getJavaSearchScope15(); 482 search("<? extends Exception>complete(Exception, Single<? super Exception>)", METHOD, REFERENCES, scope, this.resultCollector); 483 assertSearchResults( 484 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>complete(new Exception(), gs)] EQUIVALENT_MATCH\n" + 485 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testUnbound() [complete(new String(), gs)] POTENTIAL_MATCH\n" + 486 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testExtends() [complete(new Throwable(), gs)] POTENTIAL_MATCH\n" + 487 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testSuper() [complete(new RuntimeException(), gs)] POTENTIAL_MATCH" 488 ); 489 } testMethodReferencesStringPatternSingleParamArguments09()490 public void testMethodReferencesStringPatternSingleParamArguments09() throws CoreException { 491 IJavaSearchScope scope = getJavaSearchScope15(); 492 search("Single.generic(Exception)", METHOD, REFERENCES, scope, this.resultCollector); 493 assertSearchResults( 494 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] EQUIVALENT_MATCH" 495 ); 496 } testMethodReferencesStringPatternSingleParamArguments10()497 public void testMethodReferencesStringPatternSingleParamArguments10() throws CoreException { 498 IJavaSearchScope scope = getJavaSearchScope15(); 499 search("g5.m.def.Single<Exception>.generic(Exception)", METHOD, REFERENCES, scope, this.resultCollector); 500 assertSearchResults( 501 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [generic(new Exception())] EQUIVALENT_MATCH" 502 ); 503 } testMethodReferencesStringPatternSingleParamArguments11()504 public void testMethodReferencesStringPatternSingleParamArguments11() throws CoreException { 505 IJavaSearchScope scope = getJavaSearchScope15(); 506 search("g5.m.def.Single<? extends Exception>.<? extends Exception>generic(Exception)", METHOD, REFERENCES, scope, this.resultCollector); 507 assertSearchResults( 508 "src/g5/m/ref/RefSingle.java void g5.m.ref.RefSingle.testException() [<Exception>generic(new Exception())] EQUIVALENT_MATCH" 509 ); 510 } 511 512 // Search string pattern references to multiple parameterized methods testMethodReferencesStringPatternMultipleParamArguments01()513 public void testMethodReferencesStringPatternMultipleParamArguments01() throws CoreException { 514 IJavaSearchScope scope = getJavaSearchScope15(); 515 search("<?, ? extends Exception, ? super RuntimeException>generic", METHOD, REFERENCES, scope, this.resultCollector); 516 assertSearchResults( 517 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_MATCH\n" + 518 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [<Object, RuntimeException, RuntimeException>generic(new Object(), new RuntimeException(), new RuntimeException())] EQUIVALENT_MATCH\n" + 519 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] ERASURE_MATCH\n" + 520 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_RAW_MATCH" 521 ); 522 } testMethodReferencesStringPatternMultipleParamArguments02()523 public void testMethodReferencesStringPatternMultipleParamArguments02() throws CoreException { 524 IJavaSearchScope scope = getJavaSearchScope15(); 525 search("<Object, Exception, RuntimeException>complete", METHOD, REFERENCES, scope, this.resultCollector); 526 assertSearchResults( 527 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>complete(new Object(), new Exception(), new RuntimeException(), gm)] EXACT_MATCH\n" + 528 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 529 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 530 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_RAW_MATCH" 531 ); 532 } testMethodReferencesStringPatternMultipleParamArguments04()533 public void testMethodReferencesStringPatternMultipleParamArguments04() throws CoreException { 534 IJavaSearchScope scope = getJavaSearchScope15(); 535 search("generic(Object,Exception,RuntimeException)", METHOD, REFERENCES, scope, this.resultCollector); 536 assertSearchResults( 537 /* Results while resolving string pattern with no qualification (currently disabled as it is not comaptible with previous results): 538 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_RAW_MATCH" 539 */ 540 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] EXACT_MATCH\n" + 541 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [generic(new Object(), new RuntimeException(), new RuntimeException())] EXACT_MATCH\n" + 542 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] EXACT_MATCH\n" + 543 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EXACT_MATCH" 544 ); 545 } testMethodReferencesStringPatternMultipleParamArguments05()546 public void testMethodReferencesStringPatternMultipleParamArguments05() throws CoreException { 547 IJavaSearchScope scope = getJavaSearchScope15(); 548 search("complete(Object,RuntimeException,RuntimeException,Multiple<Object, RuntimeException, RuntimeException>)", METHOD, REFERENCES, scope, this.resultCollector); 549 assertSearchResults( 550 /* Results while resolving string pattern with no qualification (currently disabled as it is not comaptible with previous results): 551 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] EQUIVALENT_RAW_MATCH" 552 */ 553 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EXACT_MATCH\n" + 554 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] EXACT_MATCH\n" + 555 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] EXACT_MATCH\n" + 556 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EXACT_MATCH" 557 ); 558 } testMethodReferencesStringPatternMultipleParamArguments06()559 public void testMethodReferencesStringPatternMultipleParamArguments06() throws CoreException { 560 IJavaSearchScope scope = getJavaSearchScope15(); 561 search("<Object, RuntimeException, RuntimeException>generic(*,*,*)", METHOD, REFERENCES, scope, this.resultCollector); 562 assertSearchResults( 563 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] ERASURE_MATCH\n" + 564 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [<Object, RuntimeException, RuntimeException>generic(new Object(), new RuntimeException(), new RuntimeException())] EXACT_MATCH\n" + 565 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [generic(new Object(), new RuntimeException(), new IllegalMonitorStateException())] ERASURE_MATCH\n" + 566 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_RAW_MATCH" 567 ); 568 } testMethodReferencesStringPatternMultipleParamArguments07()569 public void testMethodReferencesStringPatternMultipleParamArguments07() throws CoreException { 570 IJavaSearchScope scope = getJavaSearchScope15(); 571 search("<?,? extends Throwable,? extends RuntimeException>complete", METHOD, REFERENCES, scope, this.resultCollector); 572 assertSearchResults( 573 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_MATCH\n" + 574 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testExtends() [<Object, RuntimeException, RuntimeException>complete(new Object(), new RuntimeException(), new RuntimeException(), gm)] POTENTIAL_MATCH\n" + 575 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.testSuper() [<Object, RuntimeException, IllegalMonitorStateException>complete(new Object(), new RuntimeException(), new IllegalMonitorStateException(), gm)] POTENTIAL_MATCH\n" + 576 "src/g5/m/ref/RefRaw.java void g5.m.ref.RefRaw.testMultiple() [complete(new Object(), new Exception(), new RuntimeException(), gm)] EQUIVALENT_RAW_MATCH" 577 ); 578 } testMethodReferencesStringPatternMultipleParamArguments08()579 public void testMethodReferencesStringPatternMultipleParamArguments08() throws CoreException { 580 IJavaSearchScope scope = getJavaSearchScope15(); 581 search("Multiple.generic(Object,Exception,RuntimeException)", METHOD, REFERENCES, scope, this.resultCollector); 582 assertSearchResults( 583 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_MATCH" 584 ); 585 } testMethodReferencesStringPatternMultipleParamArguments09()586 public void testMethodReferencesStringPatternMultipleParamArguments09() throws CoreException { 587 IJavaSearchScope scope = getJavaSearchScope15(); 588 search("g5.m.def.Multiple<Object, RuntimeException, RuntimeException>.generic(Object,Exception,RuntimeException)", METHOD, REFERENCES, scope, this.resultCollector); 589 assertSearchResults( 590 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [generic(new Object(), new Exception(), new RuntimeException())] ERASURE_MATCH" 591 ); 592 } testMethodReferencesStringPatternMultipleParamArguments10()593 public void testMethodReferencesStringPatternMultipleParamArguments10() throws CoreException { 594 IJavaSearchScope scope = getJavaSearchScope15(); 595 search("g5.m.def.Multiple<?,? extends Throwable,? extends RuntimeException>.<?,? extends Throwable,? extends RuntimeException>generic(Object,Exception,RuntimeException)", METHOD, REFERENCES, scope, this.resultCollector); 596 assertSearchResults( 597 "src/g5/m/ref/RefMultiple.java void g5.m.ref.RefMultiple.test() [<Object, Exception, RuntimeException>generic(new Object(), new Exception(), new RuntimeException())] EQUIVALENT_MATCH" 598 ); 599 } 600 601 /* 602 * DECLARATIONS 603 */ 604 // Search references to single parameterized methods testMethodDeclarationsElementPatternSingleParamArguments01()605 public void testMethodDeclarationsElementPatternSingleParamArguments01() throws CoreException { 606 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 607 IMethod method = selectMethod(unit, "generic", 3); 608 IJavaSearchScope scope = getJavaSearchScope15(); 609 search(method, DECLARATIONS, scope, this.resultCollector); 610 assertSearchResults( 611 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 612 ); 613 } testMethodDeclarationsElementPatternSingleParamArguments02()614 public void testMethodDeclarationsElementPatternSingleParamArguments02() throws CoreException { 615 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 616 IMethod method = selectMethod(unit, "generic", 6); 617 IJavaSearchScope scope = getJavaSearchScope15(); 618 search(method, DECLARATIONS, scope, this.resultCollector); 619 assertSearchResults( 620 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 621 ); 622 } testMethodDeclarationsElementPatternSingleParamArguments03()623 public void testMethodDeclarationsElementPatternSingleParamArguments03() throws CoreException { 624 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 625 IMethod method = selectMethod(unit, "generic", 2); 626 IJavaSearchScope scope = getJavaSearchScope15(); 627 search(method, DECLARATIONS, scope, this.resultCollector); 628 assertSearchResults( 629 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 630 ); 631 } testMethodDeclarationsElementPatternSingleParamArguments04()632 public void testMethodDeclarationsElementPatternSingleParamArguments04() throws CoreException { 633 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 634 IMethod method = selectMethod(unit, "complete"); 635 IJavaSearchScope scope = getJavaSearchScope15(); 636 search(method, DECLARATIONS, scope, this.resultCollector); 637 assertSearchResults( 638 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [complete] EXACT_MATCH" 639 ); 640 } testMethodDeclarationsElementPatternSingleParamArguments05()641 public void testMethodDeclarationsElementPatternSingleParamArguments05() throws CoreException { 642 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefSingle.java"); 643 IMethod method = selectMethod(unit, "complete", 2); 644 IJavaSearchScope scope = getJavaSearchScope15(); 645 search(method, DECLARATIONS, scope, this.resultCollector); 646 assertSearchResults( 647 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [complete] EXACT_MATCH" 648 ); 649 } testMethodDeclarationsElementPatternSingleParamArguments06()650 public void testMethodDeclarationsElementPatternSingleParamArguments06() throws CoreException { 651 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 652 IMethod method = selectMethod(unit, "complete"); 653 IJavaSearchScope scope = getJavaSearchScope15(); 654 search(method, DECLARATIONS, scope, this.resultCollector); 655 assertSearchResults( 656 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [complete] EXACT_MATCH" 657 ); 658 } 659 660 // Search references to multiple parameterized methods testMethodDeclarationsElementPatternMultipleParamArguments01()661 public void testMethodDeclarationsElementPatternMultipleParamArguments01() throws CoreException { 662 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 663 IMethod method = selectMethod(unit, "generic", 2); 664 IJavaSearchScope scope = getJavaSearchScope15(); 665 search(method, DECLARATIONS, scope, this.resultCollector); 666 assertSearchResults( 667 "src/g5/m/def/Multiple.java T1 g5.m.def.Multiple.generic(U1, U2, U3) [generic] EXACT_MATCH" 668 ); 669 } testMethodDeclarationsElementPatternMultipleParamArguments02()670 public void testMethodDeclarationsElementPatternMultipleParamArguments02() throws CoreException { 671 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 672 IMethod method = selectMethod(unit, "generic", 6); 673 IJavaSearchScope scope = getJavaSearchScope15(); 674 search(method, DECLARATIONS, scope, this.resultCollector); 675 assertSearchResults( 676 "src/g5/m/def/Multiple.java T1 g5.m.def.Multiple.generic(U1, U2, U3) [generic] EXACT_MATCH" 677 ); 678 } testMethodDeclarationsElementPatternMultipleParamArguments03()679 public void testMethodDeclarationsElementPatternMultipleParamArguments03() throws CoreException { 680 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 681 IMethod method = selectMethod(unit, "generic", 4); 682 IJavaSearchScope scope = getJavaSearchScope15(); 683 search(method, DECLARATIONS, scope, this.resultCollector); 684 assertSearchResults( 685 "src/g5/m/def/Multiple.java T1 g5.m.def.Multiple.generic(U1, U2, U3) [generic] EXACT_MATCH" 686 ); 687 } testMethodDeclarationsElementPatternMultipleParamArguments04()688 public void testMethodDeclarationsElementPatternMultipleParamArguments04() throws CoreException { 689 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 690 IMethod method = selectMethod(unit, "complete"); 691 IJavaSearchScope scope = getJavaSearchScope15(); 692 search(method, DECLARATIONS, scope, this.resultCollector); 693 assertSearchResults( 694 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 695 ); 696 } testMethodDeclarationsElementPatternMultipleParamArguments05()697 public void testMethodDeclarationsElementPatternMultipleParamArguments05() throws CoreException { 698 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefMultiple.java"); 699 IMethod method = selectMethod(unit, "complete", 2); 700 IJavaSearchScope scope = getJavaSearchScope15(); 701 search(method, DECLARATIONS, scope, this.resultCollector); 702 assertSearchResults( 703 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 704 ); 705 } testMethodDeclarationsElementPatternMultipleParamArguments06()706 public void testMethodDeclarationsElementPatternMultipleParamArguments06() throws CoreException { 707 ICompilationUnit unit = getCompilationUnit("JavaSearch15/src/g5/m/ref/RefRaw.java"); 708 IMethod method = selectMethod(unit, "complete", 2); 709 IJavaSearchScope scope = getJavaSearchScope15(); 710 search(method, DECLARATIONS, scope, this.resultCollector); 711 assertSearchResults( 712 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 713 ); 714 } 715 716 // Search string pattern references to single parameterized methods testMethodDeclarationsStringPatternSingleParamArguments01()717 public void testMethodDeclarationsStringPatternSingleParamArguments01() throws CoreException { 718 IJavaSearchScope scope = getJavaSearchScope15(); 719 search("<Exception>generic", METHOD, DECLARATIONS, scope, this.resultCollector); 720 assertSearchResults( 721 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 722 ); 723 } testMethodDeclarationsStringPatternSingleParamArguments02()724 public void testMethodDeclarationsStringPatternSingleParamArguments02() throws CoreException { 725 IJavaSearchScope scope = getJavaSearchScope15(); 726 search("<U>complete", METHOD, DECLARATIONS, scope, this.resultCollector); 727 assertSearchResults( 728 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [complete] EXACT_MATCH" 729 ); 730 } testMethodDeclarationsStringPatternSingleParamArguments03()731 public void testMethodDeclarationsStringPatternSingleParamArguments03() throws CoreException { 732 IJavaSearchScope scope = getJavaSearchScope15(); 733 search("<T> *e?e*", METHOD, DECLARATIONS, scope, this.resultCollector); 734 assertSearchResults( 735 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH\n" + 736 "src/g5/m/def/Single.java Single<T> g5.m.def.Single.complete(U, Single<T>) [complete] EXACT_MATCH" 737 ); 738 } testMethodDeclarationsStringPatternSingleParamArguments04()739 public void testMethodDeclarationsStringPatternSingleParamArguments04() throws CoreException { 740 IJavaSearchScope scope = getJavaSearchScope15(); 741 search("generic(*)", METHOD, DECLARATIONS, scope, this.resultCollector); 742 assertSearchResults( 743 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 744 ); 745 } testMethodDeclarationsStringPatternSingleParamArguments05()746 public void testMethodDeclarationsStringPatternSingleParamArguments05() throws CoreException { 747 IJavaSearchScope scope = getJavaSearchScope15(); 748 search("<Exception>generic(*)", METHOD, DECLARATIONS, scope, this.resultCollector); 749 assertSearchResults( 750 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 751 ); 752 } testMethodDeclarationsStringPatternSingleParamArguments06()753 public void testMethodDeclarationsStringPatternSingleParamArguments06() throws CoreException { 754 IJavaSearchScope scope = getJavaSearchScope15(); 755 search("Single.<Object>generic", METHOD, DECLARATIONS, scope, this.resultCollector); 756 assertSearchResults( 757 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 758 ); 759 } testMethodDeclarationsStringPatternSingleParamArguments07()760 public void testMethodDeclarationsStringPatternSingleParamArguments07() throws CoreException { 761 IJavaSearchScope scope = getJavaSearchScope15(); 762 search("g5.m.def.Single<Object>.<U>generic", METHOD, DECLARATIONS, scope, this.resultCollector); 763 assertSearchResults( 764 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 765 ); 766 } testMethodDeclarationsStringPatternSingleParamArguments08()767 public void testMethodDeclarationsStringPatternSingleParamArguments08() throws CoreException { 768 IJavaSearchScope scope = getJavaSearchScope15(); 769 search("g5.m.def.Single<?>.<?>generic", METHOD, DECLARATIONS, scope, this.resultCollector); 770 assertSearchResults( 771 "src/g5/m/def/Single.java T g5.m.def.Single.generic(U) [generic] EXACT_MATCH" 772 ); 773 } 774 775 // Search string pattern references to multiple parameterized methods testMethodDeclarationsStringPatternMultipleParamArguments01()776 public void testMethodDeclarationsStringPatternMultipleParamArguments01() throws CoreException { 777 IJavaSearchScope scope = getJavaSearchScope15(); 778 search("<?, ? extends Exception, ? super RuntimeException>generic", METHOD, DECLARATIONS, scope, this.resultCollector); 779 assertSearchResults( 780 "src/g5/m/def/Multiple.java T1 g5.m.def.Multiple.generic(U1, U2, U3) [generic] EXACT_MATCH" 781 ); 782 } testMethodDeclarationsStringPatternMultipleParamArguments02()783 public void testMethodDeclarationsStringPatternMultipleParamArguments02() throws CoreException { 784 IJavaSearchScope scope = getJavaSearchScope15(); 785 search("<Object, Exception, RuntimeException>complete", METHOD, DECLARATIONS, scope, this.resultCollector); 786 assertSearchResults( 787 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 788 ); 789 } testMethodDeclarationsStringPatternMultipleParamArguments03()790 public void testMethodDeclarationsStringPatternMultipleParamArguments03() throws CoreException { 791 IJavaSearchScope scope = getJavaSearchScope15(); 792 search("complete(*,*,*,*)", METHOD, DECLARATIONS, scope, this.resultCollector); 793 assertSearchResults( 794 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 795 ); 796 } testMethodDeclarationsStringPatternMultipleParamArguments04()797 public void testMethodDeclarationsStringPatternMultipleParamArguments04() throws CoreException { 798 IJavaSearchScope scope = getJavaSearchScope15(); 799 search("<Object, Exception, RuntimeException>complete(*,*,*,*)", METHOD, DECLARATIONS, scope, this.resultCollector); 800 assertSearchResults( 801 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 802 ); 803 } testMethodDeclarationsStringPatternMultipleParamArguments05()804 public void testMethodDeclarationsStringPatternMultipleParamArguments05() throws CoreException { 805 IJavaSearchScope scope = getJavaSearchScope15(); 806 search("Multiple.<Object, Exception, RuntimeException>complete", METHOD, DECLARATIONS, scope, this.resultCollector); 807 assertSearchResults( 808 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 809 ); 810 } testMethodDeclarationsStringPatternMultipleParamArguments06()811 public void testMethodDeclarationsStringPatternMultipleParamArguments06() throws CoreException { 812 IJavaSearchScope scope = getJavaSearchScope15(); 813 search("g5.m.def.Multiple<Object, Exception, RuntimeException>.<U1,U2,U3>complete", METHOD, DECLARATIONS, scope, this.resultCollector); 814 assertSearchResults( 815 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 816 ); 817 } testMethodDeclarationsStringPatternMultipleParamArguments07()818 public void testMethodDeclarationsStringPatternMultipleParamArguments07() throws CoreException { 819 IJavaSearchScope scope = getJavaSearchScope15(); 820 search("g5.m.def.Multiple<?,?,?>.<?,?,?>complete", METHOD, DECLARATIONS, scope, this.resultCollector); 821 assertSearchResults( 822 "src/g5/m/def/Multiple.java Multiple<T1,T2,T3> g5.m.def.Multiple.complete(U1, U2, U3, Multiple<T1,T2,T3>) [complete] EXACT_MATCH" 823 ); 824 } 825 } 826