We use a process called "class merging" to produce the terracotta enabled
variants of things like HashMap, Hashtable, ConcurrentHashMap, etc. The
basic idea is that we write a class called something like HashMapTC where
we provide alternate implementations of methods, introduce new fields,
etc. The merger thingy than takes HashMapTC and lays it overtop the
original implementation of HashMap. I'm leaving out a bunch of details,
but that is the general idea.
One thing the merge process does not touch is constructors however, which
has lead to at least one bug. Consider this code:
class HashMapTC {
private boolean flag = true;
}
Statements like that field set are duplicated into all constructors by the
regular java compiler. Since our merge process does not use constructors
from the "TC" class, the merged class just ends up getting the field, but
not the assignment to true (instant bug!)
I'm trying to figure out what the class merge should be doing here. I
guess it stands to reason that we need to behave just like the java
compiler does -- copy that statement into all constructors. That is
probably easier said than done since the compiler conceals the structure
of the source when it duplicates things.
I'm mostly looking for thoughts about how the class merger can work better
so that this type of bug can't happen again.
thanks
_______________________________________________
tc-dev mailing list
[email protected]
http://lists.terracotta.org/mailman/listinfo/tc-dev