X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java index 2b559f5..ea8f6b4 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/PackageFragment.java @@ -10,15 +10,22 @@ *******************************************************************************/ package net.sourceforge.phpdt.internal.core; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Map; + 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 net.sourceforge.phpdt.internal.core.util.Util; +import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; @@ -31,31 +38,91 @@ 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). - */ + /** + * Constructs a handle for a package fragment + * + * @see IPackageFragment + */ + protected PackageFragment(PackageFragmentRoot root, String name) { + super(root, name); + } + /** + * @see Openable + */ + protected boolean buildStructure(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException { + + // check whether this pkg can be opened + if (!underlyingResource.isAccessible()) throw newNotPresentException(); + + int kind = getKind(); + String extType; +// if (kind == IPackageFragmentRoot.K_SOURCE) { + extType = "php"; //EXTENSION_java; +// } else { +// extType = EXTENSION_class; +// } + + // add compilation units/class files from resources + HashSet vChildren = new HashSet(); + try { + PackageFragmentRoot root = getPackageFragmentRoot(); +// char[][] inclusionPatterns = root.fullInclusionPatternChars(); + char[][] exclusionPatterns = root.fullExclusionPatternChars(); + IResource[] members = ((IContainer) underlyingResource).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 = new CompilationUnit(this, child.getName(), DefaultWorkingCopyOwner.PRIMARY); +// vChildren.add(childElement); +// } else if (Util.isValidClassFileName(child.getName())) { +// childElement = getClassFile(child.getName()); +// vChildren.add(childElement); +// } + } + } + } + } + } catch (CoreException e) { + throw new JavaModelException(e); + } + +// if (kind == IPackageFragmentRoot.K_SOURCE) { +// // add primary compilation units +// ICompilationUnit[] primaryCompilationUnits = getCompilationUnits(DefaultWorkingCopyOwner.PRIMARY); +// for (int i = 0, length = primaryCompilationUnits.length; i < length; i++) { +// ICompilationUnit primary = primaryCompilationUnits[i]; +// vChildren.add(primary); +// } +// } + + IJavaElement[] children = new IJavaElement[vChildren.size()]; + vChildren.toArray(children); + info.setChildren(children); + return true; + } +///** +// * 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(); +//// int kind = getKind(); // String extType; -// if (kind == IPackageFragmentRoot.K_SOURCE) { -// extType = "java"; //$NON-NLS-1$ -// } else { -// extType = "class"; //$NON-NLS-1$ -// } +//// if (kind == IPackageFragmentRoot.K_SOURCE) { +// extType = "php"; //$NON-NLS-1$ +//// } else { +//// extType = "class"; //$NON-NLS-1$ +//// } // try { // char[][] exclusionPatterns = ((PackageFragmentRoot)getPackageFragmentRoot()).fullExclusionPatternChars(); // IResource[] members = ((IContainer) resource).members(); @@ -67,13 +134,13 @@ protected PackageFragment(IPackageFragmentRoot root, String name) { // 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); -// } +//// 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); +//// } // } // } // } @@ -124,9 +191,9 @@ public ICompilationUnit createCompilationUnit(String name, String contents, bool /** * @see JavaElement */ -//protected OpenableElementInfo createElementInfo() { -// return new PackageFragmentInfo(); -//} +protected Object createElementInfo() { + return new PackageFragmentInfo(); +} /** * @see ISourceManipulation */ @@ -134,9 +201,9 @@ public ICompilationUnit createCompilationUnit(String name, String contents, bool // IJavaElement[] elements = new IJavaElement[] {this}; // getJavaModel().delete(elements, force, monitor); //} -/** - * @see Openable - */ +///** +// * @see Openable +// */ //protected boolean generateInfos(OpenableElementInfo info, IProgressMonitor pm, Map newElements, IResource underlyingResource) throws JavaModelException { // // return computeChildren(info, underlyingResource); @@ -166,23 +233,33 @@ public ICompilationUnit createCompilationUnit(String name, String contents, bool //} /** * @see IPackageFragment#getCompilationUnit(String) + * @exception IllegalArgumentExcpetion if the name does not end with ".java" */ -public ICompilationUnit getCompilationUnit(String name) { - return new CompilationUnit(this, name); +public ICompilationUnit getCompilationUnit(String cuName) { + if (! PHPFileUtil.isPHPFileName(cuName)) { + throw new IllegalArgumentException(Util.bind("convention.unit.notJavaName")); //$NON-NLS-1$ + } + return new CompilationUnit(this, cuName, DefaultWorkingCopyOwner.PRIMARY); } /** * @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; -//} +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 IJavaElement + */ +public int getElementType() { + return PACKAGE_FRAGMENT; +} /** * @see JavaElement#getHandleMementoDelimiter() */ @@ -192,9 +269,9 @@ protected char getHandleMementoDelimiter() { /** * @see IPackageFragment#getKind() */ -//public int getKind() throws JavaModelException { -// return ((IPackageFragmentRoot)getParent()).getKind(); -//} +public int getKind() throws JavaModelException { + return ((IPackageFragmentRoot)getParent()).getKind(); +} /** * Returns an array of non-java resources contained in the receiver. */ @@ -209,14 +286,14 @@ protected char getHandleMementoDelimiter() { /** * @see IJavaElement#getPath() */ -//public IPath getPath() { -// PackageFragmentRoot root = this.getPackageFragmentRoot(); -// if (root.isArchive()) { -// return root.getPath(); -// } else { -// return root.getPath().append(this.getElementName().replace('.', '/')); -// } -//} +public IPath getPath() { + PackageFragmentRoot root = this.getPackageFragmentRoot(); + if (root.isArchive()) { + return root.getPath(); + } else { + return root.getPath().append(this.getElementName().replace('.', '/')); + } +} /** * @see IJavaElement#getResource() */ @@ -237,7 +314,7 @@ public IResource getResource() { * @see IJavaElement#getUnderlyingResource() */ public IResource getUnderlyingResource() throws JavaModelException { - IResource rootResource = fParent.getUnderlyingResource(); + IResource rootResource = parent.getUnderlyingResource(); if (rootResource == null) { //jar package fragment root that has no associated resource return null; @@ -328,15 +405,15 @@ public boolean isDefaultPackage() { // 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); -} +///* +// * @see JavaElement#rootedAt(IJavaProject) +// */ +//public IJavaElement rootedAt(IJavaProject project) { +// return +// new PackageFragment( +// (IPackageFragmentRoot)((JavaElement)parent).rootedAt(project), +// name); +//} /** * Debugging purposes */