X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java index 85dacc1..006503e 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java @@ -1,10 +1,10 @@ /******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html - * + * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ @@ -47,12 +47,12 @@ import org.eclipse.swt.widgets.Display; /** * Adapts IDocument to IBuffer. Uses the - * same algorithm as the text widget to determine the buffer's line delimiter. + * same algorithm as the text widget to determine the buffer's line delimiter. * All text inserted into the buffer is converted to this line delimiter. * This class is public for test purposes only. */ public class DocumentAdapter implements IBuffer, IDocumentListener { - + /** * Internal implementation of a NULL instanceof IBuffer. */ @@ -78,38 +78,38 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { public void setContents(char[] contents) {} public void setContents(String contents) {} } - - + + /** NULL implementing IBuffer */ public final static IBuffer NULL= new NullBuffer(); - - + + /** * Executes a document set content call in the ui thread. */ protected class DocumentSetCommand implements Runnable { - + private String fContents; - + public void run() { fDocument.set(fContents); } - + public void set(String contents) { fContents= contents; Display.getDefault().syncExec(this); } } - + /** * Executes a document replace call in the ui thread. */ protected class DocumentReplaceCommand implements Runnable { - + private int fOffset; private int fLength; private String fText; - + public void run() { try { fDocument.replace(fOffset, fLength, fText); @@ -117,7 +117,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { // ignore } } - + public void replace(int offset, int length, String text) { fOffset= offset; fLength= length; @@ -125,34 +125,34 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { Display.getDefault().syncExec(this); } } - + private static final boolean DEBUG_LINE_DELIMITERS= true; - + private IOpenable fOwner; private IFile fFile; private ITextFileBuffer fTextFileBuffer; private IDocument fDocument; - + private DocumentSetCommand fSetCmd= new DocumentSetCommand(); private DocumentReplaceCommand fReplaceCmd= new DocumentReplaceCommand(); - + private Set fLegalLineDelimiters; - + private List fBufferListeners= new ArrayList(3); private IStatus fStatus; - - + + /** * This method is public for test purposes only. */ public DocumentAdapter(IOpenable owner, IFile file) { - + fOwner= owner; fFile= file; - + initialize(); } - + private void initialize() { ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager(); IPath location= fFile.getFullPath(); @@ -166,7 +166,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { } fDocument.addPrenotifiedDocumentListener(this); } - + /** * Returns the status of this document adapter. */ @@ -177,16 +177,16 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { return fTextFileBuffer.getStatus(); return null; } - + /** * Returns the adapted document. - * + * * @return the adapted document */ public IDocument getDocument() { return fDocument; } - + /* * @see IBuffer#addBufferChangedListener(IBufferChangedListener) */ @@ -195,7 +195,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { if (!fBufferListeners.contains(listener)) fBufferListeners.add(listener); } - + /* * @see IBuffer#removeBufferChangedListener(IBufferChangedListener) */ @@ -203,16 +203,16 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { Assert.isNotNull(listener); fBufferListeners.remove(listener); } - + /* * @see IBuffer#append(char[]) */ public void append(char[] text) { append(new String(text)); } - + /* - * @see IBuffer#append(String) + * @see IBuffer#append(String) */ public void append(String text) { if (DEBUG_LINE_DELIMITERS) { @@ -220,19 +220,19 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { } fReplaceCmd.replace(fDocument.getLength(), 0, text); } - + /* * @see IBuffer#close() */ public void close() { - + if (isClosed()) return; - + IDocument d= fDocument; fDocument= null; d.removePrenotifiedDocumentListener(this); - + if (fTextFileBuffer != null) { ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager(); try { @@ -242,11 +242,11 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { } fTextFileBuffer= null; } - + fireBufferChanged(new BufferChangedEvent(this, 0, 0, null)); fBufferListeners.clear(); } - + /* * @see IBuffer#getChar(int) */ @@ -257,7 +257,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { throw new ArrayIndexOutOfBoundsException(); } } - + /* * @see IBuffer#getCharacters() */ @@ -265,28 +265,28 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { String content= getContents(); return content == null ? null : content.toCharArray(); } - + /* * @see IBuffer#getContents() */ public String getContents() { return fDocument.get(); } - + /* * @see IBuffer#getLength() */ public int getLength() { return fDocument.getLength(); } - + /* * @see IBuffer#getOwner() */ public IOpenable getOwner() { return fOwner; } - + /* * @see IBuffer#getText(int, int) */ @@ -297,43 +297,43 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { throw new ArrayIndexOutOfBoundsException(); } } - + /* * @see IBuffer#getUnderlyingResource() */ public IResource getUnderlyingResource() { return fFile; } - + /* * @see IBuffer#hasUnsavedChanges() */ public boolean hasUnsavedChanges() { return fTextFileBuffer != null ? fTextFileBuffer.isDirty() : false; } - + /* * @see IBuffer#isClosed() */ public boolean isClosed() { return fDocument == null; } - + /* * @see IBuffer#isReadOnly() */ public boolean isReadOnly() { IResource resource= getUnderlyingResource(); - return resource == null ? true : resource.isReadOnly(); + return resource == null ? true : resource.getResourceAttributes().isReadOnly(); } - + /* * @see IBuffer#replace(int, int, char[]) */ public void replace(int position, int length, char[] text) { replace(position, length, new String(text)); } - + /* * @see IBuffer#replace(int, int, String) */ @@ -343,7 +343,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { } fReplaceCmd.replace(position, length, text); } - + /* * @see IBuffer#save(IProgressMonitor, boolean) */ @@ -355,38 +355,38 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { throw new JavaModelException(e); } } - + /* * @see IBuffer#setContents(char[]) */ public void setContents(char[] contents) { setContents(new String(contents)); } - + /* * @see IBuffer#setContents(String) */ public void setContents(String contents) { int oldLength= fDocument.getLength(); - + if (contents == null) { - + if (oldLength != 0) fSetCmd.set(""); //$NON-NLS-1$ - + } else { - + // set only if different if (DEBUG_LINE_DELIMITERS) { validateLineDelimiters(contents); } - + if (!contents.equals(fDocument.get())) fSetCmd.set(contents); } } - - + + private void validateLineDelimiters(String contents) { if (fLegalLineDelimiters == null) { @@ -407,16 +407,16 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { return; // first insertion of a line delimiter: no test } fLegalLineDelimiters= existingDelimiters; - + } - + DefaultLineTracker tracker= new DefaultLineTracker(); tracker.set(contents); - + int lines= tracker.getNumberOfLines(); if (lines <= 1) return; - + for (int i= 0; i < lines; i++) { try { String curr= tracker.getLineDelimiter(i); @@ -446,7 +446,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { public void documentChanged(DocumentEvent event) { fireBufferChanged(new BufferChangedEvent(this, event.getOffset(), event.getLength(), event.getText())); } - + private void fireBufferChanged(BufferChangedEvent event) { if (fBufferListeners != null && fBufferListeners.size() > 0) { Iterator e= new ArrayList(fBufferListeners).iterator();