[550338] Generic type cache not update on EClasses
diff --git a/features/org.eclipse.emf.base-feature/feature.xml b/features/org.eclipse.emf.base-feature/feature.xml
index 5aee2ec..811a7a4 100644
--- a/features/org.eclipse.emf.base-feature/feature.xml
+++ b/features/org.eclipse.emf.base-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.base"
       label="%featureName"
-      version="2.18.0.qualifier"
+      version="2.19.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.emf.license"
       license-feature-version="2.11.0">
diff --git a/features/org.eclipse.emf.base-feature/pom.xml b/features/org.eclipse.emf.base-feature/pom.xml
index 6043ff3..7930f9d 100644
--- a/features/org.eclipse.emf.base-feature/pom.xml
+++ b/features/org.eclipse.emf.base-feature/pom.xml
@@ -11,7 +11,7 @@
 
   <groupId>org.eclipse.emf.features</groupId>
   <artifactId>org.eclipse.emf.base</artifactId>
-  <version>2.18.0-SNAPSHOT</version>
+  <version>2.19.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
 </project>
diff --git a/features/org.eclipse.emf.ecore-feature/feature.xml b/features/org.eclipse.emf.ecore-feature/feature.xml
index 61e67d9..6d56c58 100644
--- a/features/org.eclipse.emf.ecore-feature/feature.xml
+++ b/features/org.eclipse.emf.ecore-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.emf.ecore"
       label="%featureName"
-      version="2.18.0.qualifier"
+      version="2.19.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.emf.license"
       license-feature-version="2.11.0">
diff --git a/features/org.eclipse.emf.ecore-feature/pom.xml b/features/org.eclipse.emf.ecore-feature/pom.xml
index 99cd417..345ae76 100644
--- a/features/org.eclipse.emf.ecore-feature/pom.xml
+++ b/features/org.eclipse.emf.ecore-feature/pom.xml
@@ -12,7 +12,7 @@
 
   <groupId>org.eclipse.emf.features</groupId>
   <artifactId>org.eclipse.emf.ecore</artifactId>
-  <version>2.18.0-SNAPSHOT</version>
+  <version>2.19.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
 </project>
diff --git a/plugins/org.eclipse.emf.codegen.ecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.codegen.ecore/META-INF/MANIFEST.MF
index f11a43c..a1fa883 100644
--- a/plugins/org.eclipse.emf.codegen.ecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.codegen.ecore/META-INF/MANIFEST.MF
@@ -23,7 +23,7 @@
  org.eclipse.core.resources;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.5.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.18.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.19.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.codegen;bundle-version="[2.19.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.xmi;bundle-version="[2.16.0,3.0.0)",
  org.eclipse.text;bundle-version="[3.5.0,4.0.0)"
diff --git a/plugins/org.eclipse.emf.ecore.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.ecore.edit/META-INF/MANIFEST.MF
index 215ca7c..154cae8 100644
--- a/plugins/org.eclipse.emf.ecore.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.ecore.edit/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
 Export-Package: org.eclipse.emf.ecore.provider,
  org.eclipse.emf.ecore.provider.annotation
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.6.0,4.0.0)";resolution:=optional;x-installation:=greedy,
- org.eclipse.emf.ecore;bundle-version="[2.18.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.19.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.15.0,3.0.0)";visibility:=reexport
 Import-Package: org.osgi.framework;version="[1.5.0,2.0.0)"
 Eclipse-LazyStart: true
diff --git a/plugins/org.eclipse.emf.ecore.xcore/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.ecore.xcore/META-INF/MANIFEST.MF
index 58d13c5..3555811 100644
--- a/plugins/org.eclipse.emf.ecore.xcore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.ecore.xcore/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.xtext;bundle-version="[2.13.0,3.0.0)";visibility:=reexport,
  org.apache.log4j;bundle-version="[1.2.0,2.0.0)";visibility:=reexport,
- org.eclipse.emf.ecore;bundle-version="[2.18.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.19.0,3.0.0)";visibility:=reexport,
  org.eclipse.xtext.util;bundle-version="[2.13.0,3.0.0)",
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
  org.eclipse.xtext.xbase;bundle-version="[2.13.0,3.0.0)";visibility:=reexport,
