Igniters, Ignite is known to be complex product. Partially this complexity comes from ... complex problems we are trying to resolve. But partially it comes from how we write our code. I noticed several anti-patterns which makes our code hard to manage:
1) Inner classes (both static and non-static) 2) Usage of generic tuples 3) Usage of many classes from our "lang"package - closures, predicates, etc.. When combined these anti-patterns makes our classes huge, leaky in terms of abstractions, hard to follow and refactor. I would like to propose to restrict usages of these constructs as much as possible in non-test code. Classes should be top-level by default, unless "inner" semantics are absolutely necessary or saves a lot of code. Tuples and closures should be replaced with concrete classes, specific to your case. Thoughts? Vladimir.