import java.util.ArrayList;
-import net.sourceforge.phpdt.internal.core.JavaElement;
-
import net.sourceforge.phpdt.core.Flags;
import net.sourceforge.phpdt.core.IJavaElement;
import net.sourceforge.phpdt.core.IMember;
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 boolean areSimilarMethods(
- String name1, String[] params1,
- String name2, String[] params2,
- String[] simpleNames1) {
-
- if (name1.equals(name2)) {
- int params1Length = params1.length;
- if (params1Length == params2.length) {
- for (int i = 0; i < params1Length; i++) {
- String simpleName1 =
- simpleNames1 == null ?
- Signature.getSimpleName(Signature.toString(params1[i])) :
- simpleNames1[i];
- String simpleName2 = Signature.getSimpleName(Signature.toString(params2[i]));
- if (!simpleName1.equals(simpleName2)) {
- return false;
+
+ protected boolean areSimilarMethods(String name1, String[] params1,
+ String name2, String[] params2, String[] simpleNames1) {
+
+ if (name1.equals(name2)) {
+ int params1Length = params1.length;
+ if (params1Length == params2.length) {
+ for (int i = 0; i < params1Length; i++) {
+ String simpleName1 = simpleNames1 == null ? Signature
+ .getSimpleName(Signature.toString(params1[i]))
+ : simpleNames1[i];
+ String simpleName2 = Signature.getSimpleName(Signature
+ .toString(params2[i]));
+ if (!simpleName1.equals(simpleName2)) {
+ return false;
+ }
}
+ return true;
}
- return true;
}
+ return false;
}
- return false;
-}
-/**
- * Converts a field constant from the compiler's representation
- * to the Java Model constant representation (Number or String).
- */
-//protected static Object convertConstant(Constant constant) {
-// if (constant == null)
-// return null;
-// if (constant == Constant.NotAConstant) {
-// return null;
-// }
-// switch (constant.typeID()) {
-// case TypeIds.T_boolean :
-// return constant.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
-// case TypeIds.T_byte :
-// return new Byte(constant.byteValue());
-// case TypeIds.T_char :
-// return new Character(constant.charValue());
-// case TypeIds.T_double :
-// return new Double(constant.doubleValue());
-// case TypeIds.T_float :
-// return new Float(constant.floatValue());
-// case TypeIds.T_int :
-// return new Integer(constant.intValue());
-// case TypeIds.T_long :
-// return new Long(constant.longValue());
-// case TypeIds.T_short :
-// return new Short(constant.shortValue());
-// case TypeIds.T_String :
-// return constant.stringValue();
-// default :
-// return null;
-// }
-//}
-/**
- * @see JavaElement#equalsDOMNode
- */
-protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException {
- return getElementName().equals(node.getName());
-}
-/*
- * Helper method for SourceType.findMethods and BinaryType.findMethods
- */
-protected IMethod[] findMethods(IMethod method, IMethod[] methods) {
- String elementName = method.getElementName();
- String[] parameters = method.getParameterTypes();
- int paramLength = parameters.length;
- String[] simpleNames = new String[paramLength];
- for (int i = 0; i < paramLength; i++) {
- simpleNames[i] = Signature.getSimpleName(Signature.toString(parameters[i]));
+
+ /**
+ * Converts a field constant from the compiler's representation to the Java
+ * Model constant representation (Number or String).
+ */
+ // protected static Object convertConstant(Constant constant) {
+ // if (constant == null)
+ // return null;
+ // if (constant == Constant.NotAConstant) {
+ // return null;
+ // }
+ // switch (constant.typeID()) {
+ // case TypeIds.T_boolean :
+ // return constant.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
+ // case TypeIds.T_byte :
+ // return new Byte(constant.byteValue());
+ // case TypeIds.T_char :
+ // return new Character(constant.charValue());
+ // case TypeIds.T_double :
+ // return new Double(constant.doubleValue());
+ // case TypeIds.T_float :
+ // return new Float(constant.floatValue());
+ // case TypeIds.T_int :
+ // return new Integer(constant.intValue());
+ // case TypeIds.T_long :
+ // return new Long(constant.longValue());
+ // case TypeIds.T_short :
+ // return new Short(constant.shortValue());
+ // case TypeIds.T_String :
+ // return constant.stringValue();
+ // default :
+ // return null;
+ // }
+ // }
+ /**
+ * @see JavaElement#equalsDOMNode
+ */
+ protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException {
+ return getElementName().equals(node.getName());
}
- ArrayList list = new ArrayList();
- next: for (int i = 0, length = methods.length; i < length; i++) {
- IMethod existingMethod = methods[i];
- if (this.areSimilarMethods(
- elementName,
- parameters,
- existingMethod.getElementName(),
- existingMethod.getParameterTypes(),
- simpleNames)) {
- list.add(existingMethod);
+
+ /*
+ * Helper method for SourceType.findMethods and BinaryType.findMethods
+ */
+ protected IMethod[] findMethods(IMethod method, IMethod[] methods) {
+ String elementName = method.getElementName();
+ String[] parameters = method.getParameterTypes();
+ int paramLength = parameters.length;
+ String[] simpleNames = new String[paramLength];
+ for (int i = 0; i < paramLength; i++) {
+ simpleNames[i] = Signature.getSimpleName(Signature
+ .toString(parameters[i]));
+ }
+ ArrayList list = new ArrayList();
+ next: for (int i = 0, length = methods.length; i < length; i++) {
+ IMethod existingMethod = methods[i];
+ if (this.areSimilarMethods(elementName, parameters, existingMethod
+ .getElementName(), existingMethod.getParameterTypes(),
+ simpleNames)) {
+ list.add(existingMethod);
+ }
+ }
+ int size = list.size();
+ if (size == 0) {
+ return null;
+ } else {
+ IMethod[] result = new IMethod[size];
+ list.toArray(result);
+ return result;
}
}
- int size = list.size();
- if (size == 0) {
+
+ /**
+ * @see IMember
+ */
+ // public IClassFile getClassFile() {
+ // return ((JavaElement)getParent()).getClassFile();
+ // }
+ /**
+ * @see IMember
+ */
+ public IType getDeclaringType() {
+ JavaElement parentElement = (JavaElement) getParent();
+ if (parentElement.getElementType() == TYPE) {
+ return (IType) parentElement;
+ }
return null;
- } else {
- IMethod[] result = new IMethod[size];
- list.toArray(result);
- return result;
}
-}
-/**
- * @see IMember
- */
-//public IClassFile getClassFile() {
-// return ((JavaElement)getParent()).getClassFile();
-//}
-/**
- * @see IMember
- */
-public IType getDeclaringType() {
- JavaElement parentElement = (JavaElement)getParent();
- if (parentElement.getElementType() == TYPE) {
- return (IType) parentElement;
+
+ /**
+ * @see IMember
+ */
+ public int getFlags() throws JavaModelException {
+ MemberElementInfo info = (MemberElementInfo) getElementInfo();
+ return info.getModifiers();
}
- return null;
-}
-/**
- * @see IMember
- */
-public int getFlags() throws JavaModelException {
- MemberElementInfo info = (MemberElementInfo) getElementInfo();
- return info.getModifiers();
-}
-/**
- * @see JavaElement#getHandleMemento()
- */
-protected char getHandleMementoDelimiter() {
- return JavaElement.JEM_TYPE;
-}
-/**
- * @see IMember
- */
-public ISourceRange getNameRange() throws JavaModelException {
- MemberElementInfo info= (MemberElementInfo)getElementInfo();
- return new SourceRange(info.getNameSourceStart(), info.getNameSourceEnd() - info.getNameSourceStart() + 1);
-}
-/**
- * @see IMember
- */
-public boolean isBinary() {
- return false;
-}
-protected boolean isMainMethod(IMethod method) throws JavaModelException {
- if ("main".equals(method.getElementName()) && Signature.SIG_VOID.equals(method.getReturnType())) { //$NON-NLS-1$
- int flags= method.getFlags();
- if (Flags.isStatic(flags) && Flags.isPublic(flags)) {
- String[] paramTypes= method.getParameterTypes();
- if (paramTypes.length == 1) {
- String name= Signature.toString(paramTypes[0]);
- return "String[]".equals(Signature.getSimpleName(name)); //$NON-NLS-1$
+
+ /**
+ * @see JavaElement#getHandleMemento()
+ */
+ 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;
}
- return false;
-}
-/**
- * @see IJavaElement
- */
-public boolean isReadOnly() {
- return false; //getClassFile() != null;
-}
-/**
- */
-public String readableName() {
-
- IJavaElement declaringType = getDeclaringType();
- if (declaringType != null) {
- String declaringName = ((JavaElement) getDeclaringType()).readableName();
- StringBuffer buffer = new StringBuffer(declaringName);
- buffer.append('.');
- buffer.append(this.getElementName());
- return buffer.toString();
- } else {
- return super.readableName();
- }
-}
-/**
- * Updates the name range for this element.
- */
-protected void updateNameRange(int nameStart, int nameEnd) {
- try {
+
+ /**
+ * @see IMember
+ */
+ public ISourceRange getNameRange() throws JavaModelException {
MemberElementInfo info = (MemberElementInfo) getElementInfo();
- info.setNameSourceStart(nameStart);
- info.setNameSourceEnd(nameEnd);
- } catch (JavaModelException npe) {
- return;
+ return new SourceRange(info.getNameSourceStart(), info
+ .getNameSourceEnd()
+ - info.getNameSourceStart() + 1);
+ }
+
+ /**
+ * @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;
+ }
+
+ protected boolean isMainMethod(IMethod method) throws JavaModelException {
+ if ("main".equals(method.getElementName()) && Signature.SIG_VOID.equals(method.getReturnType())) { //$NON-NLS-1$
+ int flags = method.getFlags();
+ if (Flags.isStatic(flags) && Flags.isPublic(flags)) {
+ String[] paramTypes = method.getParameterTypes();
+ if (paramTypes.length == 1) {
+ String name = Signature.toString(paramTypes[0]);
+ return "String[]".equals(Signature.getSimpleName(name)); //$NON-NLS-1$
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @see IJavaElement
+ */
+ public boolean isReadOnly() {
+ return false; // getClassFile() != null;
+ }
+
+ /**
+ */
+ public String readableName() {
+
+ IJavaElement declaringType = getDeclaringType();
+ if (declaringType != null) {
+ String declaringName = ((JavaElement) getDeclaringType())
+ .readableName();
+ StringBuffer buffer = new StringBuffer(declaringName);
+ buffer.append('.');
+ buffer.append(this.getElementName());
+ return buffer.toString();
+ } else {
+ return super.readableName();
+ }
+ }
+
+ /**
+ * Updates the name range for this element.
+ */
+ protected void updateNameRange(int nameStart, int nameEnd) {
+ try {
+ MemberElementInfo info = (MemberElementInfo) getElementInfo();
+ info.setNameSourceStart(nameStart);
+ info.setNameSourceEnd(nameEnd);
+ } catch (JavaModelException npe) {
+ return;
+ }
}
-}
}