/*=============================================================================# # Copyright (c) 2009-2016 Stephan Wahlbrink (WalWare.de) 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: # Stephan Wahlbrink - initial API and implementation #=============================================================================*/ package de.walware.statet.r.internal.rdata; import org.eclipse.jface.text.IRegion; import de.walware.ecommons.ltk.core.model.IModelElement; import de.walware.ecommons.ltk.core.model.ISourceUnit; import de.walware.rj.data.RList; import de.walware.rj.data.RObject; import de.walware.statet.r.core.data.ICombinedRElement; import de.walware.statet.r.core.model.RElementName; import de.walware.statet.r.core.model.RModel; public abstract class CombinedElement implements ICombinedRElement { private final CombinedElement fParent; private RElementName fElementName; protected CombinedElement(final CombinedElement parent, final RElementName name) { fParent = parent; fElementName = name; } @Override public RList getAttributes() { return null; } @Override public String getModelTypeId() { return RModel.TYPE_ID; } @Override public String getId() { return null; // not yet implemented } @Override public final RElementName getElementName() { return fElementName; } /** Internal **/ public final void setElementName(final RElementName name) { fElementName = name; } @Override public boolean exists() { return true; } @Override public boolean isReadOnly() { return false; } @Override public final CombinedElement getModelParent() { return fParent; } @Override public ISourceUnit getSourceUnit() { return null; } @Override public IRegion getSourceRange() { return null; } @Override public IRegion getNameSourceRange() { return null; } @Override public IRegion getDocumentationRange() { return null; } @Override public Object getAdapter(final Class required) { if (IModelElement.class.equals(required)) { return this; } if (RObject.class.equals(required)) { return this; } return null; } @Override public final int hashCode() { if (fParent != null) { return singleHash()-fParent.singleHash(); } return singleHash(); } protected int singleHash() { return getElementName().hashCode(); } @Override public boolean equals(final Object obj) { if (obj == this) { return true; } if (!(obj instanceof CombinedElement)) { return false; } final ICombinedRElement other = (ICombinedRElement) obj; return (getElementName().equals(other.getElementName()) && ((fParent != null) ? fParent.equals(other.getModelParent()) : (other.getModelParent() == null)) ); } }