import java.util.ArrayList;
-import net.sourceforge.phpdt.internal.core.JavaElement;
+import net.sourceforge.phpdt.internal.core.SourceType;
import net.sourceforge.phpdt.core.Flags;
import net.sourceforge.phpdt.core.IJavaElement;
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 {
+public abstract class Member extends SourceRefElement implements IMember {
protected Member(JavaElement parent, String name) {
super(parent, name);
}
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
*/
/**
* @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;
}