2016-08-28 4 views
0

У меня есть грамматика, которая выглядит какXText: Создать уникальный идентификатор для объектов

A: 
... 
B: 
... 

Я хочу, чтобы иметь возможность дать каждому элементу типа В какой-то серийный идентификатор. Поэтому каждый раз, когда грамматика создает объект B, он получает (уникальный) новый идентификатор в качестве поля.

Я пытался сделать что-то вроде:

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

где:

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

Но я не могу назвать внешний класс Java из грамматики.

Было бы лучше, если бы оно разрешилось, не касаясь файлов src-gen.

Спасибо.

+0

Вы считали, что переключились на сверхъестественную метамодель? точка расширения 'IXtext2EcorePostProcessor' больше не поддерживается в версии 2.9+. (https://bugs.eclipse.org/bugs/show_bug.cgi?id=483209) –

+0

Я пытаюсь сделать это как в вашем блоге https://christiandietrich.wordpress.com/2011/07/22/customizing -xtext-metamodel-inference-using-xtend2 /, но я не могу найти org.eclipse.xtext.generator.Generator. Это org.eclipse.emf.codegen.ecore.Generator или org.eclipse.emf.codegen.ecore.generator.Generator? Или, может быть, интерфейс org.eclipse.xtext.generator.Generator? –

+0

в xtext 2.9+ это как описано в ошибке –

ответ

0

Знаете ли вы, что в текстовых моделях нет такой вещи, как идентификатор объекта? То есть вы принципиально не можете сказать, что любые два объекта в разных АСТ идентичны. Вы можете только установить интерпретацию эквивалентности с помощью алгоритмов diff.

Это в стороне, если вам нужна только временная идентификация, как насчет использования Object.hashCode()?