blob: 2511726e93ef481ac409daf0d48cd05909636dc9 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2009, 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.builder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.statet.jcommons.text.core.BasicTextRegion;
import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.ltk.model.core.elements.IModelElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceUnit;
import org.eclipse.statet.r.core.model.IRElement;
import org.eclipse.statet.r.core.model.IRLangElement;
import org.eclipse.statet.r.core.model.RElementName;
import org.eclipse.statet.r.core.model.RModel;
public class ExportedRElement implements IRLangElement, Serializable {
private static final long serialVersionUID= -493469386405499748L;
static final List<? extends IRLangElement> getChildren(final List<? extends IRLangElement> children, final IModelElement.Filter filter) {
if (filter == null) {
return children;
}
else {
final ArrayList<IRLangElement> filtered= new ArrayList<>(children.size());
for (final IRLangElement child : children) {
if (filter.include(child)) {
filtered.add(child);
}
}
return filtered;
}
}
static final boolean hasChildren(final List<? extends IRLangElement> children, final IModelElement.Filter filter) {
if (filter == null) {
return (!children.isEmpty());
}
else {
for (final IRElement child : children) {
if (filter.include(child)) {
return true;
}
}
return false;
}
}
private IRLangElement parent;
private int elementType;
private RElementName elementName;
private String elementId;
private int sourceOffset;
private int sourceLength;
private int nameOffset;
private int nameLength;
public ExportedRElement(final IRLangElement parent, final IRLangElement sourceElement) {
this.parent= parent;
this.elementType= sourceElement.getElementType();
this.elementName= RElementName.cloneName(sourceElement.getElementName(), false);
this.elementId= sourceElement.getId();
{ final TextRegion sourceRange= sourceElement.getSourceRange();
if (sourceRange != null) {
this.sourceOffset= sourceRange.getStartOffset();
this.sourceLength= sourceRange.getLength();
}
else {
this.sourceOffset= -1;
}
}
{
final TextRegion sourceRange= sourceElement.getNameSourceRange();
if (sourceRange != null) {
this.nameOffset= sourceRange.getStartOffset();
this.nameLength= sourceRange.getLength();
}
else {
this.nameOffset= -1;
}
}
}
public ExportedRElement() {
}
@Override
public String getModelTypeId() {
return RModel.R_TYPE_ID;
}
@Override
public String getId() {
return this.elementId;
}
@Override
public int getElementType() {
return this.elementType;
}
@Override
public RElementName getElementName() {
return this.elementName;
}
@Override
public boolean exists() {
return true;
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public IRElement getModelParent() {
return this.parent;
}
@Override
public boolean hasModelChildren(final Filter filter) {
return false;
}
@Override
public List<? extends IRLangElement> getModelChildren(final Filter filter) {
return Collections.EMPTY_LIST;
}
@Override
public ISourceUnit getSourceUnit() {
return this.parent.getSourceUnit();
}
@Override
public TextRegion getSourceRange() {
if (this.sourceOffset >= 0) {
return new BasicTextRegion(this.sourceOffset, this.sourceOffset + this.sourceLength);
}
return null;
}
@Override
public TextRegion getNameSourceRange() {
if (this.nameOffset >= 0) {
return new BasicTextRegion(this.nameOffset, this.nameOffset + this.nameLength);
}
return null;
}
@Override
public TextRegion getDocumentationRange() {
return null;
}
@Override
public <T> T getAdapter(final Class<T> adapterType) {
return null;
}
}