import net.sourceforge.phpdt.core.ISourceRange;
import net.sourceforge.phpdt.core.ISourceReference;
import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
import net.sourceforge.phpdt.core.jdom.IDOMCompilationUnit;
import net.sourceforge.phpdt.core.jdom.IDOMNode;
+import net.sourceforge.phpdt.internal.core.util.MementoTokenizer;
+import net.sourceforge.phpdt.internal.core.util.Util;
import net.sourceforge.phpdt.internal.corext.Assert;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import net.sourceforge.phpdt.internal.core.JavaElementInfo;
-
-import net.sourceforge.phpdt.internal.core.JavaModelManager;
-import net.sourceforge.phpdt.internal.core.util.Util;
/**
* Root of Java element handle hierarchy.
- *
+ *
* @see IJavaElement
*/
public abstract class JavaElement extends PlatformObject
implements
IJavaElement {
-
+ public static final char JEM_ESCAPE = '\\';
public static final char JEM_JAVAPROJECT = '=';
public static final char JEM_PACKAGEFRAGMENTROOT = Path.SEPARATOR;
public static final char JEM_PACKAGEFRAGMENT = '<';
public static final char JEM_METHOD = '~';
public static final char JEM_INITIALIZER = '|';
public static final char JEM_COMPILATIONUNIT = '{';
- public static final char JEM_CLASSFILE = '(';
+// public static final char JEM_CLASSFILE = '(';
public static final char JEM_TYPE = '[';
public static final char JEM_PACKAGEDECLARATION = '%';
public static final char JEM_IMPORTDECLARATION = '#';
+ public static final char JEM_COUNT = '!';
+ public static final char JEM_LOCALVARIABLE = '@';
/**
* A count to uniquely identify this element in the case that a duplicate
*/
//protected int fLEType = 0;
/**
- * This element's parent, or <code>null</code> if this element does not
- * have a parent.
+ * This element's parent, or <code>null</code> if this
+ * element does not have a parent.
*/
- protected IJavaElement parent;
+ protected JavaElement parent;
/**
* This element's name, or an empty <code>String</code> if this element
protected boolean equalsDOMNode(IDOMNode node) throws JavaModelException {
return false;
}
+ protected void escapeMementoName(StringBuffer buffer, String mementoName) {
+ for (int i = 0, length = mementoName.length(); i < length; i++) {
+ char character = mementoName.charAt(i);
+ switch (character) {
+ case JEM_ESCAPE:
+ case JEM_COUNT:
+ case JEM_JAVAPROJECT:
+ case JEM_PACKAGEFRAGMENTROOT:
+ case JEM_PACKAGEFRAGMENT:
+ case JEM_FIELD:
+ case JEM_METHOD:
+ case JEM_INITIALIZER:
+ case JEM_COMPILATIONUNIT:
+// case JEM_CLASSFILE:
+ case JEM_TYPE:
+ case JEM_PACKAGEDECLARATION:
+ case JEM_IMPORTDECLARATION:
+ case JEM_LOCALVARIABLE:
+ buffer.append(JEM_ESCAPE);
+ }
+ buffer.append(character);
+ }
+ }
+
/**
* @see IJavaElement
*/
return name;
}
+ /*
+ * Creates a Java element handle from the given memento.
+ * The given token is the current delimiter indicating the type of the next token(s).
+ * The given working copy owner is used only for compilation unit handles.
+ */
+ public abstract IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner);
+ /*
+ * Creates a Java element handle from the given memento.
+ * The given working copy owner is used only for compilation unit handles.
+ */
+ public IJavaElement getHandleFromMemento(MementoTokenizer memento, WorkingCopyOwner owner) {
+ if (!memento.hasMoreTokens()) return this;
+ String token = memento.nextToken();
+ return getHandleFromMemento(token, memento, owner);
+ }
+ /*
+ * Update the occurence count of the receiver and creates a Java element handle from the given memento.
+ * The given working copy owner is used only for compilation unit handles.
+ */
+ public IJavaElement getHandleUpdatingCountFromMemento(MementoTokenizer memento, WorkingCopyOwner owner) {
+ this.occurrenceCount = Integer.parseInt(memento.nextToken());
+ if (!memento.hasMoreTokens()) return this;
+ String token = memento.nextToken();
+ return getHandleFromMemento(token, memento, owner);
+ }
/**
* @see IJavaElement
*/
/**
* @see JavaElement#getHandleMemento()
*/
- public String getHandleMemento() {
- StringBuffer buff = new StringBuffer(((JavaElement) getParent())
- .getHandleMemento());
+ public String getHandleMemento(){
+ StringBuffer buff= new StringBuffer(((JavaElement)getParent()).getHandleMemento());
buff.append(getHandleMementoDelimiter());
- buff.append(getElementName());
+ escapeMementoName(buff, getElementName());
+ if (this.occurrenceCount > 1) {
+ buff.append(JEM_COUNT);
+ buff.append(this.occurrenceCount);
+ }
return buff.toString();
}
/**
* Returns the <code>char</code> that marks the start of this handles
* contribution to a memento.
*/
+
+ /**
+ * Returns the <code>char</code> that marks the start of this handles
+ * contribution to a memento.
+ */
protected abstract char getHandleMementoDelimiter();
/**
* @see IJavaElement
return (IOpenable) parent;
}
+
/**
* @see IJavaElement
*/
int i;
for (i = 0; i < children.length; i++) {
IJavaElement aChild = children[i];
+
if (aChild instanceof SourceRefElement) {
SourceRefElement child = (SourceRefElement) children[i];
ISourceRange range = child.getSourceRange();
+// if (child.name.equals("stopObject")||range==null || range.getOffset()<=0) {
+// System.out.println(child.name);
+// }
if (position < range.getOffset() + range.getLength()
&& position >= range.getOffset()) {
if (child instanceof IParent) {
/*
* (non-Javadoc)
*
- * @see org.eclipse.jdt.core.IJavaElement#getSchedulingRule()
+ * @see net.sourceforge.phpdt.core.IJavaElement#getSchedulingRule()
*/
public ISchedulingRule getSchedulingRule() {
IResource resource = getResource();
return Util.combineHashCodes(this.name.hashCode(), this.parent
.hashCode());
}
-
/**
* Returns true if this element is an ancestor of the given element,
* otherwise false.
*/
- protected boolean isAncestorOf(IJavaElement e) {
- IJavaElement parent = e.getParent();
- while (parent != null && !parent.equals(this)) {
- parent = parent.getParent();
+ public boolean isAncestorOf(IJavaElement e) {
+ IJavaElement parentElement= e.getParent();
+ while (parentElement != null && !parentElement.equals(this)) {
+ parentElement= parentElement.getParent();
}
- return parent != null;
+ return parentElement != null;
}
-
+
/**
* @see IJavaElement
*/