Class PackageFragment

java.lang.Object
org.eclipse.core.runtime.PlatformObject
All Implemented Interfaces:
IBufferChangedListener, IJavaElement, IOpenable, IPackageFragment, IParent, ISourceManipulation, SuffixConstants, org.eclipse.core.runtime.IAdaptable

public class PackageFragment extends Openable implements IPackageFragment, SuffixConstants
See Also:
  • Field Details

    • NO_CLASSFILES

      protected static final IClassFile[] NO_CLASSFILES
      Constant empty list of class files
    • NO_ORDINARY_CLASSFILES

      protected static final IOrdinaryClassFile[] NO_ORDINARY_CLASSFILES
    • NO_COMPILATION_UNITS

      protected static final ICompilationUnit[] NO_COMPILATION_UNITS
      Constant empty list of compilation units
    • names

      public final String[] names
  • Constructor Details

  • Method Details

    • buildStructure

      protected boolean buildStructure(OpenableElementInfo info, org.eclipse.core.runtime.IProgressMonitor pm, Map newElements, org.eclipse.core.resources.IResource underlyingResource) throws JavaModelException
      Description copied from class: Openable
      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.
      Specified by:
      buildStructure in class Openable
      Throws:
      JavaModelException
      See Also:
    • containsJavaResources

      public boolean containsJavaResources() throws JavaModelException
      Returns true if this fragment contains at least one java resource. Returns false otherwise.
      Specified by:
      containsJavaResources in interface IPackageFragment
      Returns:
      true if this fragment contains at least one Java resource, false otherwise
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
    • copy

      public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: ISourceManipulation
      Copies this element to the given container.
      Specified by:
      copy in interface ISourceManipulation
      Parameters:
      container - the container
      sibling - the sibling element before which the copy should be inserted, or null if the copy should be inserted as the last child of the container
      rename - the new name for the element, or null if the copy retains the name of this element
      force - true if any existing child in the container with the target name should be replaced, and false to throw an exception in the event of a name collision
      monitor - a progress monitor
      Throws:
      JavaModelException - if this element could not be copied. Reasons include:
      • This Java element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)
      • A CoreException occurred while updating an underlying resource
      • The container is of an incompatible type (INVALID_DESTINATION)
      • The sibling is not a child of the given container (INVALID_SIBLING)
      • The new name is invalid (INVALID_NAME)
      • A child in the container already exists with the same name (NAME_COLLISION) and replace has been specified as false
      • The container or this element is read-only (READ_ONLY)
      See Also:
    • createCompilationUnit

      public ICompilationUnit createCompilationUnit(String cuName, String contents, boolean force, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: IPackageFragment
      Creates and returns a compilation unit in this package fragment with the specified name and contents. No verification is performed on the contents.

      It is possible that a compilation unit with the same name already exists in this package fragment. The value of the force parameter affects the resolution of such a conflict:

      • true - in this case the compilation is created with the new contents
      • false - in this case a JavaModelException is thrown
      Specified by:
      createCompilationUnit in interface IPackageFragment
      Parameters:
      cuName - the given name
      contents - the given contents
      force - specify how to handle conflict is the same name already exists
      monitor - the given progress monitor
      Returns:
      a compilation unit in this package fragment with the specified name and contents
      Throws:
      JavaModelException - if the element could not be created. Reasons include:
      • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
      • A CoreException occurred while creating an underlying resource
      • The name is not a valid compilation unit name (INVALID_NAME)
      • The contents are null (INVALID_CONTENTS)
      See Also:
    • createElementInfo

      protected org.aspectj.org.eclipse.jdt.internal.core.PackageFragmentInfo createElementInfo()
      Overrides:
      createElementInfo in class Openable
      See Also:
    • delete

      public void delete(boolean force, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: ISourceManipulation
      Deletes this element, forcing if specified and necessary.
      Specified by:
      delete in interface ISourceManipulation
      Parameters:
      force - a flag controlling whether underlying resources that are not in sync with the local file system will be tolerated (same as the force flag in IResource operations).
      monitor - a progress monitor
      Throws:
      JavaModelException - if this element could not be deleted. Reasons include:
      • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
      • A CoreException occurred while updating an underlying resource (CORE_EXCEPTION)
      • This element is read-only (READ_ONLY)
      See Also:
    • equals

      public boolean equals(Object o)
      Description copied from class: JavaElement
      Returns true if this handle represents the same Java element as the given handle. By default, two handles represent the same element if they are identical or if they represent the same type of element, have equal names, parents, and occurrence counts.

      If a subclass has other requirements for equality, this method must be overridden.

      Overrides:
      equals in class JavaElement
      See Also:
    • calculateHashCode

      protected int calculateHashCode()
      Overrides:
      calculateHashCode in class JavaElement
    • 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 (with IWorkingCopy.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 interface IJavaElement
      Overrides:
      exists in class Openable
      Returns:
      true if this element exists in the Java model, and false if this element does not exist
      See Also:
    • getOrdinaryClassFile

      public IOrdinaryClassFile getOrdinaryClassFile(String classFileName)
      Description copied from interface: IPackageFragment
      Returns the class file with the specified name in this package (for example, "Object.class"). The ".class" suffix is required. This is a handle-only method. The class file may or may not be present.

      This method is not applicable to the files "module-info.class" as introduced in Java 9. For those please use IPackageFragment.getModularClassFile().

      Specified by:
      getOrdinaryClassFile in interface IPackageFragment
      Parameters:
      classFileName - the given name
      Returns:
      the class file with the specified name in this package
      Throws:
      IllegalArgumentException - if the name does not end with ".class" or if the name is "module-info.class".
      See Also:
    • getClassFile

      public IClassFile getClassFile(String classFileName)
      Description copied from interface: IPackageFragment
      Returns the class file with the specified name in this package (for example, "Object.class"). The ".class" suffix is required. This is a handle-only method. The class file may or may not be present.

      This method can handle ordinary class files or modular class files denoted by the name "module-info.class".

      Specified by:
      getClassFile in interface IPackageFragment
      Parameters:
      classFileName - the given name
      Returns:
      the class file with the specified name in this package
      Throws:
      IllegalArgumentException - if the name does not end with ".class".
      See Also:
    • getModularClassFile

      public IModularClassFile getModularClassFile()
      Description copied from interface: IPackageFragment
      Returns the class file for "module-info.class" in this package. This is a handle-only method. The class file may or may not be present. If the class file is present, then it is guaranteed to contain an IModuleDescription.
      Specified by:
      getModularClassFile in interface IPackageFragment
      Returns:
      the class file representing "module-info.class" in this package.
    • getOrdinaryClassFiles

      public IOrdinaryClassFile[] getOrdinaryClassFiles() throws JavaModelException
      Returns a collection of ordinary class files in this - a folder package fragment which has a root that has its kind set to IPackageFragmentRoot.K_Source does not recognize class files.
      Specified by:
      getOrdinaryClassFiles in interface IPackageFragment
      Returns:
      all of the ordinary class files in this package fragment
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • getAllClassFiles

      public IClassFile[] getAllClassFiles() throws JavaModelException
      Returns a collection of all class files in this - a folder package fragment which has a root that has its kind set to IPackageFragmentRoot.K_Source does not recognize class files.
      Specified by:
      getAllClassFiles in interface IPackageFragment
      Returns:
      all of the class files in this package fragment
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • getClassFiles

      @Deprecated public IClassFile[] getClassFiles() throws JavaModelException
      Deprecated.
      Description copied from interface: IPackageFragment
      Returns all of the ordinary class files in this package fragment.

      Note: this list never includes a modular class file (see IPackageFragment.getModularClassFile()).

      Note: it is possible that a package fragment contains only compilation units (in other words, its kind is K_SOURCE), in which case this method returns an empty collection.

      Specified by:
      getClassFiles in interface IPackageFragment
      Returns:
      all of the ordinary class files in this package fragment
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
    • getCompilationUnit

      public ICompilationUnit getCompilationUnit(String cuName)
      Description copied from interface: IPackageFragment
      Returns the compilation unit with the specified name in this package (for example, "Object.java"). The name has to be a valid compilation unit name. This is a handle-only method. The compilation unit may or may not be present.
      Specified by:
      getCompilationUnit in interface IPackageFragment
      Parameters:
      cuName - the given name
      Returns:
      the compilation unit with the specified name in this package
      Throws:
      IllegalArgumentException - if the name does not end with ".java"
      See Also:
    • getCompilationUnits

      public ICompilationUnit[] getCompilationUnits() throws JavaModelException
      Description copied from interface: IPackageFragment
      Returns all of the compilation units in this package fragment.

      Note: it is possible that a package fragment contains only class files (in other words, its kind is K_BINARY), in which case this method returns an empty collection.

      Specified by:
      getCompilationUnits in interface IPackageFragment
      Returns:
      all of the compilation units in this package fragment
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • getCompilationUnits

      public ICompilationUnit[] getCompilationUnits(WorkingCopyOwner owner)
      Description copied from interface: IPackageFragment
      Returns all of the compilation units in this package fragment that are in working copy mode and that have the given owner.

      Only existing working copies are returned. So a compilation unit handle that has no corresponding resource on disk will be included if and only if is in working copy mode.

      Note: it is possible that a package fragment contains only class files (in other words, its kind is K_BINARY), in which case this method returns an empty collection.

      Specified by:
      getCompilationUnits in interface IPackageFragment
      Parameters:
      owner - the owner of the returned compilation units
      Returns:
      all of the compilation units in this package fragment
      See Also:
    • getElementName

      public String getElementName()
      Description copied from interface: IJavaElement
      Returns the name of this element. This is a handle-only method.
      Specified by:
      getElementName in interface IJavaElement
      Specified by:
      getElementName in interface IPackageFragment
      Overrides:
      getElementName in class JavaElement
      Returns:
      the element name
      See Also:
      • IAdaptable
    • getElementType

      public int getElementType()
      Description copied from interface: IJavaElement
      Returns this element's kind encoded as an integer. This is a handle-only method.
      Specified by:
      getElementType in interface IJavaElement
      Returns:
      the kind of element; one of the constants declared in IJavaElement
      See Also:
    • getHandleFromMemento

      public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner)
      Specified by:
      getHandleFromMemento in class JavaElement
    • getHandleMementoDelimiter

      protected char getHandleMementoDelimiter()
      Description copied from class: JavaElement
      Returns the char that marks the start of this handles contribution to a memento.
      Specified by:
      getHandleMementoDelimiter in class JavaElement
      See Also:
    • getKind

      public int getKind() throws JavaModelException
      Description copied from interface: IPackageFragment
      Returns this package fragment's root kind encoded as an integer. A package fragment can contain source files (i.e. files with one of the Java-like extensions), or .class files. This is a convenience method.
      Specified by:
      getKind in interface IPackageFragment
      Returns:
      this package fragment's root kind encoded as an integer
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • getNonJavaResources

      public Object[] getNonJavaResources() throws JavaModelException
      Returns an array of non-java resources contained in the receiver.
      Specified by:
      getNonJavaResources in interface IPackageFragment
      Returns:
      an array of non-Java resources (IFiles, IFolders, or IStorages if the package fragment is in an archive) contained in this package fragment
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • getPath

      public org.eclipse.core.runtime.IPath getPath()
      Description copied from interface: IJavaElement
      Returns the path to the innermost resource enclosing this element. If this element is not included in an external library, the path returned is the full, absolute path to the underlying resource, relative to the workbench. If this element is included in an external library, the path returned is the absolute path to the archive or to the folder in the file system. This is a handle-only method.
      Specified by:
      getPath in interface IJavaElement
      Returns:
      the path to the innermost resource enclosing this element
      See Also:
    • resource

      public org.eclipse.core.resources.IResource resource(PackageFragmentRoot root)
      Specified by:
      resource in class Openable
      See Also:
    • getUnderlyingResource

      public org.eclipse.core.resources.IResource getUnderlyingResource() throws JavaModelException
      Description copied from interface: IJavaElement
      Returns the smallest underlying resource that contains this element, or null if this element is not contained in a resource.
      Specified by:
      getUnderlyingResource in interface IJavaElement
      Overrides:
      getUnderlyingResource in class Openable
      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:
    • hasChildren

      public boolean hasChildren() throws JavaModelException
      Description copied from interface: IParent
      Returns whether this element has one or more immediate children. This is a convenience method, and may be more efficient than testing whether getChildren is an empty array.
      Specified by:
      hasChildren in interface IParent
      Overrides:
      hasChildren in class JavaElement
      Returns:
      true if the immediate children of this element, false otherwise
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource
      See Also:
    • hasSubpackages

      public boolean hasSubpackages() throws JavaModelException
      Description copied from interface: IPackageFragment
      Returns whether this package fragment's name is a prefix of other package fragments in this package fragment's root.
      Specified by:
      hasSubpackages in interface IPackageFragment
      Returns:
      true if this package fragment's name is a prefix of other package fragments in this package fragment's root, false otherwise
      Throws:
      JavaModelException - if this element does not exist or if an exception occurs while accessing its corresponding resource.
      See Also:
    • internalIsValidPackageName

      protected boolean internalIsValidPackageName()
    • isDefaultPackage

      public boolean isDefaultPackage()
      Description copied from interface: IPackageFragment
      Returns whether this package fragment is a default package. This is a handle-only method.
      Specified by:
      isDefaultPackage in interface IPackageFragment
      Returns:
      true if this package fragment is a default package
      See Also:
    • isValidPackageName

      protected final boolean isValidPackageName()
    • move

      public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: ISourceManipulation
      Moves this element to the given container.
      Specified by:
      move in interface ISourceManipulation
      Parameters:
      container - the container
      sibling - the sibling element before which the element should be inserted, or null if the element should be inserted as the last child of the container
      rename - the new name for the element, or null if the element retains its name
      force - true if any existing child in the container with the target name should be replaced, and false to throw an exception in the event of a name collision
      monitor - a progress monitor
      Throws:
      JavaModelException - if this element could not be moved. Reasons include:
      • This Java element, container element, or sibling does not exist (ELEMENT_DOES_NOT_EXIST)
      • A CoreException occurred while updating an underlying resource
      • The container is of an incompatible type (INVALID_DESTINATION)
      • The sibling is not a child of the given container (INVALID_SIBLING)
      • The new name is invalid (INVALID_NAME)
      • A child in the container already exists with the same name (NAME_COLLISION) and replace has been specified as false
      • The container or this element is read-only (READ_ONLY)
      See Also:
    • rename

      public void rename(String newName, boolean force, org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: ISourceManipulation
      Renames this element to the given name.
      Specified by:
      rename in interface ISourceManipulation
      Parameters:
      newName - the new name for the element
      force - true if any existing element with the target name should be replaced, and false to throw an exception in the event of a name collision
      monitor - a progress monitor
      Throws:
      JavaModelException - if this element could not be renamed. Reasons include:
      • This Java element does not exist (ELEMENT_DOES_NOT_EXIST)
      • A CoreException occurred while updating an underlying resource
      • The new name is invalid (INVALID_NAME)
      • A child in the container already exists with the same name (NAME_COLLISION) and replace has been specified as false
      • This element is read-only (READ_ONLY)
      See Also:
    • toStringChildren

      protected void toStringChildren(int tab, StringBuilder buffer, Object info)
      Debugging purposes
      Overrides:
      toStringChildren in class JavaElement
    • toStringInfo

      protected void toStringInfo(int tab, StringBuilder buffer, Object info, boolean showResolvedInfo)
      Debugging purposes
      Overrides:
      toStringInfo in class JavaElement
      Parameters:
      showResolvedInfo - TODO
    • getAttachedJavadoc

      public String getAttachedJavadoc(org.eclipse.core.runtime.IProgressMonitor monitor) throws JavaModelException
      Description copied from interface: IJavaElement

      Returns the Javadoc as HTML source if this element has attached Javadoc, null otherwise.

      This should be used only for binary elements. Source elements will always return null.

      The encoding used to read the Javadoc is the one defined by the content type of the file. If none is defined, then the project's encoding of this Java element is used. If the project's encoding cannot be retrieved, then the platform encoding is used.

      In case the Javadoc doesn't exist for this element, null is returned.

      The HTML is extracted from the attached Javadoc and provided as is. No transformation or validation is done.

      Specified by:
      getAttachedJavadoc in interface IJavaElement
      Overrides:
      getAttachedJavadoc in class JavaElement
      Parameters:
      monitor - the given progress monitor, can be null
      Returns:
      the extracted javadoc from the attached javadoc, null if none
      Throws:
      JavaModelException - if:
      • this element does not exist
      • retrieving the attached javadoc fails (timed-out, invalid URL, ...)
      • the format of the javadoc doesn't match expected standards (different anchors,...)
      See Also:
    • validateExistence

      protected org.eclipse.core.runtime.IStatus validateExistence(org.eclipse.core.resources.IResource underlyingResource)
      Specified by:
      validateExistence in class Openable