X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java index 8a9c259..ed6e792 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/SourceType.java @@ -12,6 +12,7 @@ package net.sourceforge.phpdt.internal.core; import java.util.ArrayList; +import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IField; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.IMember; @@ -19,17 +20,22 @@ import net.sourceforge.phpdt.core.IMethod; import net.sourceforge.phpdt.core.IPackageFragment; import net.sourceforge.phpdt.core.IParent; import net.sourceforge.phpdt.core.IType; +import net.sourceforge.phpdt.core.ITypeHierarchy; +import net.sourceforge.phpdt.core.IWorkingCopy; import net.sourceforge.phpdt.core.JavaModelException; import net.sourceforge.phpdt.core.jdom.IDOMNode; import net.sourceforge.phpdt.internal.core.util.Util; -import net.sourceforge.phpdt.internal.corext.Assert; +//incastrix +//import net.sourceforge.phpdt.internal.corext.Assert; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.IProgressMonitor; /** * Handle for a source type. Info object is a SourceTypeElementInfo. - * + * * Note: Parent is either an IClassFile, an ICompilationUnit or an IType. - * + * * @see IType */ @@ -37,432 +43,651 @@ public class SourceType extends Member implements IType { /** * An empty list of Strings */ - protected static final String[] fgEmptyList= new String[] {}; + protected static final String[] fgEmptyList = new String[] {}; + protected SourceType(JavaElement parent, String name) { super(parent, name); - Assert.isTrue(name.indexOf('.') == -1, Util.bind("sourcetype.invalidName", name)); //$NON-NLS-1$ + Assert.isTrue(name.indexOf('.') == -1, Util.bind( + "sourcetype.invalidName", name)); //$NON-NLS-1$ } -/** - * @see IType - */ -//public void codeComplete(char[] snippet,int insertion,int position,char[][] localVariableTypeNames,char[][] localVariableNames,int[] localVariableModifiers,boolean isStatic,ICompletionRequestor requestor) throws JavaModelException { -// if (requestor == null) { -// throw new IllegalArgumentException(Util.bind("codeAssist.nullRequestor")); //$NON-NLS-1$ -// } -// -// JavaProject project = (JavaProject) getJavaProject(); -// SearchableEnvironment environment = (SearchableEnvironment) project.getSearchableNameEnvironment(); -// NameLookup nameLookup = project.getNameLookup(); -// CompletionEngine engine = new CompletionEngine(environment, new CompletionRequestorWrapper(requestor,nameLookup), project.getOptions(true), project); -// -// String source = getCompilationUnit().getSource(); -// if (source != null && insertion > -1 && insertion < source.length()) { -// String encoding = project.getOption(JavaCore.CORE_ENCODING, true); -// -// char[] prefix = CharOperation.concat(source.substring(0, insertion).toCharArray(), new char[]{'{'}); -// char[] suffix = CharOperation.concat(new char[]{'}'}, source.substring(insertion).toCharArray()); -// char[] fakeSource = CharOperation.concat(prefix, snippet, suffix); -// -// BasicCompilationUnit cu = -// new BasicCompilationUnit( -// fakeSource, -// null, -// getElementName(), -// encoding); -// -// engine.complete(cu, prefix.length + position, prefix.length); -// } else { -// engine.complete(this, snippet, position, localVariableTypeNames, localVariableNames, localVariableModifiers, isStatic); -// } -//} -/** - * @see IType - */ -//public IField createField(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateFieldOperation op = new CreateFieldOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IField) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IInitializer createInitializer(String contents, IJavaElement sibling, IProgressMonitor monitor) throws JavaModelException { -// CreateInitializerOperation op = new CreateInitializerOperation(this, contents); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IInitializer) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IMethod createMethod(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateMethodOperation op = new CreateMethodOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IMethod) op.getResultElements()[0]; -//} -/** - * @see IType - */ -//public IType createType(String contents, IJavaElement sibling, boolean force, IProgressMonitor monitor) throws JavaModelException { -// CreateTypeOperation op = new CreateTypeOperation(this, contents, force); -// if (sibling != null) { -// op.createBefore(sibling); -// } -// runOperation(op, monitor); -// return (IType) op.getResultElements()[0]; -//} -/** - * @see JavaElement#equalsDOMNode - */ -protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException { - return (node.getNodeType() == IDOMNode.TYPE) && super.equalsDOMNode(node); -} -/* - * @see IType - */ -public IMethod[] findMethods(IMethod method) { - try { - return this.findMethods(method, this.getMethods()); - } catch (JavaModelException e) { - // if type doesn't exist, no matching method can exist - return null; + + /** + * @see IType + */ + // public void codeComplete(char[] snippet,int insertion,int + // position,char[][] localVariableTypeNames,char[][] + // localVariableNames,int[] localVariableModifiers,boolean + // isStatic,ICompletionRequestor requestor) throws JavaModelException { + // if (requestor == null) { + // throw new + // IllegalArgumentException(ProjectPrefUtil.bind("codeAssist.nullRequestor")); + // //$NON-NLS-1$ + // } + // + // JavaProject project = (JavaProject) getJavaProject(); + // SearchableEnvironment environment = (SearchableEnvironment) + // project.getSearchableNameEnvironment(); + // NameLookup nameLookup = project.getNameLookup(); + // CompletionEngine engine = new CompletionEngine(environment, new + // CompletionRequestorWrapper(requestor,nameLookup), + // project.getOptions(true), project); + // + // String source = getCompilationUnit().getSource(); + // if (source != null && insertion > -1 && insertion < source.length()) { + // String encoding = project.getOption(JavaCore.CORE_ENCODING, true); + // + // char[] prefix = CharOperation.concat(source.substring(0, + // insertion).toCharArray(), new char[]{'{'}); + // char[] suffix = CharOperation.concat(new char[]{'}'}, + // source.substring(insertion).toCharArray()); + // char[] fakeSource = CharOperation.concat(prefix, snippet, suffix); + // + // BasicCompilationUnit cu = + // new BasicCompilationUnit( + // fakeSource, + // null, + // getElementName(), + // encoding); + // + // engine.complete(cu, prefix.length + position, prefix.length); + // } else { + // engine.complete(this, snippet, position, localVariableTypeNames, + // localVariableNames, localVariableModifiers, isStatic); + // } + // } + /** + * @see IType + */ + // public IField createField(String contents, IJavaElement sibling, boolean + // force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateFieldOperation op = new CreateFieldOperation(this, contents, + // force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IField) op.getResultElements()[0]; + // } + /** + * @see IType + */ + // public IInitializer createInitializer(String contents, IJavaElement + // sibling, IProgressMonitor monitor) throws + // JavaModelException { + // CreateInitializerOperation op = new CreateInitializerOperation(this, + // contents); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IInitializer) op.getResultElements()[0]; + // } + /** + * @see IType + */ + // public IMethod createMethod(String contents, IJavaElement sibling, + // boolean force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateMethodOperation op = new CreateMethodOperation(this, contents, + // force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IMethod) op.getResultElements()[0]; + // } + /** + * @see IType + */ + // public IType createType(String contents, IJavaElement sibling, boolean + // force, IProgressMonitor monitor) throws + // JavaModelException { + // CreateTypeOperation op = new CreateTypeOperation(this, contents, force); + // if (sibling != null) { + // op.createBefore(sibling); + // } + // runOperation(op, monitor); + // return (IType) op.getResultElements()[0]; + // } + /** + * @see JavaElement#equalsDOMNode + */ + protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException { + return (node.getNodeType() == IDOMNode.TYPE) + && super.equalsDOMNode(node); } -} -/** - * @see IMember - */ -public IType getDeclaringType() { - IJavaElement parent = getParent(); - while (parent != null) { - if (parent.getElementType() == IJavaElement.TYPE) { - return (IType) parent; - } else - if (parent instanceof IMember) { + + /* + * @see IType + */ + public IMethod[] findMethods(IMethod method) { + try { + return this.findMethods(method, this.getMethods()); + } catch (JavaModelException e) { + // if type doesn't exist, no matching method can exist + return null; + } + } + + /** + * @see IMember + */ + public IType getDeclaringType() { + IJavaElement parent = getParent(); + while (parent != null) { + if (parent.getElementType() == IJavaElement.TYPE) { + return (IType) parent; + } else if (parent instanceof IMember) { parent = parent.getParent(); } else { return null; } + } + return null; } - return null; -} -/** - * @see IJavaElement - */ -public int getElementType() { - return TYPE; -} -/** - * @see IType#getField - */ -public IField getField(String name) { - return new SourceField(this, name); -} -/** - * @see IType - */ -public IField[] getFields() throws JavaModelException { - ArrayList list = getChildrenOfType(FIELD); - IField[] array= new IField[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IType#getFullyQualifiedName - */ -public String getFullyQualifiedName() { - return this.getFullyQualifiedName('$'); -} -/** - * @see IType#getFullyQualifiedName(char) - */ -public String getFullyQualifiedName(char enclosingTypeSeparator) { - String packageName = getPackageFragment().getElementName(); - if (packageName.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) { - return getTypeQualifiedName(enclosingTypeSeparator); + + /** + * @see IJavaElement + */ + public int getElementType() { + return TYPE; } - return packageName + '.' + getTypeQualifiedName(enclosingTypeSeparator); -} -/** - * @see IType - */ -//public IInitializer getInitializer(int occurrenceCount) { -// return new Initializer(this, occurrenceCount); -//} -/** - * @see IType - */ -//public IInitializer[] getInitializers() throws JavaModelException { -// ArrayList list = getChildrenOfType(INITIALIZER); -// IInitializer[] array= new IInitializer[list.size()]; -// list.toArray(array); -// return array; -//} -/** - * @see IType#getMethod - */ -public IMethod getMethod(String name, String[] parameterTypeSignatures) { - return new SourceMethod(this, name, parameterTypeSignatures); -} -/** - * @see IType - */ -public IMethod[] getMethods() throws JavaModelException { - ArrayList list = getChildrenOfType(METHOD); - IMethod[] array= new IMethod[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IType - */ -public IPackageFragment getPackageFragment() { - IJavaElement parentElement = this.parent; - while (parentElement != null) { - if (parentElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { - return (IPackageFragment)parentElement; - } - else { - parentElement = parentElement.getParent(); + /** + * @see IType#getField + */ + public IField getField(String name) { + return new SourceField(this, name); + } + + /** + * @see IType + */ + public IField[] getFields() throws JavaModelException { + ArrayList list = getChildrenOfType(FIELD); + IField[] array = new IField[list.size()]; + list.toArray(array); + return array; + } + + /** + * @see IType#getFullyQualifiedName + */ + public String getFullyQualifiedName() { + return this.getFullyQualifiedName('$'); + } + + /** + * @see IType#getFullyQualifiedName(char) + */ + public String getFullyQualifiedName(char enclosingTypeSeparator) { + String packageName = getPackageFragment().getElementName(); + if (packageName.equals(IPackageFragment.DEFAULT_PACKAGE_NAME)) { + return getTypeQualifiedName(enclosingTypeSeparator); } + return packageName + '.' + getTypeQualifiedName(enclosingTypeSeparator); } - Assert.isTrue(false); // should not happen - return null; -} -/** - * @see IType - */ -public String getSuperclassName() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - char[] superclassName= info.getSuperclassName(); - if (superclassName == null) { + /** + * @see IType + */ + // public IInitializer getInitializer(int occurrenceCount) { + // return new Initializer(this, occurrenceCount); + // } + /** + * @see IType + */ + // public IInitializer[] getInitializers() throws JavaModelException { + // ArrayList list = getChildrenOfType(INITIALIZER); + // IInitializer[] array= new IInitializer[list.size()]; + // list.toArray(array); + // return array; + // } + /** + * @see IType#getMethod + */ + public IMethod getMethod(String name, String[] parameterTypeSignatures) { + return new SourceMethod(this, name, parameterTypeSignatures); + } + + /** + * @see IType + */ + public IMethod[] getMethods() throws JavaModelException { + ArrayList list = getChildrenOfType(METHOD); + IMethod[] array = new IMethod[list.size()]; + list.toArray(array); + return array; + } + + /** + * @see IType + */ + public IPackageFragment getPackageFragment() { + IJavaElement parentElement = this.parent; + while (parentElement != null) { + if (parentElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { + return (IPackageFragment) parentElement; + } else { + parentElement = parentElement.getParent(); + } + } + Assert.isTrue(false); // should not happen return null; } - return new String(superclassName); -} -/** - * @see IType - */ -public String[] getSuperInterfaceNames() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - char[][] names= info.getInterfaceNames(); - if (names == null) { - return fgEmptyList; + + /** + * @see IType + */ + public String getSuperclassName() throws JavaModelException { + SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); + char[] superclassName = info.getSuperclassName(); + if (superclassName == null) { + return null; + } + return new String(superclassName); + } + + /** + * @see IType + */ + public String[] getSuperInterfaceNames() throws JavaModelException { + SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); + char[][] names = info.getInterfaceNames(); + if (names == null) { + return fgEmptyList; + } + String[] strings = new String[names.length]; + for (int i = 0; i < names.length; i++) { + strings[i] = new String(names[i]); + } + return strings; } - String[] strings= new String[names.length]; - for (int i= 0; i < names.length; i++) { - strings[i]= new String(names[i]); + + /** + * @see IType + */ + public IType getType(String name) { + return new SourceType(this, name); } - return strings; -} -/** - * @see IType - */ -public IType getType(String name) { - return new SourceType(this, name); -} -/** - * @see IType#getTypeQualifiedName - */ -public String getTypeQualifiedName() { - return this.getTypeQualifiedName('$'); -} -/** - * @see IType#getTypeQualifiedName(char) - */ -public String getTypeQualifiedName(char enclosingTypeSeparator) { - if (parent.getElementType() == IJavaElement.COMPILATION_UNIT) { - return name; - } else { - return ((IType) parent).getTypeQualifiedName(enclosingTypeSeparator) + enclosingTypeSeparator + name; + /** + * @see IType#getTypeQualifiedName + */ + public String getTypeQualifiedName() { + return this.getTypeQualifiedName('$'); } -} -/** - * @see IType - */ -public IType[] getTypes() throws JavaModelException { - ArrayList list= getChildrenOfType(TYPE); - IType[] array= new IType[list.size()]; - list.toArray(array); - return array; -} -/** - * @see IParent - */ -public boolean hasChildren() throws JavaModelException { - return getChildren().length > 0; -} -/** - * @see IType#isAnonymous() - */ -public boolean isAnonymous() throws JavaModelException { - return false; // cannot create source handle onto anonymous types -} -/** - * @see IType - */ -public boolean isClass() throws JavaModelException { - return !isInterface(); -} -/** - * @see IType - */ -public boolean isInterface() throws JavaModelException { - SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); - return info.isInterface(); -} -/** - * @see IType#isLocal() - */ -public boolean isLocal() throws JavaModelException { - return false; // cannot create source handle onto local types -} -/** - * @see IType#isMember() - */ -public boolean isMember() throws JavaModelException { - return getDeclaringType() != null; -} -/** - * @see IType - */ -//public ITypeHierarchy loadTypeHierachy(InputStream input, IProgressMonitor monitor) throws JavaModelException { -// return TypeHierarchy.load(this, input); -//} -/** - * @see IType - */ -//public ITypeHierarchy newSupertypeHierarchy(IProgressMonitor monitor) throws JavaModelException { -// return this.newSupertypeHierarchy(null, monitor); -//} -/** - * @see IType#newSupertypeHierarchy(IWorkingCopy[], IProgressMonitor) - */ -//public ITypeHierarchy newSupertypeHierarchy( -// IWorkingCopy[] workingCopies, -// IProgressMonitor monitor) -// throws JavaModelException { -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), false); -// runOperation(op, monitor); -// return op.getResult(); -//} + /** + * @see IType#getTypeQualifiedName(char) + */ + public String getTypeQualifiedName(char enclosingTypeSeparator) { + if (parent.getElementType() == IJavaElement.COMPILATION_UNIT) { + return name; + } else { + return ((IType) parent) + .getTypeQualifiedName(enclosingTypeSeparator) + + enclosingTypeSeparator + name; + } + } -/** - * @see IType - */ -//public ITypeHierarchy newTypeHierarchy(IProgressMonitor monitor) throws JavaModelException { -// return this.newTypeHierarchy((IWorkingCopy[])null, monitor); -//} -/** - * @see IType#newTypeHierarchy(IWorkingCopy[], IProgressMonitor) - */ -//public ITypeHierarchy newTypeHierarchy( -// IWorkingCopy[] workingCopies, -// IProgressMonitor monitor) -// throws JavaModelException { -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation(this, workingCopies, SearchEngine.createWorkspaceScope(), true); -// runOperation(op, monitor); -// return op.getResult(); -//} + /** + * @see IType + */ + public IType[] getTypes() throws JavaModelException { + ArrayList list = getChildrenOfType(TYPE); + IType[] array = new IType[list.size()]; + list.toArray(array); + return array; + } -/** - * @see IType - */ -//public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException { -// if (project == null) { -// throw new IllegalArgumentException(Util.bind("hierarchy.nullProject")); //$NON-NLS-1$ -// } -// -// CreateTypeHierarchyOperation op= new CreateTypeHierarchyOperation( -// this, -// (IWorkingCopy[])null, // no working copies -// project, -// true); -// runOperation(op, monitor); -// return op.getResult(); -//} -/** - * See ISourceType.resolveType(...) - */ + /** + * @see IParent + */ + public boolean hasChildren() throws JavaModelException { + return getChildren().length > 0; + } -// public String[][] resolveType(String typeName) throws JavaModelException { -// ISourceType info = (ISourceType) this.getElementInfo(); -// ISearchableNameEnvironment environment = ((JavaProject)getJavaProject()).getSearchableNameEnvironment(); -// -// class TypeResolveRequestor implements ISelectionRequestor { -// String[][] answers = null; -// void acceptType(String[] answer){ -// if (answers == null) { -// answers = new String[][]{ answer }; -// } else { -// // grow -// int length = answers.length; -// System.arraycopy(answers, 0, answers = new String[length+1][], 0, length); -// answers[length] = answer; -// } -// } -// public void acceptClass(char[] packageName, char[] className, boolean needQualification) { -// acceptType(new String[] { new String(packageName), new String(className) }); -// } -// -// public void acceptInterface(char[] packageName, char[] interfaceName, boolean needQualification) { -// acceptType(new String[] { new String(packageName), new String(interfaceName) }); -// } -// -// public void acceptError(IProblem error) {} -// public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] name) {} -// public void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, char[] selector, char[][] parameterPackageNames, char[][] parameterTypeNames, boolean isConstructor) {} -// public void acceptPackage(char[] packageName){} -// -// } -// TypeResolveRequestor requestor = new TypeResolveRequestor(); -// SelectionEngine engine = -// new SelectionEngine(environment, requestor, this.getJavaProject().getOptions(true)); -// -// IType[] topLevelTypes = this.getCompilationUnit().getTypes(); -// int length = topLevelTypes.length; -// ISourceType[] topLevelInfos = new ISourceType[length]; -// for (int i = 0; i < length; i++) { -// topLevelInfos[i] = (ISourceType)((SourceType)topLevelTypes[i]).getElementInfo(); -// } -// -// engine.selectType(info, typeName.toCharArray(), topLevelInfos, false); -// return requestor.answers; -//} -/** - * @private Debugging purposes - */ -protected void toStringInfo(int tab, StringBuffer buffer, Object info) { - buffer.append(this.tabString(tab)); - if (info == null) { - buffer.append(this.getElementName()); - buffer.append(" (not open)"); //$NON-NLS-1$ - } else if (info == NO_INFO) { - buffer.append(getElementName()); - } else { - try { - if (this.isInterface()) { - buffer.append("interface "); //$NON-NLS-1$ - } else { - buffer.append("class "); //$NON-NLS-1$ - } + /** + * @see IType#isAnonymous() + */ + public boolean isAnonymous() throws JavaModelException { + return false; // cannot create source handle onto anonymous types + } + + /** + * @see IType + */ + public boolean isClass() throws JavaModelException { + return !isInterface(); + } + + /** + * @see IType + */ + public boolean isInterface() throws JavaModelException { + Object obj = getElementInfo(); + if (obj instanceof SourceTypeElementInfo) { + SourceTypeElementInfo info = (SourceTypeElementInfo) getElementInfo(); + return info.isInterface(); + } + return false; + } + + /** + * @see IType#isLocal() + */ + public boolean isLocal() throws JavaModelException { + return false; // cannot create source handle onto local types + } + + /** + * @see IType#isMember() + */ + public boolean isMember() throws JavaModelException { + return getDeclaringType() != null; + } + + /** + * @see IType + */ + // public ITypeHierarchy loadTypeHierachy(InputStream input, + // IProgressMonitor monitor) throws JavaModelException { + // return loadTypeHierachy(input, DefaultWorkingCopyOwner.PRIMARY, monitor); + // } + /** + * NOTE: This method is not part of the API has it is not clear clients + * would easily use it: they would need to first make sure all working + * copies for the given owner exist before calling it. This is especially + * har at startup time. In case clients want this API, here is how it should + * be specified: + *

+ * Loads a previously saved ITypeHierarchy from an input stream. A type + * hierarchy can be stored using ITypeHierachy#store(OutputStream). A + * compilation unit of a loaded type has the given owner if such a working + * copy exists, otherwise the type's compilation unit is a primary + * compilation unit. + * + * Only hierarchies originally created by the following methods can be + * loaded: + *