- edited description
Missed incremental update of collections on adding to list child
I tried making a small collection attribute collecting C nodes belonging to B nodes (direct children). When starting with empty B nodes and adding new C nodes only one of the collection attributes is incrementally flushed for some reason.
The relevant parts of the test:
aspect Test {
inh B C.b();
eq B.getC().b() = this;
coll HashSet<C> B.cs() root A;
C contributes this
to B.cs()
for b();
}
public static void main(String[] args) {
int N = 10;
A a = new A();
for (int i = 0; i < N; ++i) {
a.addB(new B("b"+i, new List<C>()));
}
checkCollections(a, "before");
// Transform:
a.getB(0).addC(new C("c1"));
a.getB(3).addC(new C("c2"));
a.getB(3).addC(new C("c3"));
a.getB(5).addC(new C("c4"));
checkCollections(a, "after");
}
static void checkCollections(A a, String phase) {
for (int i = 0; i < a.getNumB(); ++i) {
testEqual(phase + "@" + a.getB(i).getNAME(), a.getB(i).getNumC(), a.getB(i).cs().size());
}
}
Test output:
Test failed. after@b3 Expected: <2>, was: <0>
Test failed. after@b5 Expected: <1>, was: <0>
Comments (4)
-
reporter -
reporter Test for this issue:
incremental/param/coll_05
-
reporter - changed status to resolved
Fix errors in incremental collection attributes
Improve dependency tracking and flushing for incremental collection attributes by treating the survey phase as an attribute with its own dependency graph node. This makes all collection attribute instances depend on the survey phase and any change which flushes the survey results leads to flushing all collection attribute instances as well.
fixes
#302(bitbucket) fixes#303(bitbucket)→ <<cset 7938671b06a8>>
-
reporter - changed component to incremental
- Log in to comment