blob: 75248de813c9bd2f7eecc04da3e70784c17b4cb7 [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.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.ltk.core.ElementName;
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.IRFrame;
import org.eclipse.statet.r.core.model.IRLangElement;
import org.eclipse.statet.r.core.model.IRSourceUnit;
import org.eclipse.statet.r.core.model.RElementName;
import org.eclipse.statet.r.core.model.RModel;
public class RUnitElement implements IRLangElement, Serializable {
private static final long serialVersionUID= 2909953007129363256L;
public static RUnitElement read(final IRSourceUnit su, final CompositeFrame envir, final InputStream input) throws IOException, ClassNotFoundException {
final ObjectInputStream o= new ObjectInputStream(input);
final RUnitElement element= (RUnitElement) o.readObject();
element.sourceUnit= su;
element.envir= envir;
return element;
}
private transient ISourceUnit sourceUnit;
transient CompositeFrame envir;
private List<IRLangElement> elements;
public RUnitElement(final IRSourceUnit su, final List<IRLangElement> children) {
this.sourceUnit= su;
this.elements= Collections.unmodifiableList(children);
}
/** For serialization */
public RUnitElement() {
}
@Override
public String getModelTypeId() {
return RModel.R_TYPE_ID;
}
@Override
public int getElementType() {
return IModelElement.C2_SOURCE_FILE;
}
@Override
public RElementName getElementName() {
final ElementName elementName= this.sourceUnit.getElementName();
if (elementName instanceof RElementName) {
return (RElementName) elementName;
}
return RElementName.create(RElementName.RESOURCE, elementName.getSegmentName());
}
@Override
public String getId() {
return this.sourceUnit.getId();
}
@Override
public boolean exists() {
return true;
}
@Override
public boolean isReadOnly() {
return this.sourceUnit.isReadOnly();
}
@Override
public ISourceUnit getSourceUnit() {
return this.sourceUnit;
}
@Override
public IRElement getModelParent() {
return null;
}
@Override
public boolean hasModelChildren(final Filter filter) {
return ExportedRElement.hasChildren(this.elements, filter);
}
@Override
public List<? extends IRLangElement> getModelChildren(final Filter filter) {
return ExportedRElement.getChildren(this.elements, filter);
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(final Class<T> adapterType) {
if (adapterType == IRFrame.class) {
return (T) this.envir;
}
return null;
}
public void save(final OutputStream outputStream) throws IOException {
final ObjectOutputStream o= new ObjectOutputStream(outputStream);
o.writeObject(this);
o.flush();
}
@Override
public TextRegion getSourceRange() {
return null;
}
@Override
public TextRegion getNameSourceRange() {
return null;
}
@Override
public TextRegion getDocumentationRange() {
return null;
}
}