X-Git-Url: http://git.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 eb6d570..e98ed5b 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 @@ -27,7 +27,7 @@ import net.sourceforge.phpdt.core.jdom.IDOMNode; * @see IMember */ -/* package */ abstract class Member extends SourceRefElement implements IMember { +public abstract class Member extends SourceRefElement implements IMember { protected Member(JavaElement parent, String name) { super(parent, name); } @@ -154,6 +154,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 */ @@ -164,6 +191,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; }