2016-08-28 2 views
0

ich eine Grammatik, die Xtext: Erstellen Sie eine eindeutige ID für Objekte

A: 
... 
B: 
... 

gebe ich möchte in der Lage sein wie

sieht jedes Element vom Typ B eine Seriennummer. Jedes Mal, wenn die Grammatik ein B-Objekt erstellt, erhält sie eine (eindeutige) neue ID als Feld.

Ich habe versucht, wie etwas zu tun:

B: 
myID=Tracer.getID() 
... 

wo:

class Tracer { 
static int ID=0; 
static int getID() { return ID++;} 

Aber ich externe Java-Klasse nicht aus der Grammatik aufrufen können.

Es wäre besser, wenn es lösbar ist, ohne die src-gen-Dateien zu berühren.

Danke.

+0

Haben Sie darüber nachgedacht, für ein externes Metamodell zu wechseln? Der Erweiterungspunkt 'IXtext2EcorePostProcessor' wird in 2.9+ nicht mehr so ​​gut unterstützt. (https://bugs.eclipse.org/bugs/show_bug.cgi?id=483209) –

+0

Ich versuche es zu tun, wie in Ihrem Blog https://christiandietrich.wordpress.com/2011/07/22/customizing -xtext-metamodel-inference-using-xtend2/aber ich finde org.eclipse.xtext.generator.Generator nicht. Ist es org.eclipse.emf.codegen.ecore.Generator oder org.eclipse.emf.codegen.ecore.generator.Generator? Oder vielleicht die Schnittstelle org.eclipse.xtext.generator.IGenerator? –

+0

in xtext 2.9+ es ist wie im Fehler beschrieben –

Antwort

0

Wissen Sie, dass es in Textmodellen keine Objektidentität gibt? I.e. Sie grundsätzlich kann nicht sagen, dass zwei Objekte in verschiedenen ASTs identisch sind. Sie können nur eine Interpretation der Äquivalenz mit Diff-Algorithmen erstellen.

Abgesehen davon, wenn Sie nur eine temporäre Identität benötigen, was ist mit der Verwendung von Object.hashCode()?

Verwandte Themen