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();
+	
+}