blob: 3ad7ea9f6fca079506b7b10d776c658f51051a46 [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.core.ElementName;
import org.eclipse.statet.ltk.model.core.elements.IModelElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceStructElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceUnitModelInfo;
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;
abstract class RSourceFileElement implements IRLangSourceElement {
private final IRSourceUnit sourceUnit;
protected final BuildSourceFrame envir;
public RSourceFileElement(final IRSourceUnit su, final BuildSourceFrame envir) {
this.sourceUnit= su;
this.envir= envir;
}
@Override
public final 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() {
final ISourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(RModel.R_TYPE_ID, 0, null);
return (modelInfo != null && modelInfo.getSourceElement() == this);
}
@Override
public boolean isReadOnly() {
return this.sourceUnit.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 null;
}
@Override
public ISourceStructElement getSourceParent() {
return null;
}
@Override
public IRSourceUnit getSourceUnit() {
return this.sourceUnit;
}
@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 == IRFrame.class) {
return (T) this.envir;
}
return null;
}
@Override
public int hashCode() {
return this.sourceUnit.hashCode();
}
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof ISourceStructElement)) {
return false;
}
final ISourceStructElement other= (ISourceStructElement) obj;
return ((other.getElementType() & IModelElement.MASK_C2) == IModelElement.C2_SOURCE_FILE)
&& this.sourceUnit.equals(other.getSourceUnit());
}
}