Bug 577378: [Ltk-Model] Improve extensible element/source struct content
provider

  - Make use of source struct content provider also for root element

Change-Id: I3d5df37582b925016e590983e11e34981f334241
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/util/ExtModelContentProvider.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/util/ExtModelContentProvider.java
index bc61bcf..912f2d6 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/util/ExtModelContentProvider.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/util/ExtModelContentProvider.java
@@ -147,9 +147,7 @@
 	
 	protected @NonNull SourceStructElement<?, ?>[] getElements(final @Nullable SourceUnitModelInfo modelInfo) {
 		if (modelInfo != null) {
-			final var children= modelInfo.getSourceElement()
-					.getSourceChildren(getContent().getContentFilter());
-			return children.toArray(new @NonNull SourceStructElement[children.size()]);
+			return getChildren(modelInfo.getSourceElement());
 		}
 		return NO_CHILDREN;
 	}
@@ -162,10 +160,7 @@
 		return parent;
 	}
 	
-	protected boolean hasChildren(@Nullable SourceStructElement<?, ?> element) {
-		if (skipToForeignElement(element)) {
-			element= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
-		}
+	protected boolean hasChildren(@Nullable final SourceStructElement<?, ?> element) {
 		SourceStructContentProvider provider;
 		if (element != null) {
 			if ((provider= getSourceStructContentProvider(element.getModelTypeId())) != null) {
@@ -178,10 +173,7 @@
 		return false;
 	}
 	
-	protected @NonNull SourceStructElement<?, ?>[] getChildren(@Nullable SourceStructElement<?, ?> element) {
-		if (skipToForeignElement(element)) {
-			element= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
-		}
+	protected @NonNull SourceStructElement<?, ?>[] getChildren(@Nullable final SourceStructElement<?, ?> element) {
 		SourceStructContentProvider provider;
 		if (element != null) {
 			try {
@@ -220,7 +212,11 @@
 	@Override
 	public boolean hasChildren(final Object element) {
 		if (element instanceof SourceStructElement) {
-			return hasChildren((SourceStructElement<?, ?>)element);
+			var sourceElement= (SourceStructElement<?, ?>)element;
+			if (skipToForeignElement(sourceElement)) {
+				sourceElement= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
+			}
+			return hasChildren(sourceElement);
 		}
 		return false;
 	}
@@ -228,7 +224,11 @@
 	@Override
 	public @NonNull Object[] getChildren(final Object element) {
 		if (element instanceof SourceStructElement) {
-			return getChildren((SourceStructElement<?, ?>)element);
+			var sourceElement= (SourceStructElement<?, ?>)element;
+			if (skipToForeignElement(sourceElement)) {
+				sourceElement= ((EmbeddingForeignElement<?, ?>)element).getForeignElement();
+			}
+			return getChildren(sourceElement);
 		}
 		return NO_CHILDREN;
 	}