This trait for true "compilation" when there is a mechanism for accumulating multiple errors and/or warnings, and we are trying (someplace) to keep going after an error.
ThrowsSDE has *only* termination semantics.
ThrowsSDE has *only* termination semantics. I.e., SDE just throws. This makes it independent of context, i.e., we don't have to pass or otherwise arrange for things that throw SDE to use the right compile-time or runtime context to do their SDE throwing. Rather, we use the appropriate compile-time or runtime mechanism for dealing with these thrown SDEs at the place where they are caught. I.e., the context is on the catch-side only.
This turns out to be important for avoiding big modularity problems where everything would end up parameterized by what kind of context is to be used in case there is some sort of error. That makes it very hard to share code across compile time (when errors are accumulated into lists) vs runtime (when SDEs are usually fatal)
Both true "compilation" i.e., SchemaComponent will mix this in, as well as runtime data structures.
This trait for true "compilation" when there is a mechanism for accumulating multiple errors and/or warnings, and we are trying (someplace) to keep going after an error.
Also for runtime warnings.