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..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; @@ -27,7 +29,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 +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 */ @@ -164,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; }