Последующие действия ниже
Допустим, у меня есть эта простая модель (синтаксис Xcore):
class A {
contains B[] bs opposite a
}
class B {
String foo
container A a opposite bs
}
Теперь у меня есть три A, созданные следующим образом:
A a1 = ModelFactory.eINSTANCE.createA();
B b1 = ModelFactory.eINSTANCE.createB();
b1.setFoo("foo");
b1.setA(a1);
A a2 = ModelFactory.eINSTANCE.createA();
B b2 = ModelFactory.eINSTANCE.createB();
b2.setFoo("bar");
b2.setA(a2);
A a3 = ModelFactory.eINSTANCE.createA();
B b3 = ModelFactory.eINSTANCE.createB();
b3.setFoo("bar");
b3.setA(a3);
Когда я пытаюсь сравнить их так:
DefaultComparisonScope scope = new DefaultComparisonScope(a1, a2, a3);
Comparison comp = EMFCompare.builder().build().compare(scope);
EList<Diff> diffs = comp.getDifferences();
Я ожидаю получить одно изменение атрибута в B__FOO
EAttribute, но я получаю два псевдоконфликта для вида ADD для A__BS
. Я думаю, это из-за того, как EMF обрабатывает равенство, а A и B технически разные.
Как мне добиться того, чтобы я получил «правильные» различия?
Продолжение 1
Я воссоздал этот пример в новой рабочей области, но добавил UUID к типам A и B (как и в моей «настоящей» модели), и это работает, как и ожидалось. Теперь о том, почему моя "настоящая" модель не...