Lines 74-95
Link Here
|
74 |
this.nameLookup = nameLookup; |
74 |
this.nameLookup = nameLookup; |
75 |
this.openable = openable; |
75 |
this.openable = openable; |
76 |
} |
76 |
} |
77 |
/** |
77 |
private void acceptBinaryMethod( |
78 |
* Resolve the binary method |
78 |
IType type, |
79 |
* |
79 |
IMethod method, |
80 |
* fix for 1FWFT6Q |
80 |
char[] uniqueKey, |
81 |
*/ |
81 |
boolean isConstructor) { |
82 |
protected void acceptBinaryMethod(IType type, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, String[] parameterSignatures, char[] uniqueKey, boolean isConstructor) { |
82 |
try { |
83 |
IMethod method= type.getMethod(new String(selector), parameterSignatures); |
83 |
if(!isConstructor || ((JavaElement)method).getSourceMapper() == null) { |
84 |
if (method.exists()) { |
84 |
if (uniqueKey != null) { |
85 |
try { |
85 |
ResolvedBinaryMethod resolvedMethod = new ResolvedBinaryMethod( |
86 |
if(!isConstructor || ((JavaElement)method).getSourceMapper() == null) { |
86 |
(JavaElement)method.getParent(), |
87 |
if (uniqueKey != null) |
87 |
method.getElementName(), |
88 |
method = new ResolvedBinaryMethod( |
88 |
method.getParameterTypes(), |
|
|
89 |
new String(uniqueKey)); |
90 |
resolvedMethod.occurrenceCount = method.getOccurrenceCount(); |
91 |
method = resolvedMethod; |
92 |
} |
93 |
|
94 |
addElement(method); |
95 |
if(SelectionEngine.DEBUG){ |
96 |
System.out.print("SELECTION - accept method("); //$NON-NLS-1$ |
97 |
System.out.print(method.toString()); |
98 |
System.out.println(")"); //$NON-NLS-1$ |
99 |
} |
100 |
} else { |
101 |
ISourceRange range = method.getSourceRange(); |
102 |
if (range.getOffset() != -1 && range.getLength() != 0 ) { |
103 |
if (uniqueKey != null) { |
104 |
ResolvedBinaryMethod resolvedMethod = new ResolvedBinaryMethod( |
89 |
(JavaElement)method.getParent(), |
105 |
(JavaElement)method.getParent(), |
90 |
method.getElementName(), |
106 |
method.getElementName(), |
91 |
method.getParameterTypes(), |
107 |
method.getParameterTypes(), |
92 |
new String(uniqueKey)); |
108 |
new String(uniqueKey)); |
|
|
109 |
resolvedMethod.occurrenceCount = method.getOccurrenceCount(); |
110 |
method = resolvedMethod; |
111 |
} |
93 |
addElement(method); |
112 |
addElement(method); |
94 |
if(SelectionEngine.DEBUG){ |
113 |
if(SelectionEngine.DEBUG){ |
95 |
System.out.print("SELECTION - accept method("); //$NON-NLS-1$ |
114 |
System.out.print("SELECTION - accept method("); //$NON-NLS-1$ |
Lines 97-129
Link Here
|
97 |
System.out.println(")"); //$NON-NLS-1$ |
116 |
System.out.println(")"); //$NON-NLS-1$ |
98 |
} |
117 |
} |
99 |
} else { |
118 |
} else { |
100 |
ISourceRange range = method.getSourceRange(); |
119 |
// no range was actually found, but a method was originally given -> default constructor |
101 |
if (range.getOffset() != -1 && range.getLength() != 0 ) { |
120 |
addElement(type); |
102 |
if (uniqueKey != null) |
121 |
if(SelectionEngine.DEBUG){ |
103 |
method = new ResolvedBinaryMethod( |
122 |
System.out.print("SELECTION - accept type("); //$NON-NLS-1$ |
104 |
(JavaElement)method.getParent(), |
123 |
System.out.print(type.toString()); |
105 |
method.getElementName(), |
124 |
System.out.println(")"); //$NON-NLS-1$ |
106 |
method.getParameterTypes(), |
125 |
} |
107 |
new String(uniqueKey)); |
126 |
} |
108 |
addElement(method); |
127 |
} |
109 |
if(SelectionEngine.DEBUG){ |
128 |
} catch (JavaModelException e) { |
110 |
System.out.print("SELECTION - accept method("); //$NON-NLS-1$ |
129 |
// an exception occurs, return nothing |
111 |
System.out.print(method.toString()); |
130 |
} |
112 |
System.out.println(")"); //$NON-NLS-1$ |
131 |
} |
113 |
} |
132 |
/** |
114 |
} else { |
133 |
* Resolve the binary method |
115 |
// no range was actually found, but a method was originally given -> default constructor |
134 |
* |
116 |
addElement(type); |
135 |
* fix for 1FWFT6Q |
117 |
if(SelectionEngine.DEBUG){ |
136 |
*/ |
118 |
System.out.print("SELECTION - accept type("); //$NON-NLS-1$ |
137 |
protected void acceptBinaryMethod( |
119 |
System.out.print(type.toString()); |
138 |
IType type, |
120 |
System.out.println(")"); //$NON-NLS-1$ |
139 |
char[] selector, |
|
|
140 |
char[][] parameterPackageNames, |
141 |
char[][] parameterTypeNames, |
142 |
String[] parameterSignatures, |
143 |
char[][] typeParameterNames, |
144 |
char[][][] typeParameterBoundNames, |
145 |
char[] uniqueKey, |
146 |
boolean isConstructor) { |
147 |
IMethod method= type.getMethod(new String(selector), parameterSignatures); |
148 |
|
149 |
if (method.exists()) { |
150 |
if (typeParameterNames != null && typeParameterNames.length != 0) { |
151 |
IMethod[] methods = type.findMethods(method); |
152 |
if (methods.length > 1) { |
153 |
for (int i = 0; i < methods.length; i++) { |
154 |
if (areTypeParametersCompatible(methods[i], typeParameterNames, typeParameterBoundNames)) { |
155 |
acceptBinaryMethod(type, method, uniqueKey, isConstructor); |
121 |
} |
156 |
} |
122 |
} |
157 |
} |
|
|
158 |
return; |
123 |
} |
159 |
} |
124 |
} catch (JavaModelException e) { |
|
|
125 |
// an exception occurs, return nothing |
126 |
} |
160 |
} |
|
|
161 |
acceptBinaryMethod(type, method, uniqueKey, isConstructor); |
127 |
} |
162 |
} |
128 |
} |
163 |
} |
129 |
/** |
164 |
/** |
Lines 155-163
Link Here
|
155 |
if(type != null ) { |
190 |
if(type != null ) { |
156 |
String key = uniqueKey == null ? type.getKey() : new String(uniqueKey); |
191 |
String key = uniqueKey == null ? type.getKey() : new String(uniqueKey); |
157 |
if(type.isBinary()) { |
192 |
if(type.isBinary()) { |
158 |
type = new ResolvedBinaryType((JavaElement)type.getParent(), type.getElementName(), key); |
193 |
ResolvedBinaryType resolvedType = new ResolvedBinaryType((JavaElement)type.getParent(), type.getElementName(), key); |
|
|
194 |
resolvedType.occurrenceCount = type.getOccurrenceCount(); |
195 |
type = resolvedType; |
159 |
} else { |
196 |
} else { |
160 |
type = new ResolvedSourceType((JavaElement)type.getParent(), type.getElementName(), key); |
197 |
ResolvedSourceType resolvedType = new ResolvedSourceType((JavaElement)type.getParent(), type.getElementName(), key); |
|
|
198 |
resolvedType.occurrenceCount = type.getOccurrenceCount(); |
199 |
type = resolvedType; |
161 |
} |
200 |
} |
162 |
} |
201 |
} |
163 |
} |
202 |
} |
Lines 214-228
Link Here
|
214 |
if (field.exists()) { |
253 |
if (field.exists()) { |
215 |
if (uniqueKey != null) { |
254 |
if (uniqueKey != null) { |
216 |
if(field.isBinary()) { |
255 |
if(field.isBinary()) { |
217 |
field = new ResolvedBinaryField( |
256 |
ResolvedBinaryField resolvedField = new ResolvedBinaryField( |
218 |
(JavaElement)field.getParent(), |
257 |
(JavaElement)field.getParent(), |
219 |
field.getElementName(), |
258 |
field.getElementName(), |
220 |
new String(uniqueKey)); |
259 |
new String(uniqueKey)); |
|
|
260 |
resolvedField.occurrenceCount = field.getOccurrenceCount(); |
261 |
field = resolvedField; |
221 |
} else { |
262 |
} else { |
222 |
field = new ResolvedSourceField( |
263 |
ResolvedSourceField resolvedField = new ResolvedSourceField( |
223 |
(JavaElement)field.getParent(), |
264 |
(JavaElement)field.getParent(), |
224 |
field.getElementName(), |
265 |
field.getElementName(), |
225 |
new String(uniqueKey)); |
266 |
new String(uniqueKey)); |
|
|
267 |
resolvedField.occurrenceCount = field.getOccurrenceCount(); |
268 |
field = resolvedField; |
226 |
} |
269 |
} |
227 |
} |
270 |
} |
228 |
addElement(field); |
271 |
addElement(field); |
Lines 250-264
Link Here
|
250 |
if (field.exists()) { |
293 |
if (field.exists()) { |
251 |
char[] uniqueKey = fieldBinding.computeUniqueKey(); |
294 |
char[] uniqueKey = fieldBinding.computeUniqueKey(); |
252 |
if(field.isBinary()) { |
295 |
if(field.isBinary()) { |
253 |
field = new ResolvedBinaryField( |
296 |
ResolvedBinaryField resolvedField = new ResolvedBinaryField( |
254 |
(JavaElement)field.getParent(), |
297 |
(JavaElement)field.getParent(), |
255 |
field.getElementName(), |
298 |
field.getElementName(), |
256 |
new String(uniqueKey)); |
299 |
new String(uniqueKey)); |
|
|
300 |
resolvedField.occurrenceCount = field.getOccurrenceCount(); |
301 |
field = resolvedField; |
257 |
} else { |
302 |
} else { |
258 |
field = new ResolvedSourceField( |
303 |
ResolvedSourceField resolvedField = new ResolvedSourceField( |
259 |
(JavaElement)field.getParent(), |
304 |
(JavaElement)field.getParent(), |
260 |
field.getElementName(), |
305 |
field.getElementName(), |
261 |
new String(uniqueKey)); |
306 |
new String(uniqueKey)); |
|
|
307 |
resolvedField.occurrenceCount = field.getOccurrenceCount(); |
308 |
field = resolvedField; |
262 |
} |
309 |
} |
263 |
addElement(field); |
310 |
addElement(field); |
264 |
if(SelectionEngine.DEBUG){ |
311 |
if(SelectionEngine.DEBUG){ |
Lines 277-293
Link Here
|
277 |
|
324 |
|
278 |
char[] uniqueKey = methodBinding.computeUniqueKey(); |
325 |
char[] uniqueKey = methodBinding.computeUniqueKey(); |
279 |
if(method.isBinary()) { |
326 |
if(method.isBinary()) { |
280 |
res = new ResolvedBinaryMethod( |
327 |
ResolvedBinaryMethod resolvedRes = new ResolvedBinaryMethod( |
281 |
(JavaElement)res.getParent(), |
328 |
(JavaElement)res.getParent(), |
282 |
method.getElementName(), |
329 |
method.getElementName(), |
283 |
method.getParameterTypes(), |
330 |
method.getParameterTypes(), |
284 |
new String(uniqueKey)); |
331 |
new String(uniqueKey)); |
|
|
332 |
resolvedRes.occurrenceCount = method.getOccurrenceCount(); |
333 |
res = resolvedRes; |
285 |
} else { |
334 |
} else { |
286 |
res = new ResolvedSourceMethod( |
335 |
ResolvedSourceMethod resolvedRes = new ResolvedSourceMethod( |
287 |
(JavaElement)res.getParent(), |
336 |
(JavaElement)res.getParent(), |
288 |
method.getElementName(), |
337 |
method.getElementName(), |
289 |
method.getParameterTypes(), |
338 |
method.getParameterTypes(), |
290 |
new String(uniqueKey)); |
339 |
new String(uniqueKey)); |
|
|
340 |
resolvedRes.occurrenceCount = method.getOccurrenceCount(); |
341 |
res = resolvedRes; |
291 |
} |
342 |
} |
292 |
addElement(res); |
343 |
addElement(res); |
293 |
if(SelectionEngine.DEBUG){ |
344 |
if(SelectionEngine.DEBUG){ |
Lines 390-396
Link Here
|
390 |
/** |
441 |
/** |
391 |
* Resolve the method |
442 |
* Resolve the method |
392 |
*/ |
443 |
*/ |
393 |
public void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, String enclosingDeclaringTypeSignature, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, String[] parameterSignatures, boolean isConstructor, boolean isDeclaration, char[] uniqueKey, int start, int end) { |
444 |
public void acceptMethod( |
|
|
445 |
char[] declaringTypePackageName, |
446 |
char[] declaringTypeName, |
447 |
String enclosingDeclaringTypeSignature, |
448 |
char[] selector, |
449 |
char[][] parameterPackageNames, |
450 |
char[][] parameterTypeNames, |
451 |
String[] parameterSignatures, |
452 |
char[][] typeParameterNames, |
453 |
char[][][] typeParameterBoundNames, |
454 |
boolean isConstructor, |
455 |
boolean isDeclaration, |
456 |
char[] uniqueKey, |
457 |
int start, |
458 |
int end) { |
394 |
IJavaElement[] previousElement = this.elements; |
459 |
IJavaElement[] previousElement = this.elements; |
395 |
int previousElementIndex = this.elementIndex; |
460 |
int previousElementIndex = this.elementIndex; |
396 |
this.elements = JavaElement.NO_ELEMENTS; |
461 |
this.elements = JavaElement.NO_ELEMENTS; |
Lines 432-440
Link Here
|
432 |
parameterSignatures[0] = Signature.getTypeErasure(enclosingDeclaringTypeSignature); |
497 |
parameterSignatures[0] = Signature.getTypeErasure(enclosingDeclaringTypeSignature); |
433 |
} |
498 |
} |
434 |
|
499 |
|
435 |
acceptBinaryMethod(type, selector, parameterPackageNames, parameterTypeNames, parameterSignatures, uniqueKey, isConstructor); |
500 |
acceptBinaryMethod(type, selector, parameterPackageNames, parameterTypeNames, parameterSignatures, typeParameterNames, typeParameterBoundNames, uniqueKey, isConstructor); |
436 |
} else { |
501 |
} else { |
437 |
acceptSourceMethod(type, selector, parameterPackageNames, parameterTypeNames, uniqueKey); |
502 |
acceptSourceMethod(type, selector, parameterPackageNames, parameterTypeNames, parameterSignatures, typeParameterNames, typeParameterBoundNames, uniqueKey); |
438 |
} |
503 |
} |
439 |
} |
504 |
} |
440 |
} |
505 |
} |
Lines 469-475
Link Here
|
469 |
* |
534 |
* |
470 |
* fix for 1FWFT6Q |
535 |
* fix for 1FWFT6Q |
471 |
*/ |
536 |
*/ |
472 |
protected void acceptSourceMethod(IType type, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, char[] uniqueKey) { |
537 |
protected void acceptSourceMethod( |
|
|
538 |
IType type, |
539 |
char[] selector, |
540 |
char[][] parameterPackageNames, |
541 |
char[][] parameterTypeNames, |
542 |
String[] parameterSignatures, |
543 |
char[][] typeParameterNames, |
544 |
char[][][] typeParameterBoundNames, |
545 |
char[] uniqueKey) { |
546 |
|
473 |
String name = new String(selector); |
547 |
String name = new String(selector); |
474 |
IMethod[] methods = null; |
548 |
IMethod[] methods = null; |
475 |
try { |
549 |
try { |
Lines 478-489
Link Here
|
478 |
if (methods[i].getElementName().equals(name) |
552 |
if (methods[i].getElementName().equals(name) |
479 |
&& methods[i].getParameterTypes().length == parameterTypeNames.length) { |
553 |
&& methods[i].getParameterTypes().length == parameterTypeNames.length) { |
480 |
IMethod method = methods[i]; |
554 |
IMethod method = methods[i]; |
481 |
if (uniqueKey != null) |
555 |
if (uniqueKey != null) { |
482 |
method = new ResolvedSourceMethod( |
556 |
ResolvedSourceMethod resolvedMethod = new ResolvedSourceMethod( |
483 |
(JavaElement)method.getParent(), |
557 |
(JavaElement)method.getParent(), |
484 |
method.getElementName(), |
558 |
method.getElementName(), |
485 |
method.getParameterTypes(), |
559 |
method.getParameterTypes(), |
486 |
new String(uniqueKey)); |
560 |
new String(uniqueKey)); |
|
|
561 |
resolvedMethod.occurrenceCount = method.getOccurrenceCount(); |
562 |
method = resolvedMethod; |
563 |
} |
487 |
addElement(method); |
564 |
addElement(method); |
488 |
} |
565 |
} |
489 |
} |
566 |
} |
Lines 530-535
Link Here
|
530 |
break; |
607 |
break; |
531 |
} |
608 |
} |
532 |
} |
609 |
} |
|
|
610 |
|
611 |
if (match && !areTypeParametersCompatible(method, typeParameterNames, typeParameterBoundNames)) { |
612 |
match = false; |
613 |
} |
614 |
|
533 |
if (match) { |
615 |
if (match) { |
534 |
addElement(method); |
616 |
addElement(method); |
535 |
if(SelectionEngine.DEBUG){ |
617 |
if(SelectionEngine.DEBUG){ |
Lines 666-672
Link Here
|
666 |
} |
748 |
} |
667 |
this.elements[++this.elementIndex] = element; |
749 |
this.elements[++this.elementIndex] = element; |
668 |
} |
750 |
} |
669 |
|
751 |
private boolean areTypeParametersCompatible(IMethod method, char[][] typeParameterNames, char[][][] typeParameterBoundNames) { |
|
|
752 |
try { |
753 |
ITypeParameter[] typeParameters = method.getTypeParameters(); |
754 |
int length1 = typeParameters == null ? 0 : typeParameters.length; |
755 |
int length2 = typeParameterNames == null ? 0 : typeParameterNames.length; |
756 |
if (length1 != length2) { |
757 |
return false; |
758 |
} else { |
759 |
for (int j = 0; j < length1; j++) { |
760 |
ITypeParameter typeParameter = typeParameters[j]; |
761 |
String typeParameterName = typeParameter.getElementName(); |
762 |
if (!typeParameterName.equals(new String(typeParameterNames[j]))) { |
763 |
return false; |
764 |
} |
765 |
|
766 |
String[] bounds = typeParameter.getBounds(); |
767 |
int boundCount = typeParameterBoundNames[j] == null ? 0 : typeParameterBoundNames[j].length; |
768 |
|
769 |
if (bounds.length != boundCount) { |
770 |
return false; |
771 |
} else { |
772 |
for (int k = 0; k < boundCount; k++) { |
773 |
String simpleName = Signature.getSimpleName(bounds[k]); |
774 |
int index = simpleName.indexOf('<'); |
775 |
if (index != -1) { |
776 |
simpleName = simpleName.substring(0, index); |
777 |
} |
778 |
if (!simpleName.equals(new String(typeParameterBoundNames[j][k]))) { |
779 |
return false; |
780 |
} |
781 |
} |
782 |
} |
783 |
} |
784 |
} |
785 |
} catch (JavaModelException e) { |
786 |
return false; |
787 |
} |
788 |
return true; |
789 |
} |
670 |
/* |
790 |
/* |
671 |
* findLocalElement() cannot find local variable |
791 |
* findLocalElement() cannot find local variable |
672 |
*/ |
792 |
*/ |