/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.internal.core; import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.IJavaProject; import net.sourceforge.phpdt.core.IPackageFragment; import net.sourceforge.phpdt.core.IPackageFragmentRoot; import net.sourceforge.phpdt.core.JavaModelException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; /** * @see IPackageFragment */ public class PackageFragment extends Openable implements IPackageFragment { /** * Constant empty list of compilation units */ protected static ICompilationUnit[] fgEmptyCompilationUnitList= new ICompilationUnit[] {}; /** * Constructs a handle for a package fragment * * @see IPackageFragment */ protected PackageFragment(IPackageFragmentRoot root, String name) { super(PACKAGE_FRAGMENT, null, name); } /** * Compute the children of this package fragment. * *

Package fragments which are folders recognize files based on the * type of the fragment *

Package fragments which are in a jar only recognize .class files ( * @see JarPackageFragment). */ //protected boolean computeChildren(OpenableElementInfo info, IResource resource) throws JavaModelException { // ArrayList vChildren = new ArrayList(); // int kind = getKind(); // String extType; // if (kind == IPackageFragmentRoot.K_SOURCE) { // extType = "java"; //$NON-NLS-1$ // } else { // extType = "class"; //$NON-NLS-1$ // } // try { // char[][] exclusionPatterns = ((PackageFragmentRoot)getPackageFragmentRoot()).fullExclusionPatternChars(); // IResource[] members = ((IContainer) resource).members(); // for (int i = 0, max = members.length; i < max; i++) { // IResource child = members[i]; // if (child.getType() != IResource.FOLDER // && !Util.isExcluded(child, exclusionPatterns)) { // String extension = child.getProjectRelativePath().getFileExtension(); // if (extension != null) { // if (extension.equalsIgnoreCase(extType)) { // IJavaElement childElement; // if (kind == IPackageFragmentRoot.K_SOURCE && Util.isValidCompilationUnitName(child.getName())) { // childElement = getCompilationUnit(child.getName()); // vChildren.add(childElement); // } else if (Util.isValidClassFileName(child.getName())) { // childElement = getClassFile(child.getName()); // vChildren.add(childElement); // } // } // } // } // } // } catch (CoreException e) { // throw new JavaModelException(e); // } // IJavaElement[] children = new IJavaElement[vChildren.size()]; // vChildren.toArray(children); // info.setChildren(children); // return true; //} /** * Returns true if this fragment contains at least one java resource. * Returns false otherwise. */ //public boolean containsJavaResources() throws JavaModelException { // return ((PackageFragmentInfo) getElementInfo()).containsJavaResources(); //} /** * @see ISourceManipulation */ //public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException { // if (container == null) { // throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$ // } // IJavaElement[] elements= new IJavaElement[] {this}; // IJavaElement[] containers= new IJavaElement[] {container}; // IJavaElement[] siblings= null; // if (sibling != null) { // siblings= new IJavaElement[] {sibling}; // } // String[] renamings= null; // if (rename != null) { // renamings= new String[] {rename}; // } // getJavaModel().copy(elements, containers, siblings, renamings, force, monitor); //} /** * @see IPackageFragment */ public ICompilationUnit createCompilationUnit(String name, String contents, boolean force, IProgressMonitor monitor) throws JavaModelException { // CreateCompilationUnitOperation op= new CreateCompilationUnitOperation(this, name, contents, force); // runOperation(op, monitor); // return getCompilationUnit(name); return null; } /** * @see JavaElement */ //protected OpenableElementInfo createElementInfo() { // return new PackageFragmentInfo(); //} /** * @see ISourceManipulation */ //public void delete(boolean force, IProgressMonitor monitor) throws JavaModelException { // IJavaElement[] elements = new IJavaElement[] {this}; // getJavaModel().delete(elements, force, monitor); //} /** * @see Openable */ //protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException { // // return computeChildren(info, underlyingResource); //} ///** // * @see IPackageFragment#getClassFile(String) // */ //public IClassFile getClassFile(String name) { // return new ClassFile(this, name); //} /** * Returns a the collection of 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. * * @see IPackageFragment#getClassFiles() */ //public IClassFile[] getClassFiles() throws JavaModelException { // if (getKind() == IPackageFragmentRoot.K_SOURCE) { // return fgEmptyClassFileList; // } // // ArrayList list = getChildrenOfType(CLASS_FILE); // IClassFile[] array= new IClassFile[list.size()]; // list.toArray(array); // return array; //} /** * @see IPackageFragment#getCompilationUnit(String) */ public ICompilationUnit getCompilationUnit(String name) { return new CompilationUnit(this, name); } /** * @see IPackageFragment#getCompilationUnits() */ //public ICompilationUnit[] getCompilationUnits() throws JavaModelException { // if (getKind() == IPackageFragmentRoot.K_BINARY) { // return fgEmptyCompilationUnitList; // } // // ArrayList list = getChildrenOfType(COMPILATION_UNIT); // ICompilationUnit[] array= new ICompilationUnit[list.size()]; // list.toArray(array); // return array; //} /** * @see JavaElement#getHandleMementoDelimiter() */ protected char getHandleMementoDelimiter() { return JavaElement.JEM_PACKAGEFRAGMENT; } /** * @see IPackageFragment#getKind() */ //public int getKind() throws JavaModelException { // return ((IPackageFragmentRoot)getParent()).getKind(); //} /** * Returns an array of non-java resources contained in the receiver. */ //public Object[] getNonJavaResources() throws JavaModelException { // if (this.isDefaultPackage()) { // // We don't want to show non java resources of the default package (see PR #1G58NB8) // return JavaElementInfo.NO_NON_JAVA_RESOURCES; // } else { // return ((PackageFragmentInfo) getElementInfo()).getNonJavaResources(getResource(), (PackageFragmentRoot)getPackageFragmentRoot()); // } //} /** * @see IJavaElement#getPath() */ //public IPath getPath() { // PackageFragmentRoot root = this.getPackageFragmentRoot(); // if (root.isArchive()) { // return root.getPath(); // } else { // return root.getPath().append(this.getElementName().replace('.', '/')); // } //} /** * @see IJavaElement#getResource() */ public IResource getResource() { PackageFragmentRoot root = this.getPackageFragmentRoot(); if (root.isArchive()) { return root.getResource(); } else { String elementName = this.getElementName(); if (elementName.length() == 0) { return root.getResource(); } else { return ((IContainer)root.getResource()).getFolder(new Path(this.getElementName().replace('.', '/'))); } } } /** * @see IJavaElement#getUnderlyingResource() */ public IResource getUnderlyingResource() throws JavaModelException { IResource rootResource = fParent.getUnderlyingResource(); if (rootResource == null) { //jar package fragment root that has no associated resource return null; } // the underlying resource may be a folder or a project (in the case that the project folder // is atually the package fragment root) // if (rootResource.getType() == IResource.FOLDER || rootResource.getType() == IResource.PROJECT) { // IContainer folder = (IContainer) rootResource; // String[] segs = Signature.getSimpleNames(fName); // for (int i = 0; i < segs.length; ++i) { // IResource child = folder.findMember(segs[i]); // if (child == null || child.getType() != IResource.FOLDER) { // throw newNotPresentException(); // } // folder = (IFolder) child; // } // return folder; // } else { return rootResource; // } } /** * @see IPackageFragment#hasSubpackages() */ //public boolean hasSubpackages() throws JavaModelException { // IJavaElement[] packages= ((IPackageFragmentRoot)getParent()).getChildren(); // String name = getElementName(); // int nameLength = name.length(); // String packageName = isDefaultPackage() ? name : name+"."; //$NON-NLS-1$ // for (int i= 0; i < packages.length; i++) { // String otherName = packages[i].getElementName(); // if (otherName.length() > nameLength && otherName.startsWith(packageName)) { // return true; // } // } // return false; //} /** * @see IPackageFragment#isDefaultPackage() */ public boolean isDefaultPackage() { return this.getElementName().length() == 0; } /** * @see ISourceManipulation#move(IJavaElement, IJavaElement, String, boolean, IProgressMonitor) */ //public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException { // if (container == null) { // throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$ // } // IJavaElement[] elements= new IJavaElement[] {this}; // IJavaElement[] containers= new IJavaElement[] {container}; // IJavaElement[] siblings= null; // if (sibling != null) { // siblings= new IJavaElement[] {sibling}; // } // String[] renamings= null; // if (rename != null) { // renamings= new String[] {rename}; // } // getJavaModel().move(elements, containers, siblings, renamings, force, monitor); //} //protected void openWhenClosed(IProgressMonitor pm) throws JavaModelException { // if (!this.resourceExists()) throw newNotPresentException(); // super.openWhenClosed(pm); //} /** * Recomputes the children of this element, based on the current state * of the workbench. */ //public void refreshChildren() { // try { // OpenableElementInfo info= (OpenableElementInfo)getElementInfo(); // computeChildren(info, getResource()); // } catch (JavaModelException e) { // // do nothing. // } //} /** * @see ISourceManipulation#rename(String, boolean, IProgressMonitor) */ //public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException { // if (name == null) { // throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$ // } // IJavaElement[] elements= new IJavaElement[] {this}; // IJavaElement[] dests= new IJavaElement[] {this.getParent()}; // String[] renamings= new String[] {name}; // getJavaModel().rename(elements, dests, renamings, force, monitor); //} /* * @see JavaElement#rootedAt(IJavaProject) */ public IJavaElement rootedAt(IJavaProject project) { return new PackageFragment( (IPackageFragmentRoot)((JavaElement)fParent).rootedAt(project), fName); } /** * Debugging purposes */ protected void toStringChildren(int tab, StringBuffer buffer, Object info) { if (tab == 0) { super.toStringChildren(tab, buffer, info); } } /** * Debugging purposes */ protected void toStringInfo(int tab, StringBuffer buffer, Object info) { buffer.append(this.tabString(tab)); if (getElementName().length() == 0) { buffer.append("[default]"); //$NON-NLS-1$ } else { buffer.append(getElementName()); } if (info == null) { buffer.append(" (not open)"); //$NON-NLS-1$ } else { if (tab > 0) { buffer.append(" (...)"); //$NON-NLS-1$ } } } }