/******************************************************************************* * Copyright (c) 2016 xored software, Inc. 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: * xored software, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.dltk.core.model.binary; import org.eclipse.dltk.core.IModelElement; import org.eclipse.dltk.core.INamespace; import org.eclipse.dltk.core.ISourceRange; import org.eclipse.dltk.core.ModelException; import org.eclipse.dltk.core.SourceRange; import org.eclipse.dltk.core.WorkingCopyOwner; import org.eclipse.dltk.internal.core.MementoModelElementUtil; import org.eclipse.dltk.internal.core.ModelElement; import org.eclipse.dltk.internal.core.NamedMember; import org.eclipse.dltk.internal.core.util.MementoTokenizer; /** * @since 2.0 */ public abstract class BinaryMember extends NamedMember implements ISourceMapperProvider { public BinaryMember(ModelElement parent, String name) { super(parent, name); } @Override public boolean exists() { return true; } @Override protected char getHandleMementoDelimiter() { return JEM_USER_ELEMENT; } @Override public ISourceRange getSourceRange() throws ModelException { final SourceMapper mapper = getSourceMapper(); if (mapper != null) { return mapper.getSourceRange(this); } return new SourceRange(0, 0); } @Override public ISourceRange getNameRange() throws ModelException { final SourceMapper mapper = getSourceMapper(); if (mapper != null) { return mapper.getNameRange(this); } return new SourceRange(0, 0); } @Override public SourceMapper getSourceMapper() { IModelElement parent = getParent(); if (parent instanceof ISourceMapperProvider) { return ((ISourceMapperProvider) parent).getSourceMapper(); } return null; } @Override public int getFlags() throws ModelException { return ((BinaryMemberInfo) getElementInfo()).getFlags(); } @Override public INamespace getNamespace() throws ModelException { return ((BinaryMemberInfo) getElementInfo()).getNamespace(); } @Override public IModelElement getHandleFromMemento(String token, MementoTokenizer memento, WorkingCopyOwner workingCopyOwner) { switch (token.charAt(0)) { case JEM_USER_ELEMENT: return MementoModelElementUtil.getHandleFromMemento(memento, this, workingCopyOwner); } return null; } }