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..6c0bdff 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/DocumentAdapter.java @@ -1,17 +1,16 @@ /******************************************************************************* * 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 *******************************************************************************/ package net.sourceforge.phpeclipse.phpeditor; - import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -43,130 +42,182 @@ import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentListener; 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. - * All text inserted into the buffer is converted to this line delimiter. - * This class is public for test purposes only. + * Adapts IDocument to IBuffer. Uses the 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. - */ - static private class NullBuffer implements IBuffer { - public void addBufferChangedListener(IBufferChangedListener listener) {} - public void append(char[] text) {} - public void append(String text) {} - public void close() {} - public char getChar(int position) { return 0; } - public char[] getCharacters() { return null; } - public String getContents() { return null; } - public int getLength() { return 0; } - public IOpenable getOwner() { return null; } - public String getText(int offset, int length) { return null; } - public IResource getUnderlyingResource() { return null; } - public boolean hasUnsavedChanges() { return false; } - public boolean isClosed() { return false; } - public boolean isReadOnly() { return true; } - public void removeBufferChangedListener(IBufferChangedListener listener) {} - public void replace(int position, int length, char[] text) {} - public void replace(int position, int length, String text) {} - public void save(IProgressMonitor progress, boolean force) throws JavaModelException {} - 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); - } + + /** + * Internal implementation of a NULL instanceof IBuffer. + */ + static private class NullBuffer implements IBuffer { + public void addBufferChangedListener(IBufferChangedListener listener) { } - - /** - * 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); - } catch (BadLocationException x) { - // ignore - } - } - - public void replace(int offset, int length, String text) { - fOffset= offset; - fLength= length; - fText= text; - Display.getDefault().syncExec(this); + + public void append(char[] text) { + } + + public void append(String text) { + } + + public void close() { + } + + public char getChar(int position) { + return 0; + } + + public char[] getCharacters() { + return null; + } + + public String getContents() { + return null; + } + + public int getLength() { + return 0; + } + + public IOpenable getOwner() { + return null; + } + + public String getText(int offset, int length) { + return null; + } + + public IResource getUnderlyingResource() { + return null; + } + + public boolean hasUnsavedChanges() { + return false; + } + + public boolean isClosed() { + return false; + } + + public boolean isReadOnly() { + return true; + } + + public void removeBufferChangedListener(IBufferChangedListener listener) { + } + + public void replace(int position, int length, char[] text) { + } + + public void replace(int position, int length, String text) { + } + + public void save(IProgressMonitor progress, boolean force) + throws JavaModelException { + } + + 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); + } catch (BadLocationException x) { + // ignore } } - - private static final boolean DEBUG_LINE_DELIMITERS= true; - + + public void replace(int offset, int length, String text) { + fOffset = offset; + fLength = length; + fText = text; + 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 DocumentSetCommand fSetCmd = new DocumentSetCommand(); + + private DocumentReplaceCommand fReplaceCmd = new DocumentReplaceCommand(); + private Set fLegalLineDelimiters; - - private List fBufferListeners= new ArrayList(3); + + 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; - + + fOwner = owner; + fFile = file; + initialize(); } - + private void initialize() { - ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager(); - IPath location= fFile.getFullPath(); + ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager(); + IPath location = fFile.getFullPath(); try { manager.connect(location, new NullProgressMonitor()); - fTextFileBuffer= manager.getTextFileBuffer(location); - fDocument= fTextFileBuffer.getDocument(); + fTextFileBuffer = manager.getTextFileBuffer(location); + fDocument = fTextFileBuffer.getDocument(); } catch (CoreException x) { - fStatus= x.getStatus(); - fDocument= manager.createEmptyDocument(location); + fStatus = x.getStatus(); + fDocument = manager.createEmptyDocument(location); } fDocument.addPrenotifiedDocumentListener(this); } - + /** * Returns the status of this document adapter. */ @@ -177,7 +228,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { return fTextFileBuffer.getStatus(); return null; } - + /** * Returns the adapted document. * @@ -186,7 +237,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { public IDocument getDocument() { return fDocument; } - + /* * @see IBuffer#addBufferChangedListener(IBufferChangedListener) */ @@ -195,7 +246,7 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { if (!fBufferListeners.contains(listener)) fBufferListeners.add(listener); } - + /* * @see IBuffer#removeBufferChangedListener(IBufferChangedListener) */ @@ -203,16 +254,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,33 +271,35 @@ 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; + + IDocument d = fDocument; + fDocument = null; d.removePrenotifiedDocumentListener(this); - + if (fTextFileBuffer != null) { - ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager(); + ITextFileBufferManager manager = FileBuffers + .getTextFileBufferManager(); try { - manager.disconnect(fTextFileBuffer.getLocation(), new NullProgressMonitor()); + manager.disconnect(fTextFileBuffer.getLocation(), + new NullProgressMonitor()); } catch (CoreException x) { // ignore } - fTextFileBuffer= null; + fTextFileBuffer = null; } - + fireBufferChanged(new BufferChangedEvent(this, 0, 0, null)); fBufferListeners.clear(); } - + /* * @see IBuffer#getChar(int) */ @@ -257,36 +310,36 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { throw new ArrayIndexOutOfBoundsException(); } } - + /* - * @see IBuffer#getCharacters() + * @see IBuffer#getCharacters() */ public char[] getCharacters() { - String content= getContents(); + 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 +350,44 @@ 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(); + IResource resource = getUnderlyingResource(); + 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,11 +397,12 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { } fReplaceCmd.replace(position, length, text); } - + /* * @see IBuffer#save(IProgressMonitor, boolean) */ - public void save(IProgressMonitor progress, boolean force) throws JavaModelException { + public void save(IProgressMonitor progress, boolean force) + throws JavaModelException { try { if (fTextFileBuffer != null) fTextFileBuffer.commit(progress, force); @@ -355,47 +410,46 @@ 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(); - + 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) { // collect all line delimiters in the document - HashSet existingDelimiters= new HashSet(); + HashSet existingDelimiters = new HashSet(); - for (int i= fDocument.getNumberOfLines() - 1; i >= 0; i-- ) { + for (int i = fDocument.getNumberOfLines() - 1; i >= 0; i--) { try { - String curr= fDocument.getLineDelimiter(i); + String curr = fDocument.getLineDelimiter(i); if (curr != null) { existingDelimiters.add(curr); } @@ -406,23 +460,24 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { if (existingDelimiters.isEmpty()) { return; // first insertion of a line delimiter: no test } - fLegalLineDelimiters= existingDelimiters; - + fLegalLineDelimiters = existingDelimiters; + } - - DefaultLineTracker tracker= new DefaultLineTracker(); + + DefaultLineTracker tracker = new DefaultLineTracker(); tracker.set(contents); - - int lines= tracker.getNumberOfLines(); + + int lines = tracker.getNumberOfLines(); if (lines <= 1) return; - - for (int i= 0; i < lines; i++) { + + for (int i = 0; i < lines; i++) { try { - String curr= tracker.getLineDelimiter(i); + String curr = tracker.getLineDelimiter(i); if (curr != null && !fLegalLineDelimiters.contains(curr)) { - StringBuffer buf= new StringBuffer("New line delimiter added to new code: "); //$NON-NLS-1$ - for (int k= 0; k < curr.length(); k++) { + StringBuffer buf = new StringBuffer( + "New line delimiter added to new code: "); //$NON-NLS-1$ + for (int k = 0; k < curr.length(); k++) { buf.append(String.valueOf((int) curr.charAt(k))); } PHPeclipsePlugin.log(new Exception(buf.toString())); @@ -444,12 +499,13 @@ public class DocumentAdapter implements IBuffer, IDocumentListener { * @see IDocumentListener#documentChanged(DocumentEvent) */ public void documentChanged(DocumentEvent event) { - fireBufferChanged(new BufferChangedEvent(this, event.getOffset(), event.getLength(), event.getText())); + 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(); + Iterator e = new ArrayList(fBufferListeners).iterator(); while (e.hasNext()) ((IBufferChangedListener) e.next()).bufferChanged(event); }