X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Openable.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Openable.java
index 4fbafee..7b9b52c 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Openable.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Openable.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
*******************************************************************************/
@@ -20,6 +20,7 @@ import net.sourceforge.phpdt.core.BufferChangedEvent;
import net.sourceforge.phpdt.core.IBuffer;
import net.sourceforge.phpdt.core.IBufferChangedListener;
import net.sourceforge.phpdt.core.IBufferFactory;
+import net.sourceforge.phpdt.core.ICodeAssist;
import net.sourceforge.phpdt.core.IJavaElement;
import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
import net.sourceforge.phpdt.core.IOpenable;
@@ -35,603 +36,723 @@ import org.eclipse.core.runtime.IProgressMonitor;
/**
* Abstract class for implementations of java elements which are IOpenable.
- *
+ *
* @see IJavaElement
* @see IOpenable
*/
-public abstract class Openable extends JavaElement implements IOpenable, IBufferChangedListener {
+public abstract class Openable extends JavaElement implements IOpenable,
+ IBufferChangedListener {
+
+ protected Openable(JavaElement parent, String name) {
+ super(parent, name);
+ }
-protected Openable(JavaElement parent, String name) {
- super(parent, name);
-}
/**
- * The buffer associated with this element has changed. Registers
- * this element as being out of synch with its buffer's contents.
- * If the buffer has been closed, this element is set as NOT out of
- * synch with the contents.
- *
+ * The buffer associated with this element has changed. Registers this
+ * element as being out of synch with its buffer's contents. If the buffer
+ * has been closed, this element is set as NOT out of synch with the
+ * contents.
+ *
* @see IBufferChangedListener
*/
public void bufferChanged(BufferChangedEvent event) {
if (event.getBuffer().isClosed()) {
- JavaModelManager.getJavaModelManager().getElementsOutOfSynchWithBuffers().remove(this);
+ JavaModelManager.getJavaModelManager()
+ .getElementsOutOfSynchWithBuffers().remove(this);
getBufferManager().removeBuffer(event.getBuffer());
} else {
- JavaModelManager.getJavaModelManager().getElementsOutOfSynchWithBuffers().put(this, this);
+ JavaModelManager.getJavaModelManager()
+ .getElementsOutOfSynchWithBuffers().put(this, this);
}
- }
-
+ }
+
/**
- * Builds this element's structure and properties in the given
- * info object, based on this element's current contents (reuse buffer
- * contents if this element has an open buffer, or resource contents
- * if this element does not have an open buffer). Children
- * are placed in the given newElements table (note, this element
- * has already been placed in the newElements table). Returns true
- * if successful, or false if an error is encountered while determining
- * the structure of this element.
+ * Builds this element's structure and properties in the given info object,
+ * based on this element's current contents (reuse buffer contents if this
+ * element has an open buffer, or resource contents if this element does not
+ * have an open buffer). Children are placed in the given newElements table
+ * (note, this element has already been placed in the newElements table).
+ * Returns true if successful, or false if an error is encountered while
+ * determining the structure of this element.
*/
- protected abstract boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException;
-
-///**
-// * Updates the info objects for this element and all of its children by
-// * removing the current infos, generating new infos, and then placing
-// * the new infos into the Java Model cache tables.
-// */
-//protected void buildStructure(OpenableElementInfo info, IProgressMonitor monitor) throws JavaModelException {
-//
-// if (monitor != null && monitor.isCanceled()) return;
-//
-// // remove existing (old) infos
-// removeInfo();
-// HashMap newElements = new HashMap(11);
-// info.setIsStructureKnown(generateInfos(info, monitor, newElements, getResource()));
-// JavaModelManager.getJavaModelManager().getElementsOutOfSynchWithBuffers().remove(this);
-// for (Iterator iter = newElements.keySet().iterator(); iter.hasNext();) {
-// IJavaElement key = (IJavaElement) iter.next();
-// Object value = newElements.get(key);
-// JavaModelManager.getJavaModelManager().putInfo(key, value);
-// }
-//
-// // add the info for this at the end, to ensure that a getInfo cannot reply null in case the LRU cache needs
-// // to be flushed. Might lead to performance issues.
-// // see PR 1G2K5S7: ITPJCORE:ALL - NPE when accessing source for a binary type
-// JavaModelManager.getJavaModelManager().putInfo(this, info);
-//}
-/*
- * Returns whether this element can be removed from the Java model cache to make space.
- */
-public boolean canBeRemovedFromCache() {
- try {
- return !hasUnsavedChanges();
- } catch (JavaModelException e) {
- return false;
+ protected abstract boolean buildStructure(OpenableElementInfo info,
+ IProgressMonitor pm, Map newElements, IResource underlyingResource)
+ throws JavaModelException;
+
+ // /**
+ // * Updates the info objects for this element and all of its children by
+ // * removing the current infos, generating new infos, and then placing
+ // * the new infos into the Java Model cache tables.
+ // */
+ // protected void buildStructure(OpenableElementInfo info, IProgressMonitor
+ // monitor) throws JavaModelException {
+ //
+ // if (monitor != null && monitor.isCanceled()) return;
+ //
+ // // remove existing (old) infos
+ // removeInfo();
+ // HashMap newElements = new HashMap(11);
+ // info.setIsStructureKnown(generateInfos(info, monitor, newElements,
+ // getResource()));
+ // JavaModelManager.getJavaModelManager().getElementsOutOfSynchWithBuffers().remove(this);
+ // for (Iterator iter = newElements.keySet().iterator(); iter.hasNext();) {
+ // IJavaElement key = (IJavaElement) iter.next();
+ // Object value = newElements.get(key);
+ // JavaModelManager.getJavaModelManager().putInfo(key, value);
+ // }
+ //
+ // // add the info for this at the end, to ensure that a getInfo cannot
+ // reply null in case the LRU cache needs
+ // // to be flushed. Might lead to performance issues.
+ // // see PR 1G2K5S7: ITPJCORE:ALL - NPE when accessing source for a binary
+ // type
+ // JavaModelManager.getJavaModelManager().putInfo(this, info);
+ // }
+ /*
+ * Returns whether this element can be removed from the Java model cache to
+ * make space.
+ */
+ public boolean canBeRemovedFromCache() {
+ try {
+ return !hasUnsavedChanges();
+ } catch (JavaModelException e) {
+ return false;
+ }
}
-}
-/*
- * Returns whether the buffer of this element can be removed from the Java model cache to make space.
- */
-public boolean canBufferBeRemovedFromCache(IBuffer buffer) {
- return !buffer.hasUnsavedChanges();
-}
-/**
- * Close the buffer associated with this element, if any.
- */
-protected void closeBuffer() {
- if (!hasBuffer()) return; // nothing to do
- IBuffer buffer = getBufferManager().getBuffer(this);
- if (buffer != null) {
- buffer.close();
- buffer.removeBufferChangedListener(this);
+
+ /*
+ * Returns whether the buffer of this element can be removed from the Java
+ * model cache to make space.
+ */
+ public boolean canBufferBeRemovedFromCache(IBuffer buffer) {
+ return !buffer.hasUnsavedChanges();
}
-}
-/**
- * Close the buffer associated with this element, if any.
- */
-protected void closeBuffer(OpenableElementInfo info) {
- if (!hasBuffer()) return; // nothing to do
- IBuffer buffer = null;
- buffer = getBufferManager().getBuffer(this);
- if (buffer != null) {
- buffer.close();
- buffer.removeBufferChangedListener(this);
+
+ /**
+ * Close the buffer associated with this element, if any.
+ */
+ protected void closeBuffer() {
+ if (!hasBuffer())
+ return; // nothing to do
+ IBuffer buffer = getBufferManager().getBuffer(this);
+ if (buffer != null) {
+ buffer.close();
+ buffer.removeBufferChangedListener(this);
+ }
}
-}
-/**
- * This element is being closed. Do any necessary cleanup.
- */
-protected void closing(Object info) {
- closeBuffer();
-}
-///**
-// * @see ICodeAssist
-// */
-//protected void codeComplete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit cu, org.eclipse.jdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, ICompletionRequestor requestor) throws JavaModelException {
-// if (requestor == null) {
-// throw new IllegalArgumentException(Util.bind("codeAssist.nullRequestor")); //$NON-NLS-1$
-// }
-// IBuffer buffer = getBuffer();
-// if (buffer == null) {
-// return;
-// }
-// if (position < -1 || position > buffer.getLength()) {
-// throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INDEX_OUT_OF_BOUNDS));
-// }
-// JavaProject project = (JavaProject) getJavaProject();
-// SearchableEnvironment environment = (SearchableEnvironment) project.getSearchableNameEnvironment();
-// NameLookup nameLookup = project.getNameLookup();
-// environment.unitToSkip = unitToSkip;
-//
-// CompletionEngine engine = new CompletionEngine(environment, new CompletionRequestorWrapper(requestor,nameLookup), project.getOptions(true), project);
-// engine.complete(cu, position, 0);
-// environment.unitToSkip = null;
-//}
-/**
- * @see ICodeAssist
- */
-//protected IJavaElement[] codeSelect(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit cu, int offset, int length) throws JavaModelException {
-// SelectionRequestor requestor= new SelectionRequestor(((JavaProject)getJavaProject()).getNameLookup(), this);
-// this.codeSelect(cu, offset, length, requestor);
-// return requestor.getElements();
-//}
-/**
- * @see ICodeAssist
- */
-//protected void codeSelect(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit cu, int offset, int length, ISelectionRequestor requestor) throws JavaModelException {
-// IBuffer buffer = getBuffer();
-// if (buffer == null) {
-// return;
-// }
-// int end= buffer.getLength();
-// if (offset < 0 || length < 0 || offset + length > end ) {
-// throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.INDEX_OUT_OF_BOUNDS));
-// }
-//
-// // fix for 1FVGGKF
-// JavaProject project = (JavaProject)getJavaProject();
-// ISearchableNameEnvironment environment = project.getSearchableNameEnvironment();
-//
-// // fix for 1FVXGDK
-// SelectionEngine engine = new SelectionEngine(environment, requestor, project.getOptions(true));
-// engine.select(cu, offset, offset + length - 1);
-//}
-/*
- * Returns a new element info for this element.
- */
-protected Object createElementInfo() {
- return new OpenableElementInfo();
-}
-///**
-// * Builds this element's structure and properties in the given
-// * info object, based on this element's current contents (reuse buffer
-// * contents if this element has an open buffer, or resource contents
-// * if this element does not have an open buffer). Children
-// * are placed in the given newElements table (note, this element
-// * has already been placed in the newElements table). Returns true
-// * if successful, or false if an error is encountered while determining
-// * the structure of this element.
-// */
-//protected abstract boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException;
-
-protected void generateInfos(Object info, HashMap newElements, IProgressMonitor monitor) throws JavaModelException {
-
- if (JavaModelManager.VERBOSE){
- System.out.println("OPENING Element ("+ Thread.currentThread()+"): " + this.toStringWithAncestors()); //$NON-NLS-1$//$NON-NLS-2$
+ /**
+ * Close the buffer associated with this element, if any.
+ */
+ protected void closeBuffer(OpenableElementInfo info) {
+ if (!hasBuffer())
+ return; // nothing to do
+ IBuffer buffer = null;
+ buffer = getBufferManager().getBuffer(this);
+ if (buffer != null) {
+ buffer.close();
+ buffer.removeBufferChangedListener(this);
+ }
}
-
- // open the parent if necessary
- openParent(info, newElements, monitor);
- if (monitor != null && monitor.isCanceled()) return;
-
- // puts the info before building the structure so that questions to the handle behave as if the element existed
- // (case of compilation units becoming working copies)
- newElements.put(this, info);
-
- // build the structure of the openable (this will open the buffer if needed)
- try {
- OpenableElementInfo openableElementInfo = (OpenableElementInfo)info;
- boolean isStructureKnown = buildStructure(openableElementInfo, monitor, newElements, getResource());
- openableElementInfo.setIsStructureKnown(isStructureKnown);
- } catch (JavaModelException e) {
- newElements.remove(this);
- throw e;
+
+ /**
+ * This element is being closed. Do any necessary cleanup.
+ */
+ protected void closing(Object info) {
+ closeBuffer();
}
-
- // remove out of sync buffer for this element
- JavaModelManager.getJavaModelManager().getElementsOutOfSynchWithBuffers().remove(this);
- if (JavaModelManager.VERBOSE) {
- System.out.println("-> Package cache size = " + JavaModelManager.getJavaModelManager().cache.pkgSize()); //$NON-NLS-1$
- System.out.println("-> Openable cache filling ratio = " + NumberFormat.getInstance().format(JavaModelManager.getJavaModelManager().cache.openableFillingRatio()) + "%"); //$NON-NLS-1$//$NON-NLS-2$
+ // /**
+ // * @see ICodeAssist
+ // */
+ // protected void
+ // codeComplete(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // cu, net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // unitToSkip, int position, ICompletionRequestor requestor) throws
+ // JavaModelException {
+ // if (requestor == null) {
+ // throw new
+ // IllegalArgumentException(ProjectPrefUtil.bind("codeAssist.nullRequestor"));
+ // //$NON-NLS-1$
+ // }
+ // IBuffer buffer = getBuffer();
+ // if (buffer == null) {
+ // return;
+ // }
+ // if (position < -1 || position > buffer.getLength()) {
+ // throw new JavaModelException(new
+ // JavaModelStatus(IJavaModelStatusConstants.INDEX_OUT_OF_BOUNDS));
+ // }
+ // JavaProject project = (JavaProject) getJavaProject();
+ // SearchableEnvironment environment = (SearchableEnvironment)
+ // project.getSearchableNameEnvironment();
+ // NameLookup nameLookup = project.getNameLookup();
+ // environment.unitToSkip = unitToSkip;
+ //
+ // CompletionEngine engine = new CompletionEngine(environment, new
+ // CompletionRequestorWrapper(requestor,nameLookup),
+ // project.getOptions(true), project);
+ // engine.complete(cu, position, 0);
+ // environment.unitToSkip = null;
+ // }
+ /**
+ * @see ICodeAssist
+ */
+ // protected IJavaElement[]
+ // codeSelect(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // cu, int offset, int length) throws JavaModelException {
+ // SelectionRequestor requestor= new
+ // SelectionRequestor(((JavaProject)getJavaProject()).getNameLookup(),
+ // this);
+ // this.codeSelect(cu, offset, length, requestor);
+ // return requestor.getElements();
+ // }
+ /**
+ * @see ICodeAssist
+ */
+ // protected void
+ // codeSelect(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // cu, int offset, int length, ISelectionRequestor requestor) throws
+ // JavaModelException {
+ // IBuffer buffer = getBuffer();
+ // if (buffer == null) {
+ // return;
+ // }
+ // int end= buffer.getLength();
+ // if (offset < 0 || length < 0 || offset + length > end ) {
+ // throw new JavaModelException(new
+ // JavaModelStatus(IJavaModelStatusConstants.INDEX_OUT_OF_BOUNDS));
+ // }
+ //
+ // // fix for 1FVGGKF
+ // JavaProject project = (JavaProject)getJavaProject();
+ // ISearchableNameEnvironment environment =
+ // project.getSearchableNameEnvironment();
+ //
+ // // fix for 1FVXGDK
+ // SelectionEngine engine = new SelectionEngine(environment, requestor,
+ // project.getOptions(true));
+ // engine.select(cu, offset, offset + length - 1);
+ // }
+ /*
+ * Returns a new element info for this element.
+ */
+ protected Object createElementInfo() {
+ return new OpenableElementInfo();
}
-}
-/**
- * Note: a buffer with no unsaved changes can be closed by the Java Model
- * since it has a finite number of buffers allowed open at one time. If this
- * is the first time a request is being made for the buffer, an attempt is
- * made to create and fill this element's buffer. If the buffer has been
- * closed since it was first opened, the buffer is re-created.
- *
- * @see IOpenable
- */
-public IBuffer getBuffer() throws JavaModelException {
- if (hasBuffer()) {
- // ensure element is open
- if (!isOpen()) {
- getElementInfo();
+
+ // /**
+ // * Builds this element's structure and properties in the given
+ // * info object, based on this element's current contents (reuse buffer
+ // * contents if this element has an open buffer, or resource contents
+ // * if this element does not have an open buffer). Children
+ // * are placed in the given newElements table (note, this element
+ // * has already been placed in the newElements table). Returns true
+ // * if successful, or false if an error is encountered while determining
+ // * the structure of this element.
+ // */
+ // protected abstract boolean generateInfos(OpenableElementInfo info,
+ // IProgressMonitor pm, Map newElements, IResource underlyingResource)
+ // throws JavaModelException;
+
+ protected void generateInfos(Object info, HashMap newElements,
+ IProgressMonitor monitor) throws JavaModelException {
+
+ if (JavaModelManager.VERBOSE) {
+ System.out
+ .println("OPENING Element (" + Thread.currentThread() + "): " + this.toStringWithAncestors()); //$NON-NLS-1$//$NON-NLS-2$
}
- IBuffer buffer = getBufferManager().getBuffer(this);
- if (buffer == null) {
- // try to (re)open a buffer
- buffer = openBuffer(null);
+
+ // open the parent if necessary
+ openParent(info, newElements, monitor);
+ if (monitor != null && monitor.isCanceled())
+ return;
+
+ // puts the info before building the structure so that questions to the
+ // handle behave as if the element existed
+ // (case of compilation units becoming working copies)
+ newElements.put(this, info);
+
+ // build the structure of the openable (this will open the buffer if
+ // needed)
+ try {
+ OpenableElementInfo openableElementInfo = (OpenableElementInfo) info;
+ boolean isStructureKnown = buildStructure(openableElementInfo,
+ monitor, newElements, getResource());
+ openableElementInfo.setIsStructureKnown(isStructureKnown);
+ } catch (JavaModelException e) {
+ newElements.remove(this);
+ throw e;
+ }
+
+ // remove out of sync buffer for this element
+ JavaModelManager.getJavaModelManager()
+ .getElementsOutOfSynchWithBuffers().remove(this);
+
+ if (JavaModelManager.VERBOSE) {
+ System.out
+ .println("-> Package cache size = " + JavaModelManager.getJavaModelManager().cache.pkgSize()); //$NON-NLS-1$
+ System.out
+ .println("-> Openable cache filling ratio = " + NumberFormat.getInstance().format(JavaModelManager.getJavaModelManager().cache.openableFillingRatio()) + "%"); //$NON-NLS-1$//$NON-NLS-2$
}
- return buffer;
- } else {
- return null;
}
-}
-/**
- * Answers the buffer factory to use for creating new buffers
- */
-public IBufferFactory getBufferFactory(){
- return getBufferManager().getDefaultBufferFactory();
-}
+ /**
+ * Note: a buffer with no unsaved changes can be closed by the Java Model
+ * since it has a finite number of buffers allowed open at one time. If this
+ * is the first time a request is being made for the buffer, an attempt is
+ * made to create and fill this element's buffer. If the buffer has been
+ * closed since it was first opened, the buffer is re-created.
+ *
+ * @see IOpenable
+ */
+ public IBuffer getBuffer() throws JavaModelException {
+ if (hasBuffer()) {
+ // ensure element is open
+ if (!isOpen()) {
+ getElementInfo();
+ }
+ IBuffer buffer = getBufferManager().getBuffer(this);
+ if (buffer == null) {
+ // try to (re)open a buffer
+ buffer = openBuffer(null);
+ }
+ return buffer;
+ } else {
+ return null;
+ }
+ }
-/**
- * Returns the buffer manager for this element.
- */
-protected BufferManager getBufferManager() {
- return BufferManager.getDefaultBufferManager();
-}
-/**
- * Return my underlying resource. Elements that may not have a
- * corresponding resource must override this method.
- *
- * @see IJavaElement
- */
-public IResource getCorrespondingResource() throws JavaModelException {
- return getUnderlyingResource();
-}
-/*
- * @see IJavaElement
- */
-public IOpenable getOpenable() {
- return this;
-}
+ /**
+ * Answers the buffer factory to use for creating new buffers
+ */
+ public IBufferFactory getBufferFactory() {
+ return getBufferManager().getDefaultBufferFactory();
+ }
+ /**
+ * Returns the buffer manager for this element.
+ */
+ protected BufferManager getBufferManager() {
+ return BufferManager.getDefaultBufferManager();
+ }
+ /**
+ * Return my underlying resource. Elements that may not have a corresponding
+ * resource must override this method.
+ *
+ * @see IJavaElement
+ */
+ public IResource getCorrespondingResource() throws JavaModelException {
+ return getUnderlyingResource();
+ }
-/**
- * @see IJavaElement
- */
-public IResource getUnderlyingResource() throws JavaModelException {
- IResource parentResource = parent.getUnderlyingResource();
- if (parentResource == null) {
- return null;
+ /*
+ * @see IJavaElement
+ */
+ public IOpenable getOpenable() {
+ return this;
}
- int type = parentResource.getType();
- if (type == IResource.FOLDER || type == IResource.PROJECT) {
- IContainer folder = (IContainer) parentResource;
- IResource resource = folder.findMember(name);
- if (resource == null) {
- throw newNotPresentException();
+
+ /**
+ * @see IJavaElement
+ */
+ public IResource getUnderlyingResource() throws JavaModelException {
+ IResource parentResource = parent.getUnderlyingResource();
+ if (parentResource == null) {
+ return null;
+ }
+ int type = parentResource.getType();
+ if (type == IResource.FOLDER || type == IResource.PROJECT) {
+ IContainer folder = (IContainer) parentResource;
+ IResource resource = folder.findMember(name);
+ if (resource == null) {
+ throw newNotPresentException();
+ } else {
+ return resource;
+ }
} else {
- return resource;
+ return parentResource;
}
- } else {
- return parentResource;
}
-}
-public boolean exists() {
-
- IPackageFragmentRoot root = this.getPackageFragmentRoot();
- if (root == null || root == this || !root.isArchive()) {
- return parentExists() && resourceExists();
- } else {
- return super.exists();
+ public boolean exists() {
+
+ IPackageFragmentRoot root = this.getPackageFragmentRoot();
+ if (root == null || root == this || !root.isArchive()) {
+ return parentExists() && resourceExists();
+ } else {
+ return super.exists();
+ }
}
-}
-/**
- * Returns true if this element may have an associated source buffer,
- * otherwise false. Subclasses must override as required.
- */
-protected boolean hasBuffer() {
- return false;
-}
-/**
- * @see IParent
- */
-public boolean hasChildren() throws JavaModelException {
- return getChildren().length > 0;
-}
-/**
- * @see IOpenable
- */
-public boolean hasUnsavedChanges() throws JavaModelException{
-
- if (isReadOnly() || !isOpen()) {
+ /**
+ * Returns true if this element may have an associated source buffer,
+ * otherwise false. Subclasses must override as required.
+ */
+ protected boolean hasBuffer() {
return false;
}
- IBuffer buf = this.getBuffer();
- if (buf != null && buf.hasUnsavedChanges()) {
- return true;
+
+ /**
+ * @see IParent
+ */
+ public boolean hasChildren() throws JavaModelException {
+ return getChildren().length > 0;
}
-// for package fragments, package fragment roots, and projects must check open buffers
- // to see if they have an child with unsaved changes
- int elementType = getElementType();
- if (elementType == PACKAGE_FRAGMENT ||
- elementType == PACKAGE_FRAGMENT_ROOT ||
- elementType == JAVA_PROJECT ||
- elementType == JAVA_MODEL) { // fix for 1FWNMHH
- Enumeration openBuffers= getBufferManager().getOpenBuffers();
- while (openBuffers.hasMoreElements()) {
- IBuffer buffer= (IBuffer)openBuffers.nextElement();
- if (buffer.hasUnsavedChanges()) {
- IJavaElement owner= (IJavaElement)buffer.getOwner();
- if (isAncestorOf(owner)) {
- return true;
+
+ /**
+ * @see IOpenable
+ */
+ public boolean hasUnsavedChanges() throws JavaModelException {
+
+ if (isReadOnly() || !isOpen()) {
+ return false;
+ }
+ IBuffer buf = this.getBuffer();
+ if (buf != null && buf.hasUnsavedChanges()) {
+ return true;
+ }
+ // for package fragments, package fragment roots, and projects must
+ // check open buffers
+ // to see if they have an child with unsaved changes
+ int elementType = getElementType();
+ if (elementType == PACKAGE_FRAGMENT
+ || elementType == PACKAGE_FRAGMENT_ROOT
+ || elementType == JAVA_PROJECT || elementType == JAVA_MODEL) { // fix
+ // for
+ // 1FWNMHH
+ Enumeration openBuffers = getBufferManager().getOpenBuffers();
+ while (openBuffers.hasMoreElements()) {
+ IBuffer buffer = (IBuffer) openBuffers.nextElement();
+ if (buffer.hasUnsavedChanges()) {
+ IJavaElement owner = (IJavaElement) buffer.getOwner();
+ if (isAncestorOf(owner)) {
+ return true;
+ }
}
}
}
+
+ return false;
}
-
- return false;
-}
-/**
- * Subclasses must override as required.
- *
- * @see IOpenable
- */
-public boolean isConsistent() throws JavaModelException {
- return true;
-}
-/**
- *
- * @see IOpenable
- */
-public boolean isOpen() {
- synchronized(JavaModelManager.getJavaModelManager()){
- return JavaModelManager.getJavaModelManager().getInfo(this) != null;
+
+ /**
+ * Subclasses must override as required.
+ *
+ * @see IOpenable
+ */
+ public boolean isConsistent() throws JavaModelException {
+ return true;
}
-}
-/**
- * Returns true if this represents a source element.
- * Openable source elements have an associated buffer created
- * when they are opened.
- */
-protected boolean isSourceElement() {
- return false;
-}
-///**
-// * @see IOpenable
-// */
-//public void makeConsistent(IProgressMonitor pm) throws JavaModelException {
-// if (!isConsistent()) {
-// buildStructure((OpenableElementInfo)getElementInfo(), pm);
-// }
-//}
-/**
- * @see IOpenable
- */
-public void makeConsistent(IProgressMonitor monitor) throws JavaModelException {
- if (isConsistent()) return;
-
- // create a new info and make it the current info
- // (this will remove the info and its children just before storing the new infos)
- JavaModelManager manager = JavaModelManager.getJavaModelManager();
- boolean hadTemporaryCache = manager.hasTemporaryCache();
- try {
- HashMap newElements = manager.getTemporaryCache();
- openWhenClosed(newElements, monitor);
- if (newElements.get(this) == null) {
- // close any buffer that was opened for the new elements
- Iterator iterator = newElements.keySet().iterator();
- while (iterator.hasNext()) {
- IJavaElement element = (IJavaElement)iterator.next();
- if (element instanceof Openable) {
- ((Openable)element).closeBuffer();
+
+ /**
+ *
+ * @see IOpenable
+ */
+ public boolean isOpen() {
+ synchronized (JavaModelManager.getJavaModelManager()) {
+ return JavaModelManager.getJavaModelManager().getInfo(this) != null;
+ }
+ }
+
+ /**
+ * Returns true if this represents a source element. Openable source
+ * elements have an associated buffer created when they are opened.
+ */
+ protected boolean isSourceElement() {
+ return false;
+ }
+
+ // /**
+ // * @see IOpenable
+ // */
+ // public void makeConsistent(IProgressMonitor pm) throws JavaModelException
+ // {
+ // if (!isConsistent()) {
+ // buildStructure((OpenableElementInfo)getElementInfo(), pm);
+ // }
+ // }
+ /**
+ * @see IOpenable
+ */
+ public void makeConsistent(IProgressMonitor monitor)
+ throws JavaModelException {
+ if (isConsistent())
+ return;
+
+ // create a new info and make it the current info
+ // (this will remove the info and its children just before storing the
+ // new infos)
+ JavaModelManager manager = JavaModelManager.getJavaModelManager();
+ boolean hadTemporaryCache = manager.hasTemporaryCache();
+ try {
+ HashMap newElements = manager.getTemporaryCache();
+ openWhenClosed(newElements, monitor);
+ if (newElements.get(this) == null) {
+ // close any buffer that was opened for the new elements
+ Iterator iterator = newElements.keySet().iterator();
+ while (iterator.hasNext()) {
+ IJavaElement element = (IJavaElement) iterator.next();
+ if (element instanceof Openable) {
+ ((Openable) element).closeBuffer();
+ }
}
+ throw newNotPresentException();
+ }
+ if (!hadTemporaryCache) {
+ manager.putInfos(this, newElements);
+ }
+ } finally {
+ if (!hadTemporaryCache) {
+ manager.resetTemporaryCache();
}
- throw newNotPresentException();
- }
- if (!hadTemporaryCache) {
- manager.putInfos(this, newElements);
- }
- } finally {
- if (!hadTemporaryCache) {
- manager.resetTemporaryCache();
}
}
-}
-/**
- * @see IOpenable
- */
-public void open(IProgressMonitor pm) throws JavaModelException {
- getElementInfo(pm);
-}
-/**
- * Opens a buffer on the contents of this element, and returns
- * the buffer, or returns null
if opening fails.
- * By default, do nothing - subclasses that have buffers
- * must override as required.
- */
-protected IBuffer openBuffer(IProgressMonitor pm) throws JavaModelException {
- return null;
-}
+ /**
+ * @see IOpenable
+ */
+ public void open(IProgressMonitor pm) throws JavaModelException {
+ getElementInfo(pm);
+ }
-/**
- * Open the parent element if necessary.
- */
-protected void openParent(Object childInfo, HashMap newElements, IProgressMonitor pm) throws JavaModelException {
+ /**
+ * Opens a buffer on the contents of this element, and returns the buffer,
+ * or returns null
if opening fails. By default, do nothing -
+ * subclasses that have buffers must override as required.
+ */
+ protected IBuffer openBuffer(IProgressMonitor pm) throws JavaModelException {
+ return null;
+ }
+
+ /**
+ * Open the parent element if necessary.
+ */
+ protected void openParent(Object childInfo, HashMap newElements,
+ IProgressMonitor pm) throws JavaModelException {
- Openable openableParent = (Openable)getOpenableParent();
- if (openableParent != null && !openableParent.isOpen()){
- openableParent.generateInfos(openableParent.createElementInfo(), newElements, pm);
+ Openable openableParent = (Openable) getOpenableParent();
+ if (openableParent != null && !openableParent.isOpen()) {
+ openableParent.generateInfos(openableParent.createElementInfo(),
+ newElements, pm);
+ }
}
-}
-///**
-// * Open an Openable
that is known to be closed (no check for isOpen()
).
-// */
-//protected void openWhenClosed(IProgressMonitor pm) throws JavaModelException {
-// try {
-//
-// if (JavaModelManager.VERBOSE){
-// System.out.println("OPENING Element ("+ Thread.currentThread()+"): " + this.toStringWithAncestors()); //$NON-NLS-1$//$NON-NLS-2$
-// }
-//
-// // 1) Parent must be open - open the parent if necessary
-// openParent(pm);
-//
-// // 2) create the new element info and open a buffer if needed
-// OpenableElementInfo info = createElementInfo();
-// if (isSourceElement()) {
-// this.openBuffer(pm);
-// }
-//
-// // 3) build the structure of the openable
-// buildStructure(info, pm);
-//
-// // 4) anything special
-// opening(info);
-//
-//// if (JavaModelManager.VERBOSE) {
-//// System.out.println("-> Package cache size = " + JavaModelManager.getJavaModelManager().cache.pkgSize()); //$NON-NLS-1$
-//// System.out.println("-> Openable cache filling ratio = " + JavaModelManager.getJavaModelManager().cache.openableFillingRatio() + "%"); //$NON-NLS-1$//$NON-NLS-2$
-//// }
-//
-// // if any problems occuring openning the element, ensure that it's info
-// // does not remain in the cache (some elements, pre-cache their info
-// // as they are being opened).
-// } catch (JavaModelException e) {
-// JavaModelManager.getJavaModelManager().removeInfo(this);
-// throw e;
-// }
-//}
+ // /**
+ // * Open an Openable
that is known to be closed (no check for
+ // isOpen()
).
+ // */
+ // protected void openWhenClosed(IProgressMonitor pm) throws
+ // JavaModelException {
+ // try {
+ //
+ // if (JavaModelManager.VERBOSE){
+ // System.out.println("OPENING Element ("+ Thread.currentThread()+"): " +
+ // this.toStringWithAncestors()); //$NON-NLS-1$//$NON-NLS-2$
+ // }
+ //
+ // // 1) Parent must be open - open the parent if necessary
+ // openParent(pm);
+ //
+ // // 2) create the new element info and open a buffer if needed
+ // OpenableElementInfo info = createElementInfo();
+ // if (isSourceElement()) {
+ // this.openBuffer(pm);
+ // }
+ //
+ // // 3) build the structure of the openable
+ // buildStructure(info, pm);
+ //
+ // // 4) anything special
+ // opening(info);
+ //
+ // // if (JavaModelManager.VERBOSE) {
+ // // System.out.println("-> Package cache size = " +
+ // JavaModelManager.getJavaModelManager().cache.pkgSize()); //$NON-NLS-1$
+ // // System.out.println("-> Openable cache filling ratio = " +
+ // JavaModelManager.getJavaModelManager().cache.openableFillingRatio() +
+ // "%"); //$NON-NLS-1$//$NON-NLS-2$
+ // // }
+ //
+ // // if any problems occuring openning the element, ensure that it's info
+ // // does not remain in the cache (some elements, pre-cache their info
+ // // as they are being opened).
+ // } catch (JavaModelException e) {
+ // JavaModelManager.getJavaModelManager().removeInfo(this);
+ // throw e;
+ // }
+ // }
-/**
- * Answers true if the parent exists (null parent is answering true)
- *
- */
-protected boolean parentExists(){
-
- IJavaElement parent = this.getParent();
- if (parent == null) return true;
- return parent.exists();
-}
+ /**
+ * Answers true if the parent exists (null parent is answering true)
+ *
+ */
+ protected boolean parentExists() {
-/**
- * Returns whether the corresponding resource or associated file exists
- */
-protected boolean resourceExists() {
- IWorkspace workspace = ResourcesPlugin.getWorkspace();
- if (workspace == null) return false; // workaround for http://bugs.eclipse.org/bugs/show_bug.cgi?id=34069
- return
- JavaModel.getTarget(
- workspace.getRoot(),
- this.getPath().makeRelative(), // ensure path is relative (see http://dev.eclipse.org/bugs/show_bug.cgi?id=22517)
- true) != null;
-}
+ IJavaElement parent = this.getParent();
+ if (parent == null)
+ return true;
+ return parent.exists();
+ }
-/**
- * @see IOpenable
- */
-public void save(IProgressMonitor pm, boolean force) throws JavaModelException {
- if (isReadOnly() || this.getResource().isReadOnly()) {
- throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, this));
+ /**
+ * Returns whether the corresponding resource or associated file exists
+ */
+ protected boolean resourceExists() {
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ if (workspace == null)
+ return false; // workaround for
+ // http://bugs.eclipse.org/bugs/show_bug.cgi?id=34069
+ return JavaModel.getTarget(workspace.getRoot(), this.getPath()
+ .makeRelative(), // ensure path is relative (see
+ // http://dev.eclipse.org/bugs/show_bug.cgi?id=22517)
+ true) != null;
}
- IBuffer buf = getBuffer();
- if (buf != null) { // some Openables (like a JavaProject) don't have a buffer
- buf.save(pm, force);
- this.makeConsistent(pm); // update the element info of this element
+
+ /**
+ * @see IOpenable
+ */
+ public void save(IProgressMonitor pm, boolean force)
+ throws JavaModelException {
+ if (isReadOnly()
+ || this.getResource().getResourceAttributes().isReadOnly()) {
+ throw new JavaModelException(new JavaModelStatus(
+ IJavaModelStatusConstants.READ_ONLY, this));
+ }
+ IBuffer buf = getBuffer();
+ if (buf != null) { // some Openables (like a JavaProject) don't have a
+ // buffer
+ buf.save(pm, force);
+ this.makeConsistent(pm); // update the element info of this
+ // element
+ }
}
-}
-/**
- * Find enclosing package fragment root if any
- */
-public PackageFragmentRoot getPackageFragmentRoot() {
- IJavaElement current = this;
- do {
- if (current instanceof PackageFragmentRoot) return (PackageFragmentRoot)current;
- current = current.getParent();
- } while(current != null);
- return null;
-}
-///**
-// * @see ICodeAssist
-// * @deprecated - use codeComplete(ICompilationUnit, ICompilationUnit, int, ICompletionRequestor) instead
-// */
-//protected void codeComplete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit cu, org.eclipse.jdt.internal.compiler.env.ICompilationUnit unitToSkip, int position, final ICodeCompletionRequestor requestor) throws JavaModelException {
-//
-// if (requestor == null){
-// codeComplete(cu, unitToSkip, position, (ICompletionRequestor)null);
-// return;
-// }
-// codeComplete(
-// cu,
-// unitToSkip,
-// position,
-// new ICompletionRequestor(){
-// public void acceptAnonymousType(char[] superTypePackageName,char[] superTypeName,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance) {
-// }
-// public void acceptClass(char[] packageName, char[] className, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) {
-// requestor.acceptClass(packageName, className, completionName, modifiers, completionStart, completionEnd);
-// }
-// public void acceptError(IProblem error) {
-// if (true) return; // was disabled in 1.0
-//
-// try {
-// IMarker marker = ResourcesPlugin.getWorkspace().getRoot().createMarker(IJavaModelMarker.TRANSIENT_PROBLEM);
-// marker.setAttribute(IJavaModelMarker.ID, error.getID());
-// marker.setAttribute(IMarker.CHAR_START, error.getSourceStart());
-// marker.setAttribute(IMarker.CHAR_END, error.getSourceEnd() + 1);
-// marker.setAttribute(IMarker.LINE_NUMBER, error.getSourceLineNumber());
-// marker.setAttribute(IMarker.MESSAGE, error.getMessage());
-// marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
-// requestor.acceptError(marker);
-// } catch(CoreException e){
-// }
-// }
-// public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] name, char[] typePackageName, char[] typeName, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) {
-// requestor.acceptField(declaringTypePackageName, declaringTypeName, name, typePackageName, typeName, completionName, modifiers, completionStart, completionEnd);
-// }
-// public void acceptInterface(char[] packageName,char[] interfaceName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance) {
-// requestor.acceptInterface(packageName, interfaceName, completionName, modifiers, completionStart, completionEnd);
-// }
-// public void acceptKeyword(char[] keywordName,int completionStart,int completionEnd, int relevance){
-// requestor.acceptKeyword(keywordName, completionStart, completionEnd);
-// }
-// public void acceptLabel(char[] labelName,int completionStart,int completionEnd, int relevance){
-// requestor.acceptLabel(labelName, completionStart, completionEnd);
-// }
-// public void acceptLocalVariable(char[] name,char[] typePackageName,char[] typeName,int modifiers,int completionStart,int completionEnd, int relevance){
-// // ignore
-// }
-// public void acceptMethod(char[] declaringTypePackageName,char[] declaringTypeName,char[] selector,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] returnTypePackageName,char[] returnTypeName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance){
-// // skip parameter names
-// requestor.acceptMethod(declaringTypePackageName, declaringTypeName, selector, parameterPackageNames, parameterTypeNames, returnTypePackageName, returnTypeName, completionName, modifiers, completionStart, completionEnd);
-// }
-// public void acceptMethodDeclaration(char[] declaringTypePackageName,char[] declaringTypeName,char[] selector,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] returnTypePackageName,char[] returnTypeName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance){
-// // ignore
-// }
-// public void acceptModifier(char[] modifierName,int completionStart,int completionEnd, int relevance){
-// requestor.acceptModifier(modifierName, completionStart, completionEnd);
-// }
-// public void acceptPackage(char[] packageName,char[] completionName,int completionStart,int completionEnd, int relevance){
-// requestor.acceptPackage(packageName, completionName, completionStart, completionEnd);
-// }
-// public void acceptType(char[] packageName,char[] typeName,char[] completionName,int completionStart,int completionEnd, int relevance){
-// requestor.acceptType(packageName, typeName, completionName, completionStart, completionEnd);
-// }
-// public void acceptVariableName(char[] typePackageName,char[] typeName,char[] name,char[] completionName,int completionStart,int completionEnd, int relevance){
-// // ignore
-// }
-// });
-//}
+ /**
+ * Find enclosing package fragment root if any
+ */
+ public PackageFragmentRoot getPackageFragmentRoot() {
+ IJavaElement current = this;
+ do {
+ if (current instanceof PackageFragmentRoot)
+ return (PackageFragmentRoot) current;
+ current = current.getParent();
+ } while (current != null);
+ return null;
+ }
+ // /**
+ // * @see ICodeAssist
+ // * @deprecated - use codeComplete(ICompilationUnit, ICompilationUnit, int,
+ // ICompletionRequestor) instead
+ // */
+ // protected void
+ // codeComplete(net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // cu, net.sourceforge.phpdt.internal.compiler.env.ICompilationUnit
+ // unitToSkip, int position, final ICodeCompletionRequestor requestor)
+ // throws JavaModelException {
+ //
+ // if (requestor == null){
+ // codeComplete(cu, unitToSkip, position, (ICompletionRequestor)null);
+ // return;
+ // }
+ // codeComplete(
+ // cu,
+ // unitToSkip,
+ // position,
+ // new ICompletionRequestor(){
+ // public void acceptAnonymousType(char[] superTypePackageName,char[]
+ // superTypeName,char[][] parameterPackageNames,char[][]
+ // parameterTypeNames,char[][] parameterNames,char[] completionName,int
+ // modifiers,int completionStart,int completionEnd, int relevance) {
+ // }
+ // public void acceptClass(char[] packageName, char[] className, char[]
+ // completionName, int modifiers, int completionStart, int completionEnd,
+ // int relevance) {
+ // requestor.acceptClass(packageName, className, completionName, modifiers,
+ // completionStart, completionEnd);
+ // }
+ // public void acceptError(IProblem error) {
+ // if (true) return; // was disabled in 1.0
+ //
+ // try {
+ // IMarker marker =
+ // ResourcesPlugin.getWorkspace().getRoot().createMarker(IJavaModelMarker.TRANSIENT_PROBLEM);
+ // marker.setAttribute(IJavaModelMarker.ID, error.getID());
+ // marker.setAttribute(IMarker.CHAR_START, error.getSourceStart());
+ // marker.setAttribute(IMarker.CHAR_END, error.getSourceEnd() + 1);
+ // marker.setAttribute(IMarker.LINE_NUMBER, error.getSourceLineNumber());
+ // marker.setAttribute(IMarker.MESSAGE, error.getMessage());
+ // marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
+ // requestor.acceptError(marker);
+ // } catch(CoreException e){
+ // }
+ // }
+ // public void acceptField(char[] declaringTypePackageName, char[]
+ // declaringTypeName, char[] name, char[] typePackageName, char[] typeName,
+ // char[] completionName, int modifiers, int completionStart, int
+ // completionEnd, int relevance) {
+ // requestor.acceptField(declaringTypePackageName, declaringTypeName, name,
+ // typePackageName, typeName, completionName, modifiers, completionStart,
+ // completionEnd);
+ // }
+ // public void acceptInterface(char[] packageName,char[]
+ // interfaceName,char[] completionName,int modifiers,int completionStart,int
+ // completionEnd, int relevance) {
+ // requestor.acceptInterface(packageName, interfaceName, completionName,
+ // modifiers, completionStart, completionEnd);
+ // }
+ // public void acceptKeyword(char[] keywordName,int completionStart,int
+ // completionEnd, int relevance){
+ // requestor.acceptKeyword(keywordName, completionStart, completionEnd);
+ // }
+ // public void acceptLabel(char[] labelName,int completionStart,int
+ // completionEnd, int relevance){
+ // requestor.acceptLabel(labelName, completionStart, completionEnd);
+ // }
+ // public void acceptLocalVariable(char[] name,char[] typePackageName,char[]
+ // typeName,int modifiers,int completionStart,int completionEnd, int
+ // relevance){
+ // // ignore
+ // }
+ // public void acceptMethod(char[] declaringTypePackageName,char[]
+ // declaringTypeName,char[] selector,char[][] parameterPackageNames,char[][]
+ // parameterTypeNames,char[][] parameterNames,char[]
+ // returnTypePackageName,char[] returnTypeName,char[] completionName,int
+ // modifiers,int completionStart,int completionEnd, int relevance){
+ // // skip parameter names
+ // requestor.acceptMethod(declaringTypePackageName, declaringTypeName,
+ // selector, parameterPackageNames, parameterTypeNames,
+ // returnTypePackageName, returnTypeName, completionName, modifiers,
+ // completionStart, completionEnd);
+ // }
+ // public void acceptMethodDeclaration(char[]
+ // declaringTypePackageName,char[] declaringTypeName,char[]
+ // selector,char[][] parameterPackageNames,char[][]
+ // parameterTypeNames,char[][] parameterNames,char[]
+ // returnTypePackageName,char[] returnTypeName,char[] completionName,int
+ // modifiers,int completionStart,int completionEnd, int relevance){
+ // // ignore
+ // }
+ // public void acceptModifier(char[] modifierName,int completionStart,int
+ // completionEnd, int relevance){
+ // requestor.acceptModifier(modifierName, completionStart, completionEnd);
+ // }
+ // public void acceptPackage(char[] packageName,char[] completionName,int
+ // completionStart,int completionEnd, int relevance){
+ // requestor.acceptPackage(packageName, completionName, completionStart,
+ // completionEnd);
+ // }
+ // public void acceptType(char[] packageName,char[] typeName,char[]
+ // completionName,int completionStart,int completionEnd, int relevance){
+ // requestor.acceptType(packageName, typeName, completionName,
+ // completionStart, completionEnd);
+ // }
+ // public void acceptVariableName(char[] typePackageName,char[]
+ // typeName,char[] name,char[] completionName,int completionStart,int
+ // completionEnd, int relevance){
+ // // ignore
+ // }
+ // });
+ // }
}