X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaElement.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaElement.java index 6eb79ee..a14455c 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaElement.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/core/JavaElement.java @@ -25,8 +25,10 @@ import net.sourceforge.phpdt.core.IParent; 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; @@ -43,13 +45,13 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; /** * 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 = '<'; @@ -57,10 +59,12 @@ public abstract class JavaElement extends PlatformObject 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 @@ -77,10 +81,10 @@ public abstract class JavaElement extends PlatformObject */ //protected int fLEType = 0; /** - * This element's parent, or null if this element does not - * have a parent. + * This element's parent, or null if this + * element does not have a parent. */ - protected IJavaElement parent; + protected JavaElement parent; /** * This element's name, or an empty String if this element @@ -159,6 +163,30 @@ public abstract class JavaElement extends PlatformObject 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 */ @@ -332,6 +360,31 @@ public abstract class JavaElement extends PlatformObject 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 */ @@ -341,17 +394,25 @@ public abstract class JavaElement extends PlatformObject /** * @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 char that marks the start of this handles * contribution to a memento. */ + + /** + * Returns the char that marks the start of this handles + * contribution to a memento. + */ protected abstract char getHandleMementoDelimiter(); /** * @see IJavaElement @@ -399,6 +460,7 @@ public abstract class JavaElement extends PlatformObject return (IOpenable) parent; } + /** * @see IJavaElement */ @@ -434,9 +496,13 @@ public abstract class JavaElement extends PlatformObject 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) { @@ -463,7 +529,7 @@ public abstract class JavaElement extends PlatformObject /* * (non-Javadoc) * - * @see org.eclipse.jdt.core.IJavaElement#getSchedulingRule() + * @see net.sourceforge.phpdt.core.IJavaElement#getSchedulingRule() */ public ISchedulingRule getSchedulingRule() { IResource resource = getResource(); @@ -523,19 +589,18 @@ public abstract class JavaElement extends PlatformObject 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 */