A per-type instantiation mechanism for generic aspects

We propose a per-type instantiation mechanism for generic aspects. Though AspectJ supports generic aspects, which declare type parameters, we cannot declare aspects that are parametrized over both field types and return types of applied join points without manually concretizing the type parameters. Our mechanism creates an instance of a generic aspect for each type of the applied join points.