Lines 625-641
Link Here
|
625 |
* @see Openable |
625 |
* @see Openable |
626 |
*/ |
626 |
*/ |
627 |
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException { |
627 |
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException { |
|
|
628 |
// Check the cache for the top-level type first |
629 |
IType sourceType = getSourceType(); |
630 |
IBuffer buffer = getBufferManager().getBuffer(sourceType.getClassFile()); |
628 |
SourceMapper mapper = getSourceMapper(); |
631 |
SourceMapper mapper = getSourceMapper(); |
629 |
if (mapper != null) { |
632 |
IBinaryType typeInfo = info instanceof IBinaryType ? (IBinaryType) info : null; |
630 |
return mapSource(mapper, info instanceof IBinaryType ? (IBinaryType) info : null); |
633 |
if (buffer == null) { |
|
|
634 |
if (mapper != null) { |
635 |
buffer = mapSource(mapper, typeInfo, sourceType.getClassFile()); |
636 |
} |
631 |
} |
637 |
} |
632 |
return null; |
638 |
return buffer; |
633 |
} |
639 |
} |
634 |
private IBuffer mapSource(SourceMapper mapper, IBinaryType info) { |
640 |
/** Loads the buffer via SourceMapper, and maps it in SourceMapper */ |
|
|
641 |
private IBuffer mapSource(SourceMapper mapper, IBinaryType info, IClassFile bufferOwner) { |
635 |
char[] contents = mapper.findSource(getType(), info); |
642 |
char[] contents = mapper.findSource(getType(), info); |
636 |
if (contents != null) { |
643 |
if (contents != null) { |
637 |
// create buffer |
644 |
// create buffer |
638 |
IBuffer buffer = BufferManager.createBuffer(this); |
645 |
IBuffer buffer = BufferManager.createBuffer(bufferOwner); |
639 |
if (buffer == null) return null; |
646 |
if (buffer == null) return null; |
640 |
BufferManager bufManager = getBufferManager(); |
647 |
BufferManager bufManager = getBufferManager(); |
641 |
bufManager.addBuffer(buffer); |
648 |
bufManager.addBuffer(buffer); |
Lines 649-660
Link Here
|
649 |
buffer.addBufferChangedListener(this); |
656 |
buffer.addBufferChangedListener(this); |
650 |
|
657 |
|
651 |
// do the source mapping |
658 |
// do the source mapping |
652 |
mapper.mapSource(getType(), contents, info); |
659 |
mapper.mapSource(getSourceType(), contents, info); |
653 |
|
660 |
|
654 |
return buffer; |
661 |
return buffer; |
655 |
} else { |
662 |
} else { |
656 |
// create buffer |
663 |
// create buffer |
657 |
IBuffer buffer = BufferManager.createNullBuffer(this); |
664 |
IBuffer buffer = BufferManager.createNullBuffer(bufferOwner); |
658 |
if (buffer == null) return null; |
665 |
if (buffer == null) return null; |
659 |
BufferManager bufManager = getBufferManager(); |
666 |
BufferManager bufManager = getBufferManager(); |
660 |
bufManager.addBuffer(buffer); |
667 |
bufManager.addBuffer(buffer); |
Lines 674-679
Link Here
|
674 |
else |
681 |
else |
675 |
return simpleName; |
682 |
return simpleName; |
676 |
} |
683 |
} |
|
|
684 |
|
685 |
/** Returns the type of the top-level declaring class used to find the source code */ |
686 |
private IType getSourceType() { |
687 |
IType type = getType(); |
688 |
IType enclosingType = type.getDeclaringType(); |
689 |
while (enclosingType != null) { |
690 |
type = enclosingType; |
691 |
enclosingType = type.getDeclaringType(); |
692 |
} |
693 |
return type; |
694 |
} |
695 |
|
677 |
/** |
696 |
/** |
678 |
* Returns the Java Model representation of the given name |
697 |
* Returns the Java Model representation of the given name |
679 |
* which is provided in diet class file format, or <code>null</code> |
698 |
* which is provided in diet class file format, or <code>null</code> |