Class Openable
- All Implemented Interfaces:
IBufferChangedListener
,IJavaElement
,IOpenable
,org.eclipse.core.runtime.IAdaptable
- Direct Known Subclasses:
AbstractClassFile
,CompilationUnit
,JavaModel
,JavaProject
,PackageFragment
,PackageFragmentRoot
- See Also:
IJavaElement
,IOpenable
-
Field Summary
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.core.JavaElement
JEM_ANNOTATION, JEM_CLASSFILE, JEM_COMPILATIONUNIT, JEM_COUNT, JEM_DELIMITER_ESCAPE, JEM_ESCAPE, JEM_FIELD, JEM_IMPORTDECLARATION, JEM_INITIALIZER, JEM_JAVAPROJECT, JEM_LAMBDA_EXPRESSION, JEM_LAMBDA_METHOD, JEM_LOCALVARIABLE, JEM_METHOD, JEM_MODULAR_CLASSFILE, JEM_MODULE, JEM_PACKAGEDECLARATION, JEM_PACKAGEFRAGMENT, JEM_PACKAGEFRAGMENTROOT, JEM_STRING, JEM_TYPE, JEM_TYPE_PARAMETER, NO_ELEMENTS, NO_INFO, NO_STRINGS
Fields inherited from interface org.aspectj.org.eclipse.jdt.core.IJavaElement
ANNOTATION, CLASS_FILE, COMPILATION_UNIT, FIELD, IMPORT_CONTAINER, IMPORT_DECLARATION, INITIALIZER, JAVA_MODEL, JAVA_MODULE, JAVA_PROJECT, LOCAL_VARIABLE, METHOD, PACKAGE_DECLARATION, PACKAGE_FRAGMENT, PACKAGE_FRAGMENT_ROOT, TYPE, TYPE_PARAMETER
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
bufferChanged(BufferChangedEvent event)
The buffer associated with this element has changed.protected abstract boolean
buildStructure(OpenableElementInfo info, org.eclipse.core.runtime.IProgressMonitor pm, Map newElements, org.eclipse.core.resources.IResource underlyingResource)
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).boolean
boolean
canBufferBeRemovedFromCache(IBuffer buffer)
protected void
Close the buffer associated with this element, if any.protected void
This element is being closed.protected void
codeComplete(ICompilationUnit cu, ICompilationUnit unitToSkip, int position, CompletionRequestor requestor, WorkingCopyOwner owner, ITypeRoot typeRoot, org.eclipse.core.runtime.IProgressMonitor monitor)
protected IJavaElement[]
codeSelect(ICompilationUnit cu, int offset, int length, WorkingCopyOwner owner)
protected Object
boolean
exists()
Returns whether this Java element exists in the model.Finds and returns the recommended line separator for this element.protected void
generateInfos(Object info, HashMap newElements, org.eclipse.core.runtime.IProgressMonitor monitor)
Generates the element infos for this element, its ancestors (if they are not opened) and its children (if it is an Openable).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.Deprecated.protected BufferManager
Returns the buffer manager for this element.org.eclipse.core.resources.IResource
Return my underlying resource.Returns the first openable parent.Find enclosing package fragment root if anyorg.eclipse.core.resources.IResource
Returns the innermost resource enclosing this element.org.eclipse.core.resources.IResource
Returns the smallest underlying resource that contains this element, ornull
if this element is not contained in a resource.protected boolean
Returns true if this element may have an associated source buffer, otherwise false.boolean
Returnstrue
if this element is open and: its buffer has unsaved changes, or one of its descendants has unsaved changes, or a working copy has been created on one of this element's children and has not yet destroyedprotected boolean
ignoreErrorStatus(org.eclipse.core.runtime.IStatus status)
boolean
Subclasses must override as required.boolean
isOpen()
Returns whether this openable is open.protected boolean
Returns true if this represents a source element.boolean
Returns whether the structure of this element is known.void
makeConsistent(org.eclipse.core.runtime.IProgressMonitor monitor)
Makes this element consistent with its underlying resource or buffer by updating the element's structure and properties as necessary.void
open(org.eclipse.core.runtime.IProgressMonitor pm)
Opens this element and all parent elements that are not already open.protected void
openAncestors(HashMap newElements, org.eclipse.core.runtime.IProgressMonitor monitor)
protected IBuffer
openBuffer(org.eclipse.core.runtime.IProgressMonitor pm, Object info)
Opens a buffer on the contents of this element, and returns the buffer, or returnsnull
if opening fails.org.eclipse.core.resources.IResource
resource()
protected abstract org.eclipse.core.resources.IResource
resource(PackageFragmentRoot root)
protected boolean
resourceExists(org.eclipse.core.resources.IResource underlyingResource)
Returns whether the corresponding resource or associated file existsvoid
save(org.eclipse.core.runtime.IProgressMonitor pm, boolean force)
Saves any changes in this element's buffer to its underlying resource via a workspace resource operation.protected abstract org.eclipse.core.runtime.IStatus
validateExistence(org.eclipse.core.resources.IResource underlyingResource)
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.core.JavaElement
appendEscapedDelimiter, close, equals, escapeMementoName, findNode, getAncestor, getAttachedJavadoc, getChildren, getChildrenOfType, getClassFile, getCompilationUnit, getElementInfo, getElementInfo, getElementName, getHandleFromMemento, getHandleFromMemento, getHandleIdentifier, getHandleMemento, getHandleMemento, getHandleMementoDelimiter, getJavadocBaseLocation, getJavaModel, getJavaProject, getLibraryJavadocLocation, getOpenableParent, getParent, getPrimaryElement, getPrimaryElement, getSchedulingRule, getSourceElementAt, getSourceMapper, getURLContents, hasChildren, hashCode, isAncestorOf, isReadOnly, newDoesNotExistStatus, newJavaModelException, newNotPresentException, openWhenClosed, readableName, resolved, setParent, tabString, toDebugString, toString, toString, toStringAncestors, toStringChildren, toStringInfo, toStringInfo, toStringName, toStringWithAncestors, toStringWithAncestors, unresolved, validateAndCache
Methods inherited from class org.eclipse.core.runtime.PlatformObject
getAdapter
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.core.runtime.IAdaptable
getAdapter
Methods inherited from interface org.aspectj.org.eclipse.jdt.core.IJavaElement
getElementType, getPath
-
Constructor Details
-
Openable
-
-
Method Details
-
bufferChanged
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.- Specified by:
bufferChanged
in interfaceIBufferChangedListener
- Parameters:
event
- the change event- See Also:
IBufferChangedListener
-
buildStructure
protected abstract boolean buildStructure(OpenableElementInfo info, org.eclipse.core.runtime.IProgressMonitor pm, Map newElements, org.eclipse.core.resources.IResource underlyingResource) throws JavaModelExceptionBuilds 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.- Throws:
JavaModelException
-
canBeRemovedFromCache
public boolean canBeRemovedFromCache() -
canBufferBeRemovedFromCache
-
closeBuffer
protected void closeBuffer()Close the buffer associated with this element, if any. -
closing
This element is being closed. Do any necessary cleanup.- Specified by:
closing
in classJavaElement
-
codeComplete
protected void codeComplete(ICompilationUnit cu, ICompilationUnit unitToSkip, int position, CompletionRequestor requestor, WorkingCopyOwner owner, ITypeRoot typeRoot, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException- Throws:
JavaModelException
-
codeSelect
protected IJavaElement[] codeSelect(ICompilationUnit cu, int offset, int length, WorkingCopyOwner owner) throws JavaModelException- Throws:
JavaModelException
-
createElementInfo
- Specified by:
createElementInfo
in classJavaElement
-
exists
public boolean exists()Description copied from interface:IJavaElement
Returns whether this Java element exists in the model.Java elements are handle objects that may or may not be backed by an actual element. Java elements that are backed by an actual element are said to "exist", and this method returns
true
. For Java elements that are not working copies, it is always the case that if the element exists, then its parent also exists (provided it has one) and includes the element as one of its children. It is therefore possible to navigated to any existing Java element from the root of the Java model along a chain of existing Java elements. On the other hand, working copies are said to exist until they are destroyed (withIWorkingCopy.destroy
). Unlike regular Java elements, a working copy never shows up among the children of its parent element (which may or may not exist).- Specified by:
exists
in interfaceIJavaElement
- Overrides:
exists
in classJavaElement
- Returns:
true
if this element exists in the Java model, andfalse
if this element does not exist- See Also:
IJavaElement
-
findRecommendedLineSeparator
Description copied from interface:IOpenable
Finds and returns the recommended line separator for this element. The element's buffer is first searched and the first line separator in this buffer is returned if any. Otherwise the preferencePlatform.PREF_LINE_SEPARATOR
on this element's project or workspace is returned. Finally if no such preference is set, the system line separator is returned.- Specified by:
findRecommendedLineSeparator
in interfaceIOpenable
- Returns:
- the recommended line separator for this element
- Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its corresponding resource.
-
generateInfos
protected void generateInfos(Object info, HashMap newElements, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelExceptionDescription copied from class:JavaElement
Generates the element infos for this element, its ancestors (if they are not opened) and its children (if it is an Openable). Puts the newly created element info in the given map.- Specified by:
generateInfos
in classJavaElement
- Throws:
JavaModelException
-
ignoreErrorStatus
protected boolean ignoreErrorStatus(org.eclipse.core.runtime.IStatus status) -
getBuffer
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.- Specified by:
getBuffer
in interfaceIOpenable
- Returns:
- the buffer opened for this element, or
null
if this element does not have a buffer - Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its corresponding resource.- See Also:
IOpenable
-
getBufferFactory
Deprecated.Answers the buffer factory to use for creating new buffers -
getBufferManager
Returns the buffer manager for this element. -
getCorrespondingResource
Return my underlying resource. Elements that may not have a corresponding resource must override this method.- Specified by:
getCorrespondingResource
in interfaceIJavaElement
- Returns:
- the corresponding resource, or
null
if none - Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its corresponding resource- See Also:
IJavaElement
-
getOpenable
Description copied from interface:IJavaElement
Returns the first openable parent. If this element is openable, the element itself is returned. Returnsnull
if this element doesn't have an openable parent. This is a handle-only method.- Specified by:
getOpenable
in interfaceIJavaElement
- Overrides:
getOpenable
in classJavaElement
- Returns:
- the first openable parent or
null
if this element doesn't have an openable parent.
-
getUnderlyingResource
Description copied from interface:IJavaElement
Returns the smallest underlying resource that contains this element, ornull
if this element is not contained in a resource.- Specified by:
getUnderlyingResource
in interfaceIJavaElement
- Returns:
- the underlying resource, or
null
if none - Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its underlying resource- See Also:
IJavaElement
-
hasBuffer
protected boolean hasBuffer()Returns true if this element may have an associated source buffer, otherwise false. Subclasses must override as required. -
hasUnsavedChanges
Description copied from interface:IOpenable
Returnstrue
if this element is open and:- its buffer has unsaved changes, or
- one of its descendants has unsaved changes, or
- a working copy has been created on one of this element's children and has not yet destroyed
- Specified by:
hasUnsavedChanges
in interfaceIOpenable
- Returns:
true
if this element is open and:- its buffer has unsaved changes, or
- one of its descendants has unsaved changes, or
- a working copy has been created on one of this element's children and has not yet destroyed
- Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its corresponding resource.- See Also:
IOpenable
-
isConsistent
public boolean isConsistent()Subclasses must override as required.- Specified by:
isConsistent
in interfaceIOpenable
- Returns:
- true if the element is consistent with its underlying resource or buffer, false otherwise.
- See Also:
IOpenable
-
isOpen
public boolean isOpen()Description copied from interface:IOpenable
Returns whether this openable is open. This is a handle-only method.Note: This method doesn't tell whether an
IJavaProject
'sgetProject()
is open. It is not equivalent toIProject.isOpen()
!Note: Although
IOpenable.isOpen()
is exposed in the API, clients rarely have a need to rely on this internal state of the Java model. -
isSourceElement
protected boolean isSourceElement()Returns true if this represents a source element. Openable source elements have an associated buffer created when they are opened. -
isStructureKnown
Description copied from interface:IJavaElement
Returns whether the structure of this element is known. For example, for a compilation unit that has syntax errors,false
is returned. If the structure of an element is unknown, navigations will return reasonable defaults. For example,getChildren
for a compilation unit with syntax errors will return a collection of the children that could be parsed.Note: This does not imply anything about consistency with the underlying resource/buffer contents.
- Specified by:
isStructureKnown
in interfaceIJavaElement
- Returns:
true
if the structure of this element is known- Throws:
JavaModelException
- if this element does not exist or if an exception occurs while accessing its corresponding resource- See Also:
IJavaElement
-
makeConsistent
public void makeConsistent(org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelExceptionDescription copied from interface:IOpenable
Makes this element consistent with its underlying resource or buffer by updating the element's structure and properties as necessary.Note: Using this functionality on a working copy will interfere with any subsequent reconciling operation. Indeed, the next
ICompilationUnit.reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)
orICompilationUnit.reconcile(int, boolean, boolean, WorkingCopyOwner, IProgressMonitor)
operation will not account for changes which occurred before an explicit use ofIOpenable.makeConsistent(IProgressMonitor)
- Specified by:
makeConsistent
in interfaceIOpenable
- Parameters:
monitor
- the given progress monitor- Throws:
JavaModelException
- if the element is unable to access the contents of its underlying resource. Reasons include:- This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
- See Also:
IOpenable
-
open
Description copied from interface:IOpenable
Opens this element and all parent elements that are not already open. For compilation units, a buffer is opened on the contents of the underlying resource.Note: Although
IOpenable.open(org.eclipse.core.runtime.IProgressMonitor)
is exposed in the API, clients are not expected to open and close elements - the Java model does this automatically as elements are accessed.- Specified by:
open
in interfaceIOpenable
- Parameters:
pm
- the given progress monitor- Throws:
JavaModelException
- if an error occurs accessing the contents of its underlying resource. Reasons include:- This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
- See Also:
IOpenable
-
openBuffer
protected IBuffer openBuffer(org.eclipse.core.runtime.IProgressMonitor pm, Object info) throws JavaModelExceptionOpens a buffer on the contents of this element, and returns the buffer, or returnsnull
if opening fails. By default, do nothing - subclasses that have buffers must override as required.- Throws:
JavaModelException
-
getResource
public org.eclipse.core.resources.IResource getResource()Description copied from interface:IJavaElement
Returns the innermost resource enclosing this element. If this element is included in an archive and this archive is not external, this is the underlying resource corresponding to the archive. If this element is included in an external library,null
is returned. This is a handle-only method.- Specified by:
getResource
in interfaceIJavaElement
- Overrides:
getResource
in classJavaElement
- Returns:
- the innermost resource enclosing this element,
null
if this element is included in an external archive
-
resource
public org.eclipse.core.resources.IResource resource()- Specified by:
resource
in classJavaElement
-
resource
-
resourceExists
protected boolean resourceExists(org.eclipse.core.resources.IResource underlyingResource)Returns whether the corresponding resource or associated file exists -
save
public void save(org.eclipse.core.runtime.IProgressMonitor pm, boolean force) throws JavaModelExceptionDescription copied from interface:IOpenable
Saves any changes in this element's buffer to its underlying resource via a workspace resource operation. This has no effect if the element has no underlying buffer, or if there are no unsaved changed in the buffer.The
force
parameter controls how this method deals with cases where the workbench is not completely in sync with the local file system. Iffalse
is specified, this method will only attempt to overwrite a corresponding file in the local file system provided it is in sync with the workbench. This option ensures there is no unintended data loss; it is the recommended setting. However, iftrue
is specified, an attempt will be made to write a corresponding file in the local file system, overwriting any existing one if need be. In either case, if this method succeeds, the resource will be marked as being local (even if it wasn't before).As a result of this operation, the element is consistent with its underlying resource or buffer.
- Specified by:
save
in interfaceIOpenable
- Parameters:
pm
- the given progress monitorforce
- it controls how this method deals with cases where the workbench is not completely in sync with the local file system- Throws:
JavaModelException
- if an error occurs accessing the contents of its underlying resource. Reasons include:- This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
- This Java element is read-only (READ_ONLY)
- See Also:
IOpenable
-
getPackageFragmentRoot
Find enclosing package fragment root if any -
validateExistence
protected abstract org.eclipse.core.runtime.IStatus validateExistence(org.eclipse.core.resources.IResource underlyingResource) -
openAncestors
protected void openAncestors(HashMap newElements, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException- Throws:
JavaModelException
-