Lines 408-423
Link Here
|
408 |
sb.append(name); |
408 |
sb.append(name); |
409 |
|
409 |
|
410 |
List ptypes = getParameterTypes(); |
410 |
List ptypes = getParameterTypes(); |
411 |
if (ptypes != null) { |
411 |
if (ptypes != null && (!ptypes.isEmpty() |
|
|
412 |
|| this.kind.equals(IProgramElement.Kind.METHOD)) |
413 |
|| this.kind.equals(IProgramElement.Kind.CONSTRUCTOR) |
414 |
|| this.kind.equals(IProgramElement.Kind.ADVICE) |
415 |
|| this.kind.equals(IProgramElement.Kind.POINTCUT) |
416 |
|| this.kind.equals(IProgramElement.Kind.INTER_TYPE_METHOD) |
417 |
|| this.kind.equals(IProgramElement.Kind.INTER_TYPE_CONSTRUCTOR)) { |
412 |
sb.append('('); |
418 |
sb.append('('); |
413 |
for (Iterator it = ptypes.iterator(); it.hasNext(); ) { |
419 |
for (Iterator it = ptypes.iterator(); it.hasNext(); ) { |
414 |
String arg = (String)it.next(); |
420 |
char[] arg = (char[])it.next(); |
415 |
if (getFullyQualifiedArgTypes) { |
421 |
if (getFullyQualifiedArgTypes) { |
416 |
sb.append(arg); |
422 |
sb.append(arg); |
417 |
} else { |
423 |
} else { |
418 |
int index = arg.lastIndexOf("."); |
424 |
int index = CharOperation.lastIndexOf('.',arg); |
419 |
if (index != -1) { |
425 |
if (index != -1) { |
420 |
sb.append(arg.substring(index + 1)); |
426 |
sb.append(CharOperation.subarray(arg,index+1,arg.length)); |
421 |
} else { |
427 |
} else { |
422 |
sb.append(arg); |
428 |
sb.append(arg); |
423 |
} |
429 |
} |
Lines 503-519
Link Here
|
503 |
//parameterNames = list; |
509 |
//parameterNames = list; |
504 |
} |
510 |
} |
505 |
|
511 |
|
506 |
public List getParameterTypes() { |
512 |
public List getParameterTypes() { |
507 |
List parameterTypes = (List)kvpairs.get("parameterTypes"); |
513 |
List l = getParameterSignatures(); |
508 |
return parameterTypes; |
514 |
if (l == null || l.isEmpty()) { |
|
|
515 |
return Collections.EMPTY_LIST; |
516 |
} |
517 |
List params = new ArrayList(); |
518 |
for (Iterator iter = l.iterator(); iter.hasNext();) { |
519 |
params.add(createReadableName((char[]) iter.next())); |
520 |
} |
521 |
return params; |
509 |
} |
522 |
} |
510 |
public void setParameterTypes(List list) { |
523 |
|
511 |
if (kvpairs==Collections.EMPTY_MAP) kvpairs = new HashMap(); |
524 |
public List getParameterSignatures() { |
512 |
if (list==null || list.size()==0) kvpairs.put("parameterTypes",Collections.EMPTY_LIST); |
525 |
List parameters = (List)kvpairs.get("parameterSigs"); |
513 |
else kvpairs.put("parameterTypes",list); |
526 |
return parameters; |
514 |
// parameterTypes = list; |
|
|
515 |
} |
527 |
} |
516 |
|
528 |
|
|
|
529 |
public void setParameterSignatures(List list) { |
530 |
if (kvpairs==Collections.EMPTY_MAP) kvpairs = new HashMap(); |
531 |
if (list==null || list.size()==0) kvpairs.put("parameterSigs",Collections.EMPTY_LIST); |
532 |
else kvpairs.put("parameterSigs",list); |
533 |
} |
534 |
|
517 |
public String getDetails() { |
535 |
public String getDetails() { |
518 |
String details = (String)kvpairs.get("details"); |
536 |
String details = (String)kvpairs.get("details"); |
519 |
return details; |
537 |
return details; |
Lines 548-552
Link Here
|
548 |
public ExtraInformation getExtraInfo() { |
566 |
public ExtraInformation getExtraInfo() { |
549 |
return (ExtraInformation)kvpairs.get("ExtraInformation"); |
567 |
return (ExtraInformation)kvpairs.get("ExtraInformation"); |
550 |
} |
568 |
} |
|
|
569 |
|
570 |
/** |
571 |
* Creates a readable name from the given char array, for example, |
572 |
* given 'I' returns 'int'. Moreover, given |
573 |
* 'Ljava/lang/String;<Ljava/lang/String;>' returns |
574 |
* 'java.lang.String<java.lang.String>' |
575 |
*/ |
576 |
private char[] createReadableName(char[] c) { |
577 |
int lt = CharOperation.indexOf('<',c); |
578 |
int sc = CharOperation.indexOf(';',c); |
579 |
int gt = CharOperation.indexOf('>',c); |
580 |
|
581 |
int smallest = 0; |
582 |
if (lt == -1 && sc == -1 && gt == -1) { |
583 |
// we have something like 'Ljava/lang/String' or 'I' |
584 |
return getTypeName(c); |
585 |
} else if (lt != -1 && (sc == -1 || lt <= sc) && (gt == -1 || lt <= gt)) { |
586 |
// we have something like 'Ljava/lang/String<I' |
587 |
smallest = lt; |
588 |
} else if (sc != -1 && (lt == -1 || sc <= lt) && (gt == -1 || sc <= gt)) { |
589 |
// we have something like 'Ljava/lang/String;I' |
590 |
smallest = sc; |
591 |
} else { |
592 |
// we have something like '>;' |
593 |
smallest = gt; |
594 |
} |
595 |
char[] first = CharOperation.subarray(c,0,smallest); |
596 |
char[] second = CharOperation.subarray(c,smallest+1,c.length); |
597 |
if (smallest == 0 && first.length == 0 && c[0] == '>') { |
598 |
// c = {'>',';'} therefore we just want to return '>' to |
599 |
// close the generic signature |
600 |
return new char[]{'>'}; |
601 |
} else if (first.length == 1 && second.length == 0) { |
602 |
return first; |
603 |
} else if (second.length == 0 || (second.length == 1 && second[0] == ';')){ |
604 |
// we've reached the end of the array, therefore only care about |
605 |
// the first part |
606 |
return createReadableName(first); |
607 |
} else if (smallest == lt) { |
608 |
// if c = 'Ljava/lang/String;<I' then first = 'Ljava/Lang/String;' and |
609 |
// second = 'I'. Want to end up with 'Ljava.lang.String<I' and so add |
610 |
// the '<' back. |
611 |
char[] inclLT = CharOperation.concat(createReadableName(first),new char[]{'<'}); |
612 |
return CharOperation.concat(inclLT,createReadableName(second)); |
613 |
} else if (smallest == gt) { |
614 |
char[] inclLT = CharOperation.concat(createReadableName(first),new char[]{'>'}); |
615 |
return CharOperation.concat(inclLT,createReadableName(second)); |
616 |
} else if (second.length != 2) { |
617 |
// if c = 'Ljava/lang/Sting;LMyClass' then first = 'Ljava/lang/String' |
618 |
// and second = 'LMyClass'. Want to end up with 'java.lang.String,MyClass |
619 |
// so want to add a ','. However, only want to do this if we're in the |
620 |
// middle of a '<...>' |
621 |
char[] inclComma = CharOperation.concat(createReadableName(first),new char[]{','}); |
622 |
return CharOperation.concat(inclComma,createReadableName(second)); |
623 |
} |
624 |
return CharOperation.concat(createReadableName(first),createReadableName(second)); |
625 |
} |
626 |
|
627 |
/** |
628 |
* Given a char array, returns the type name for this. For example, given |
629 |
* 'I' returns 'int' and given 'Ljava/lang/String' returns 'java.lang.String' |
630 |
* Doesn't go any deaper so given 'Ljava/lang/String;<Ljava/lang/String;>' it |
631 |
* returns 'java.lang.String;<Ljava.lang.String;>'. To create a fully readable |
632 |
* name use createReadableName(char[]) |
633 |
*/ |
634 |
private char[] getTypeName(char[] c) { |
635 |
if (c.length == 0) { |
636 |
return c; |
637 |
} |
638 |
SignatureType st = SignatureType.getSignatureTypeForChar(c[0]); |
639 |
if (st.isPrimitiveType()) { |
640 |
return st.getTypeName(); |
641 |
} else if (st.isArray()) { |
642 |
return CharOperation.concat( |
643 |
getTypeName(CharOperation.subarray(c,1,c.length)), |
644 |
new char[]{'[',']'}); |
645 |
} else { |
646 |
char[] type = CharOperation.subarray(c,1,c.length); |
647 |
CharOperation.replace(type,'/','.'); |
648 |
return type; |
649 |
} |
650 |
} |
551 |
} |
651 |
} |
552 |
|
652 |
|