blob: 7e8a45ac507ee631f3b2c01e03ccc21a82f812a3 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2008, 2019 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.r.core.sourcemodel;
import java.util.List;
import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.ltk.ast.core.AstNode;
import org.eclipse.statet.ltk.model.core.elements.IModelElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
import org.eclipse.statet.r.core.model.IRElement;
import org.eclipse.statet.r.core.model.IRFrame;
import org.eclipse.statet.r.core.model.IRLangSourceElement;
import org.eclipse.statet.r.core.model.IRSourceUnit;
import org.eclipse.statet.r.core.model.RElementName;
import org.eclipse.statet.r.core.model.RModel;
import org.eclipse.statet.r.core.rsource.ast.RAstNode;
final class RoxygenRCodeElement implements IBuildSourceFrameElement {
private final IRLangSourceElement parent;
private final int number;
private final RAstNode sourceNode;
private final List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
private BuildSourceFrame envir;
public RoxygenRCodeElement(final IRLangSourceElement parent, final int number, final BuildSourceFrame envir, final RAstNode node) {
this.parent= parent;
this.number= number;
this.sourceNode= node;
}
@Override
public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
// sourceChildrenProtected= children;
}
@Override
public BuildSourceFrame getBuildFrame() {
return this.envir;
}
@Override
public String getModelTypeId() {
return RModel.R_TYPE_ID;
}
@Override
public int getElementType() {
return IRElement.R_DOC_EXAMPLE_CHUNK;
}
@Override
public RElementName getElementName() {
return null;
}
@Override
public String getId() {
return Integer.toHexString(IRElement.R_DOC_EXAMPLE_CHUNK) + ":#" + this.number;
}
@Override
public boolean exists() {
return getSourceUnit().exists();
}
@Override
public boolean isReadOnly() {
return getSourceUnit().isReadOnly();
}
@Override
public IRElement getModelParent() {
return null;
}
@Override
public boolean hasModelChildren(final Filter filter) {
return false;
}
@Override
public List<? extends IRLangSourceElement> getModelChildren(final Filter filter) {
return RSourceElements.NO_R_SOURCE_CHILDREN;
}
@Override
public ISourceStructElement getSourceParent() {
return this.parent;
}
@Override
public boolean hasSourceChildren(final Filter filter) {
return RSourceElements.hasChildren(this.sourceChildrenProtected, filter);
}
@Override
public List<? extends IRLangSourceElement> getSourceChildren(final Filter filter) {
return RSourceElements.getChildren(this.sourceChildrenProtected, filter);
}
@Override
public IRSourceUnit getSourceUnit() {
return this.parent.getSourceUnit();
}
@Override
public TextRegion getSourceRange() {
return this.sourceNode;
}
@Override
public TextRegion getNameSourceRange() {
return null;
}
@Override
public TextRegion getDocumentationRange() {
return null;
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(final Class<T> adapterType) {
if (adapterType == AstNode.class) {
return (T) this.sourceNode;
}
if (adapterType == IRFrame.class) {
return (T) this.envir;
}
return null;
}
@Override
public int hashCode() {
return this.parent.hashCode() + this.number;
}
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof RoxygenRCodeElement)) {
return false;
}
final RoxygenRCodeElement other= (RoxygenRCodeElement) obj;
return ( ((other.getElementType() & IModelElement.MASK_C3) == IRElement.R_DOC_EXAMPLE_CHUNK)
&& this.number == other.number
&& this.parent.equals(other.parent) );
}
}