Lines 1021-1063
Link Here
|
1021 |
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException { |
1021 |
protected IBuffer openBuffer(IProgressMonitor pm, Object info) throws JavaModelException { |
1022 |
|
1022 |
|
1023 |
// create buffer |
1023 |
// create buffer |
|
|
1024 |
BufferManager bufManager = getBufferManager(); |
1024 |
boolean isWorkingCopy = isWorkingCopy(); |
1025 |
boolean isWorkingCopy = isWorkingCopy(); |
1025 |
IBuffer buffer = |
1026 |
IBuffer buffer = |
1026 |
isWorkingCopy |
1027 |
isWorkingCopy |
1027 |
? this.owner.createBuffer(this) |
1028 |
? this.owner.createBuffer(this) |
1028 |
: BufferManager.getDefaultBufferManager().createBuffer(this); |
1029 |
: bufManager.createBuffer(this); |
1029 |
if (buffer == null) return null; |
1030 |
if (buffer == null) return null; |
1030 |
|
1031 |
|
1031 |
// set the buffer source |
1032 |
// synchronize to ensure that 2 threads are not putting 2 different buffers at the same time |
1032 |
if (buffer.getCharacters() == null) { |
1033 |
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=146331 |
1033 |
if (isWorkingCopy) { |
1034 |
synchronized(bufManager) { |
1034 |
ICompilationUnit original; |
1035 |
IBuffer existingBuffer = bufManager.getBuffer(this); |
1035 |
if (!isPrimary() |
1036 |
if (existingBuffer != null) |
1036 |
&& (original = new CompilationUnit((PackageFragment)getParent(), getElementName(), DefaultWorkingCopyOwner.PRIMARY)).isOpen()) { |
1037 |
return existingBuffer; |
1037 |
buffer.setContents(original.getSource()); |
1038 |
|
1038 |
} else { |
1039 |
// set the buffer source |
1039 |
IFile file = (IFile)getResource(); |
1040 |
if (buffer.getCharacters() == null) { |
1040 |
if (file == null || !file.exists()) { |
1041 |
if (isWorkingCopy) { |
1041 |
// initialize buffer with empty contents |
1042 |
ICompilationUnit original; |
1042 |
buffer.setContents(CharOperation.NO_CHAR); |
1043 |
if (!isPrimary() |
|
|
1044 |
&& (original = new CompilationUnit((PackageFragment)getParent(), getElementName(), DefaultWorkingCopyOwner.PRIMARY)).isOpen()) { |
1045 |
buffer.setContents(original.getSource()); |
1043 |
} else { |
1046 |
} else { |
1044 |
buffer.setContents(Util.getResourceContentsAsCharArray(file)); |
1047 |
IFile file = (IFile)getResource(); |
|
|
1048 |
if (file == null || !file.exists()) { |
1049 |
// initialize buffer with empty contents |
1050 |
buffer.setContents(CharOperation.NO_CHAR); |
1051 |
} else { |
1052 |
buffer.setContents(Util.getResourceContentsAsCharArray(file)); |
1053 |
} |
1045 |
} |
1054 |
} |
|
|
1055 |
} else { |
1056 |
IFile file = (IFile)this.getResource(); |
1057 |
if (file == null || !file.exists()) throw newNotPresentException(); |
1058 |
buffer.setContents(Util.getResourceContentsAsCharArray(file)); |
1046 |
} |
1059 |
} |
1047 |
} else { |
|
|
1048 |
IFile file = (IFile)this.getResource(); |
1049 |
if (file == null || !file.exists()) throw newNotPresentException(); |
1050 |
buffer.setContents(Util.getResourceContentsAsCharArray(file)); |
1051 |
} |
1060 |
} |
1052 |
} |
|
|
1053 |
|
1054 |
// add buffer to buffer cache |
1055 |
BufferManager bufManager = getBufferManager(); |
1056 |
bufManager.addBuffer(buffer); |
1057 |
|
1058 |
// listen to buffer changes |
1059 |
buffer.addBufferChangedListener(this); |
1060 |
|
1061 |
|
|
|
1062 |
// add buffer to buffer cache |
1063 |
bufManager.addBuffer(buffer); |
1064 |
|
1065 |
// listen to buffer changes |
1066 |
buffer.addBufferChangedListener(this); |
1067 |
} |
1061 |
return buffer; |
1068 |
return buffer; |
1062 |
} |
1069 |
} |
1063 |
protected void openParent(Object childInfo, HashMap newElements, IProgressMonitor pm) throws JavaModelException { |
1070 |
protected void openParent(Object childInfo, HashMap newElements, IProgressMonitor pm) throws JavaModelException { |