blob: 14379f65e259951af292c41557f0596a8108102d [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;
import java.util.List;
import org.eclipse.statet.jcommons.lang.ObjectUtils;
import org.eclipse.statet.ltk.model.core.elements.IModelElement;
import org.eclipse.statet.ltk.model.core.elements.ISourceElement;
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.RElementName;
public class FilteredFrame implements IRFrame, IModelElement.Filter {
private final IRFrame frame;
private final ISourceUnit exclude;
public FilteredFrame(final IRFrame frame, final ISourceUnit exclude) {
this.frame= frame;
this.exclude= exclude;
}
@Override
public String getFrameId() {
return this.frame.getFrameId();
}
@Override
public int getFrameType() {
return this.frame.getFrameType();
}
@Override
public RElementName getElementName() {
return this.frame.getElementName();
}
@Override
public boolean hasModelChildren(final IModelElement.Filter filter) {
return this.frame.hasModelChildren((this.exclude != null) ? this : null);
}
@Override
public List<? extends IRLangElement> getModelChildren(final IModelElement.Filter filter) {
return this.frame.getModelChildren((this.exclude != null) ? this : null);
}
@Override
public List<? extends IRElement> getModelElements() {
return this.frame.getModelElements();
}
@Override
public List<? extends IRFrame> getPotentialParents() {
return this.frame.getPotentialParents();
}
@Override
public boolean include(final IModelElement element) {
final ISourceUnit su= (element instanceof ISourceElement) ?
((ISourceElement) element).getSourceUnit() : null;
return (su == null || !this.exclude.getId().equals(su.getId()) );
}
@Override
public String toString() {
final ObjectUtils.ToStringBuilder builder= new ObjectUtils.ToStringBuilder(
"FilteredFrame", getClass() ); //$NON-NLS-1$
builder.addProp("frame", this.frame); //$NON-NLS-1$
builder.addProp("exclude", this.exclude); //$NON-NLS-1$
return builder.build();
}
}