Bug 577558: [Ltk-Model] Add SourceContainerElement
Change-Id: I81a08891a72f54c6c81f4e8445606b322bf4004a
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/LtkModelUtils.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/LtkModelUtils.java
index e4374fe..14b91e9 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/LtkModelUtils.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/LtkModelUtils.java
@@ -26,6 +26,7 @@
import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceContainerElement;
import org.eclipse.statet.ltk.model.core.element.SourceElement;
import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
import org.eclipse.statet.ltk.model.core.element.SourceUnit;
@@ -55,6 +56,17 @@
return null;
}
+ public static @Nullable SourceContainerElement<?> getSourceContainerElement(
+ @Nullable SourceStructElement<?, ?> element) {
+ while (element != null) {
+ if (element instanceof SourceContainerElement) {
+ return (SourceContainerElement<?>)element;
+ }
+ element= element.getSourceParent();
+ }
+ return null;
+ }
+
public static final <T> boolean hasChildren(final List<? extends @NonNull T> children, final @Nullable LtkModelElementFilter<? super @NonNull T> filter) {
if (filter == null) {
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/element/SourceContainerElement.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/element/SourceContainerElement.java
new file mode 100644
index 0000000..6a5358c
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/element/SourceContainerElement.java
@@ -0,0 +1,29 @@
+/*=============================================================================#
+ # Copyright (c) 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.ltk.model.core.element;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
+
+
+@NonNullByDefault
+public interface SourceContainerElement<TModelChild extends SourceElement<?>>
+ extends SourceElement<TModelChild> {
+
+
+ SourceModelStamp getStamp();
+
+}