[456188] Filter for inherited EReferences listed within the EClass

This add a filter 'Hide inherited reference'. If the filter is active, a
class node will only show references that are defined by that class.

Bug: 456188
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=456188
Change-Id: I1b1fc003ca4336bc7dfba1b2f0dd00430b16ea8c
Signed-off-by: Felix Dorner <felix.dorner@gmail.com>
diff --git a/org.eclipse.emf.ecoretools.design/description/ecore.odesign b/org.eclipse.emf.ecoretools.design/description/ecore.odesign
index d1bd947..a4cda03 100644
--- a/org.eclipse.emf.ecoretools.design/description/ecore.odesign
+++ b/org.eclipse.emf.ecoretools.design/description/ecore.odesign
@@ -18,6 +18,9 @@
       <filters xsi:type="filter:CompositeFilterDescription" name="Hide references (nodes)">
         <filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
       </filters>
+      <filters xsi:type="filter:CompositeFilterDescription" name="Hide inherited references (nodes)">
+        <filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']" viewConditionExpression="aql:self.eContainer().oclAsType(viewpoint::DSemanticDecorator).target = self.oclAsType(viewpoint::DSemanticDecorator).target.eContainer()"/>
+      </filters>
       <filters xsi:type="filter:CompositeFilterDescription" name="Hide derived features">
         <filters xsi:type="filter:MappingFilter" mappings="//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20'] //@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']" semanticConditionExpression="aql:not self.derived"/>
       </filters>
diff --git a/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java b/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
index 4163744..4f9e56a 100644
--- a/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
+++ b/org.eclipse.emf.ecoretools.design/src/org/eclipse/emf/ecoretools/design/service/DesignServices.java
@@ -230,10 +230,10 @@
 
     public Set<EClass> getDisplayedEClasses(DSemanticDiagram diagram) {
         Set<EClass> result = Sets.newLinkedHashSet();
-        Iterator<DDiagramElement> it = new DDiagramQuery(diagram).getAllDiagramElements().iterator();
+        Iterator<DNodeList> it = Iterators.filter(new DDiagramQuery(diagram).getAllDiagramElements().iterator(), DNodeList.class);
         while (it.hasNext()) {
-            DDiagramElement dec = it.next();
-            if (dec.getTarget() instanceof EClass) {
+            DNodeList dec = it.next();
+            if (dec.getTarget() instanceof EClass && dec.isVisible()) {
                 result.add((EClass) dec.getTarget());
             }
         }