X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Member.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Member.java index 1d53b70..63576cf 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Member.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/Member.java @@ -12,6 +12,8 @@ package net.sourceforge.phpdt.internal.core; import java.util.ArrayList; +import net.sourceforge.phpdt.internal.core.SourceType; + import net.sourceforge.phpdt.core.Flags; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.IMember; @@ -22,17 +24,15 @@ import net.sourceforge.phpdt.core.JavaModelException; import net.sourceforge.phpdt.core.Signature; import net.sourceforge.phpdt.core.jdom.IDOMNode; -import com.sun.corba.se.internal.core.Constant; - /** * @see IMember */ -/* package */ abstract class Member extends SourceRefElement implements IMember { -protected Member(int type, IJavaElement parent, String name) { - super(type, parent, name); -} +public abstract class Member extends SourceRefElement implements IMember { + protected Member(JavaElement parent, String name) { + super(parent, name); + } protected boolean areSimilarMethods( String name1, String[] params1, String name2, String[] params2, @@ -137,9 +137,9 @@ protected IMethod[] findMethods(IMethod method, IMethod[] methods) { * @see IMember */ public IType getDeclaringType() { - JavaElement parent = (JavaElement)getParent(); - if (parent.fLEType == TYPE) { - return (IType) parent; + JavaElement parentElement = (JavaElement)getParent(); + if (parentElement.getElementType() == TYPE) { + return (IType) parentElement; } return null; } @@ -156,6 +156,33 @@ public int getFlags() throws JavaModelException { protected char getHandleMementoDelimiter() { return JavaElement.JEM_TYPE; } +/* + * Returns the outermost context defining a local element. Per construction, it can only be a + * method/field/initializarer member; thus, returns null if this member is already a top-level type or member type. + * e.g for X.java/X/Y/foo()/Z/bar()/T, it will return X.java/X/Y/foo() + */ +public Member getOuterMostLocalContext() { + IJavaElement current = this; + Member lastLocalContext = null; + parentLoop: while (true) { + switch (current.getElementType()) { + case CLASS_FILE: + case COMPILATION_UNIT: + break parentLoop; // done recursing + case TYPE: + // cannot be a local context + break; + case INITIALIZER: + case FIELD: + case METHOD: + // these elements can define local members + lastLocalContext = (Member) current; + break; + } + current = current.getParent(); + } + return lastLocalContext; +} /** * @see IMember */ @@ -166,6 +193,18 @@ public ISourceRange getNameRange() throws JavaModelException { /** * @see IMember */ +public IType getType(String typeName, int count) { + if (isBinary()) { + throw new IllegalArgumentException("Not a source member " + toStringWithAncestors()); //$NON-NLS-1$ + } else { + SourceType type = new SourceType(this, typeName); + type.occurrenceCount = count; + return type; + } +} +/** + * @see IMember + */ public boolean isBinary() { return false; }