blob: 84892636c8cb095c179081612d9565bbbad27b12 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2009, 2020 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.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.RElementName;
public abstract class RChunkBuildElement implements IBuildSourceFrameElement {
protected final ISourceStructElement parent;
protected final AstNode node;
protected final RElementName name;
protected final TextRegion nameRegion;
int occurrenceCount;
BuildSourceFrame envir;
List<? extends IRLangSourceElement> sourceChildrenProtected= RSourceElements.NO_R_SOURCE_CHILDREN;
public RChunkBuildElement(final ISourceStructElement parent, final AstNode node,
final RElementName name, final TextRegion nameRegion) {
this.parent= parent;
this.node= node;
this.name= name;
this.nameRegion= nameRegion;
}
@Override
public void setSourceChildren(final List<? extends IRLangSourceElement> children) {
this.sourceChildrenProtected= children;
}
@Override
public BuildSourceFrame getBuildFrame() {
return this.envir;
}
@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 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
@SuppressWarnings("unchecked")
public <T> T getAdapter(final Class<T> adapterType) {
if (adapterType == IRFrame.class) {
return (T) this.envir;
}
if (adapterType == AstNode.class) {
return (T) this.node;
}
return null;
}
@Override
public int hashCode() {
return IRElement.C2_SOURCE_CHUNK * this.name.getSegmentName().hashCode() + this.occurrenceCount;
}
@Override
public boolean equals(final Object obj) {
final RChunkBuildElement other;
return ( (obj instanceof RChunkBuildElement)
&& this.occurrenceCount == (other= (RChunkBuildElement) obj).occurrenceCount
&& this.name.equals(other.name) );
}
}