blob: 86e3ed4a082d66e23dd16c562d9f929b54776cb0 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2014, 2021 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.redocs.wikitext.r.ui.sourceediting;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
import org.eclipse.statet.docmlet.wikitext.core.model.WikitextModel;
import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement;
import org.eclipse.statet.ltk.model.core.element.EmbeddingForeignElement;
import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
import org.eclipse.statet.ltk.ui.sourceediting.OutlineContentProvider;
@NonNullByDefault
public class DocROutlineContentProvider extends OutlineContentProvider {
public DocROutlineContentProvider(final OutlineContent content) {
super(content);
}
private boolean skipToForeignElement(final @Nullable SourceStructElement<?, ?> element) {
return (element != null
&& element.getModelTypeId() == WikitextModel.WIKIDOC_TYPE_ID
&& element.getElementType() == WikitextSourceElement.C1_EMBEDDED);
}
@Override
public @Nullable SourceStructElement getParent(final SourceStructElement<?, ?> element) {
final SourceStructElement parent= super.getParent(element);
if (parent != null && skipToForeignElement(parent.getSourceParent())) {
return parent.getSourceParent();
}
return parent;
}
@Override
public boolean hasChildren(final @Nullable SourceStructElement<?, ?> element) {
if (skipToForeignElement(element)) {
final SourceStructElement<?, ?> foreignElement= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
return super.hasChildren(foreignElement);
}
return super.hasChildren(element);
}
@Override
public SourceStructElement[] getChildren(final @Nullable SourceStructElement<?, ?> element) {
if (skipToForeignElement(element)) {
final SourceStructElement<?, ?> foreignElement= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
return super.getChildren(foreignElement);
}
return super.getChildren(element);
}
}