diff --git a/plugins/org.eclipse.emf.ecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.ecore/META-INF/MANIFEST.MF
index b04475e..8ad53e7 100644
--- a/plugins/org.eclipse.emf.ecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.ecore/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.emf.ecore;singleton:=true
-Bundle-Version: 2.18.0.qualifier
+Bundle-Version: 2.19.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.emf.ecore.plugin.EcorePlugin$Implementation$Activator
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.emf.ecore/pom.xml b/plugins/org.eclipse.emf.ecore/pom.xml
index c86888e..bcd1858 100644
--- a/plugins/org.eclipse.emf.ecore/pom.xml
+++ b/plugins/org.eclipse.emf.ecore/pom.xml
@@ -12,7 +12,7 @@
 
   <groupId>org.eclipse.emf</groupId>
   <artifactId>org.eclipse.emf.ecore</artifactId>
-  <version>2.18.0-SNAPSHOT</version>
+  <version>2.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EClassImpl.java b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EClassImpl.java
index 78a19c6..68ba010 100644
--- a/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EClassImpl.java
+++ b/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/EClassImpl.java
@@ -2206,6 +2206,7 @@
             {
               eAllStructuralFeatures = null;
               eAllStructuralFeaturesData = null;
+              eAllStructuralFeatureTypes = null;
             }
             if (isAllOperationsCollectionModified())
             {
diff --git a/tests/org.eclipse.emf.test.core/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.test.core/META-INF/MANIFEST.MF
index 40fa5dc..0179b4a 100644
--- a/tests/org.eclipse.emf.test.core/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.emf.test.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.emf.test.core;singleton:=true
-Bundle-Version: 2.18.0.qualifier
+Bundle-Version: 2.19.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -28,7 +28,7 @@
  org.eclipse.emf.test.core.xrefsopposite.util
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.6.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.18.0,3.0.0)";visibility:=reexport,
+ org.eclipse.emf.ecore;bundle-version="[2.19.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.change;bundle-version="[2.14.0,3.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.16.0,3.0.0)";visibility:=reexport,
  org.eclipse.xsd;bundle-version="[2.16.0,3.0.0)",
diff --git a/tests/org.eclipse.emf.test.core/pom.xml b/tests/org.eclipse.emf.test.core/pom.xml
index f898ee0..411e6c9 100644
--- a/tests/org.eclipse.emf.test.core/pom.xml
+++ b/tests/org.eclipse.emf.test.core/pom.xml
@@ -12,7 +12,7 @@
 
   <groupId>org.eclipse.emf</groupId>
   <artifactId>org.eclipse.emf.test.core</artifactId>
-  <version>2.18.0-SNAPSHOT</version>
+  <version>2.19.0-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
 </project>
diff --git a/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/AllSuites.java b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/AllSuites.java
index c16bc14..9d6ad2f 100644
--- a/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/AllSuites.java
+++ b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/AllSuites.java
@@ -43,6 +43,7 @@
       org.eclipse.emf.test.core.ecore.ProxyURITest.class,
       org.eclipse.emf.test.core.ecore.ResourceAttachmentTest.class,
       org.eclipse.emf.test.core.ecore.FeatureMapTest.class,
+      org.eclipse.emf.test.core.ecore.EClassGenericTypeCacheTest.class,
       org.eclipse.emf.test.core.ecore.DiagnosticianTest.class,
       org.eclipse.emf.test.core.ecore.ValidationTest.class,
       org.eclipse.emf.test.core.ecore.KeyTest.class,
