| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.core; |
| |
| import java.util.HashMap; |
| |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.jdt.core.*; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.core.WorkingCopyOwner; |
| import org.eclipse.jdt.internal.core.util.MementoTokenizer; |
| import org.eclipse.jdt.internal.core.util.Util; |
| |
| |
| public class LocalVariable extends SourceRefElement implements ILocalVariable { |
| |
| String name; |
| public int declarationSourceStart, declarationSourceEnd; |
| public int nameStart, nameEnd; |
| String typeSignature; |
| |
| public LocalVariable( |
| JavaElement parent, |
| String name, |
| int declarationSourceStart, |
| int declarationSourceEnd, |
| int nameStart, |
| int nameEnd, |
| String typeSignature) { |
| |
| super(parent); |
| this.name = name; |
| this.declarationSourceStart = declarationSourceStart; |
| this.declarationSourceEnd = declarationSourceEnd; |
| this.nameStart = nameStart; |
| this.nameEnd = nameEnd; |
| this.typeSignature = typeSignature; |
| } |
| |
| protected void closing(Object info) { |
| // a local variable has no info |
| } |
| |
| protected Object createElementInfo() { |
| // a local variable has no info |
| return null; |
| } |
| |
| public boolean equals(Object o) { |
| if (!(o instanceof LocalVariable)) return false; |
| LocalVariable other = (LocalVariable)o; |
| return |
| this.declarationSourceStart == other.declarationSourceStart |
| && this.declarationSourceEnd == other.declarationSourceEnd |
| && this.nameStart == other.nameStart |
| && this.nameEnd == other.nameEnd |
| && super.equals(o); |
| } |
| |
| public boolean exists() { |
| return this.parent.exists(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=46192 |
| } |
| |
| protected void generateInfos(Object info, HashMap newElements, IProgressMonitor pm) { |
| // a local variable has no info |
| } |
| |
| public IJavaElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner owner) { |
| switch (token.charAt(0)) { |
| case JEM_COUNT: |
| return getHandleUpdatingCountFromMemento(memento, owner); |
| } |
| return this; |
| } |
| |
| /* |
| * @see JavaElement#getHandleMemento(StringBuffer) |
| */ |
| protected void getHandleMemento(StringBuffer buff) { |
| ((JavaElement)getParent()).getHandleMemento(buff); |
| buff.append(getHandleMementoDelimiter()); |
| buff.append(this.name); |
| buff.append(JEM_COUNT); |
| buff.append(this.declarationSourceStart); |
| buff.append(JEM_COUNT); |
| buff.append(this.declarationSourceEnd); |
| buff.append(JEM_COUNT); |
| buff.append(this.nameStart); |
| buff.append(JEM_COUNT); |
| buff.append(this.nameEnd); |
| buff.append(JEM_COUNT); |
| buff.append(this.typeSignature); |
| if (this.occurrenceCount > 1) { |
| buff.append(JEM_COUNT); |
| buff.append(this.occurrenceCount); |
| } |
| } |
| |
| protected char getHandleMementoDelimiter() { |
| return JavaElement.JEM_LOCALVARIABLE; |
| } |
| |
| public IResource getCorrespondingResource() { |
| return null; |
| } |
| |
| public String getElementName() { |
| return this.name; |
| } |
| |
| public int getElementType() { |
| return LOCAL_VARIABLE; |
| } |
| |
| public ISourceRange getNameRange() { |
| return new SourceRange(this.nameStart, this.nameEnd-this.nameStart+1); |
| } |
| |
| public IPath getPath() { |
| return this.parent.getPath(); |
| } |
| |
| public IResource getResource() { |
| return this.parent.getResource(); |
| } |
| |
| /** |
| * @see ISourceReference |
| */ |
| public String getSource() throws JavaModelException { |
| IOpenable openable = this.parent.getOpenableParent(); |
| IBuffer buffer = openable.getBuffer(); |
| if (buffer == null) { |
| return null; |
| } |
| ISourceRange range = getSourceRange(); |
| int offset = range.getOffset(); |
| int length = range.getLength(); |
| if (offset == -1 || length == 0 ) { |
| return null; |
| } |
| try { |
| return buffer.getText(offset, length); |
| } catch(RuntimeException e) { |
| return null; |
| } |
| } |
| |
| /** |
| * @see ISourceReference |
| */ |
| public ISourceRange getSourceRange() { |
| return new SourceRange(this.declarationSourceStart, this.declarationSourceEnd-this.declarationSourceStart+1); |
| } |
| |
| public String getTypeSignature() { |
| return this.typeSignature; |
| } |
| |
| public IResource getUnderlyingResource() throws JavaModelException { |
| return this.parent.getUnderlyingResource(); |
| } |
| |
| public int hashCode() { |
| return Util.combineHashCodes(this.parent.hashCode(), this.nameStart); |
| } |
| |
| public boolean isStructureKnown() throws JavaModelException { |
| return true; |
| } |
| |
| protected void toStringInfo(int tab, StringBuffer buffer, Object info, boolean showResolvedInfo) { |
| buffer.append(this.tabString(tab)); |
| if (info != NO_INFO) { |
| buffer.append(Signature.toString(this.getTypeSignature())); |
| buffer.append(" "); //$NON-NLS-1$ |
| } |
| toStringName(buffer); |
| } |
| } |