2017-01-03 2 views
1

Wie kann ich programmgesteuert ein EGeneric Type Argument zu einem EAttribute hinzufügen? Ich kann ein EAttribute wie folgt erstellen:Wie programmiere ich programmgesteuert ein EGeneric Type-Argument zu einem EAttribute?

EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute(); 
eAttribute.setName("myAttribute"); 
EDataType dataType = EcorePackage.eINSTANCE.getEEList(); 
// add here String to List as generic argument? 
eAttribute.setEType(dataType); 

Aber mit dieser Code-Snippet des generische Typargument der EEList ist nicht angegeben. In Eclipse würde ich das mit New Child > EGeneric Type Argument beheben und dann das EClassifier des EGeneric Type Argument auf EString setzen. Aber wie kann ich das programmatisch machen?

Am Ende, das Attribut sollte wie folgt aussehen: EAttribute Tree View

Antwort

2

Es dauerte einige Zeit, aber ich habe eine Lösung:

EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute(); 
eAttribute.setName("myAttribute"); 
eAttribute.setEType(EcorePackage.eINSTANCE.getEEList()); 
// This is the interesting part: 
EGenericType eGenericTypeArgument = ecoreFactory.createEGenericType(); // line 1 
eGenericTypeArgument.setEClassifier(EcorePackage.eINSTANCE.getEString()); // line 2 
eAttribute.getEGenericType().getETypeArguments().add(eTypeArgument); // line 3 
  1. In Linie 1 ein neues EGenericType ist erstellt von der EcoreFactory. Das ist unser EGenerisches Typenargument.
  2. Jetzt, in Zeile 2, setzen wir den Datentyp des EGeneric Type Argument auf EString.
  3. Im letzten Schritt, in Linie 3, fügen wir das EGeneric Typen Argument an die EGenericType der EAttribute (NICHT die EType ich früher gesetzt).

Im Nachhinein ist es sinnvoll, dass wir die EDataType nicht ändern, wir lieber die EAttribute modifizieren.

Verwandte Themen