diff --git a/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EClassGenericTypeCacheTest.java b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EClassGenericTypeCacheTest.java
new file mode 100644
index 0000000..ff02661
--- /dev/null
+++ b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EClassGenericTypeCacheTest.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2019 Eclipse contributors and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ * 
+ * Contributed via https://bugs.eclipse.org/bugs/show_bug.cgi?id=550338
+ */
+package org.eclipse.emf.test.core.ecore;
+
+
+import static java.util.Arrays.*;
+import static org.junit.Assert.*;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EClassImpl;
+import org.junit.Test;
+
+
+/**
+ * Test for super type adapter in {@link EClassImpl}.
+ */
+public class EClassGenericTypeCacheTest
+{
+  @Test
+  public void testEClassImplSuperTypeAdapter()
+  {
+    EClass eClass = EcoreFactory.eINSTANCE.createEClass();
+
+    // add attribute1
+    EAttribute attribute1 = EcoreFactory.eINSTANCE.createEAttribute();
+    attribute1.setName("attribute1");
+    attribute1.setEType(EcorePackage.Literals.ESTRING);
+    assertNotNull(attribute1.getEGenericType());
+    assertEquals(EcorePackage.Literals.ESTRING, attribute1.getEGenericType().getEClassifier());
+
+    eClass.getEStructuralFeatures().add(attribute1);
+
+    assertEquals(asList(attribute1), eClass.getEAllStructuralFeatures());
+
+    assertNotNull(eClass.getFeatureType(attribute1));
+    assertEquals(EcorePackage.Literals.ESTRING, eClass.getFeatureType(attribute1).getEClassifier());
+
+    // add attribute2
+    EAttribute attribute2 = EcoreFactory.eINSTANCE.createEAttribute();
+    attribute2.setName("attribute2");
+    attribute2.setEType(EcorePackage.Literals.EINT);
+    assertNotNull(attribute2.getEGenericType());
+    assertEquals(EcorePackage.Literals.EINT, attribute2.getEGenericType().getEClassifier());
+
+    eClass.getEStructuralFeatures().add(attribute2);
+
+    assertEquals(asList(attribute1, attribute2), eClass.getEAllStructuralFeatures());
+
+    assertNotNull(eClass.getFeatureType(attribute1));
+    assertEquals(EcorePackage.Literals.ESTRING, eClass.getFeatureType(attribute1).getEClassifier());
+    assertNotNull(eClass.getFeatureType(attribute2));
+    assertEquals(EcorePackage.Literals.EINT, eClass.getFeatureType(attribute2).getEClassifier());
+
+    // add attribute3
+    EAttribute attribute3 = EcoreFactory.eINSTANCE.createEAttribute();
+    attribute3.setName("attribute2");
+    attribute3.setEType(EcorePackage.Literals.ELONG);
+    assertNotNull(attribute3.getEGenericType());
+    assertEquals(EcorePackage.Literals.ELONG, attribute3.getEGenericType().getEClassifier());
+
+    eClass.getEStructuralFeatures().add(attribute3);
+
+    assertEquals(asList(attribute1, attribute2, attribute3), eClass.getEAllStructuralFeatures());
+
+    assertNotNull(eClass.getFeatureType(attribute1));
+    assertEquals(EcorePackage.Literals.ESTRING, eClass.getFeatureType(attribute1).getEClassifier());
+    assertNotNull(eClass.getFeatureType(attribute2));
+    assertEquals(EcorePackage.Literals.EINT, eClass.getFeatureType(attribute2).getEClassifier());
+    assertNotNull(eClass.getFeatureType(attribute3));
+    assertEquals(EcorePackage.Literals.ELONG, eClass.getFeatureType(attribute3).getEClassifier());
+
+    // remove attribute2
+    eClass.getEStructuralFeatures().remove(attribute2);
+
+    assertEquals(asList(attribute1, attribute3), eClass.getEAllStructuralFeatures());
+
+    assertNotNull(eClass.getFeatureType(attribute1));
+    assertEquals(EcorePackage.Literals.ESTRING, eClass.getFeatureType(attribute1).getEClassifier());
+    assertNotNull(eClass.getFeatureType(attribute3));
+    assertEquals(EcorePackage.Literals.ELONG, eClass.getFeatureType(attribute3).getEClassifier());
+
+    // add attribute2 and remove attribute1
+    eClass.getEStructuralFeatures().add(attribute2);
+    eClass.getEStructuralFeatures().remove(attribute1);
+
+    assertEquals(asList(attribute3, attribute2), eClass.getEAllStructuralFeatures());
+
+    assertNotNull(eClass.getFeatureType(attribute3));
+    assertEquals(EcorePackage.Literals.ELONG, eClass.getFeatureType(attribute3).getEClassifier());
+    assertNotNull(eClass.getFeatureType(attribute2));
+    assertEquals(EcorePackage.Literals.EINT, eClass.getFeatureType(attribute2).getEClassifier());
+  }
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EcoreTest.java b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EcoreTest.java
index f283672..cc9bead 100644
--- a/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EcoreTest.java
+++ b/tests/org.eclipse.emf.test.core/src/org/eclipse/emf/test/core/ecore/EcoreTest.java
@@ -249,7 +249,6 @@
     for (EObject eObject : ePackage.eContents())
     {
       URI eProxyURI = EcoreUtil.getURI(eObject);
-      System.err.println("###" + eProxyURI);
       EObject otherEObject = resourceSet.getEObject(eProxyURI, false);
       assertSame("The proxy URI " + eProxyURI + " fails to resolve to the correct object", eObject, otherEObject);
     }