X-Git-Url: http://secure.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 <code>IDocument</code> to <code>IBuffer</code>. 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 <code>public</code> for test purposes only.
+ * Adapts <code>IDocument</code> to <code>IBuffer</code>. 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 <code>public</code> 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 <code>IBuffer</code> */
-		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 <code>IBuffer</code> */
+	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 <code>public</code> 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);
 		}