下面的跟进
假设我有这个简单的模型(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 上获得一个属性更改,但是对于A__BS
. 我认为这是因为 EMF 如何处理平等,而 A 和 B 在技术上是不同的。
我如何实现我得到“正确”的差异?
跟进 1
我在一个新的工作区中重新创建了这个示例,但是我向 A 和 B 类型添加了一个 UUID(就像我的“真实”模型一样),这可以按预期工作。现在要找出为什么我的“真实”模型不...