[Intersult] [Coder] ist ein Werkzeug zur Analyse und zum Generieren von Code. Wichtige Bestandteile sind:

* __Reflector:__ Stellt ein erweitertes Reflection für Java-Klassen zur Verfügung mit der Unterstüzung von Argumentnamen (bei Methoden), Generics, Annotations und Kommentaren.
* __Generator:__ Generiert Code aus erstellten JavaClass-Dateien und schreibt diesen in Dateien.

!!!Reflector
Der com.intersult.code.Reflector kann genutzt werden, um Informationen über Java-Klassen zu gewinnen.

Da der Reflector die reflektierten Klassen in internen Listen ansammelt, kann es nützlich sein den Reflector nach Gebrauch dem Garbage-Collector zu übergeben. Für diesen Fall kann ein Reflector durch new Reflector() einfach erzeugt werden. Für alle anderen Fälle kann die Default-Instanz Reflector.INSTANCE verwendet werden.

{{{
    JavaClass stringClass = Reflector.INSTANCE.reflect(String.class);
    System.out.println(stringClass.getTypeNameSimple(true));
}}}

__Erklärung:__ Der Reflector erzeugt aus der String.class-Klasse eine JavaClass, die erweiterte Methoden enthält, wie zum Beispiel getTypeName und getTypeNameSimple.

!!!Generator
Viele Fälle der Code-Generierung, z.B. aus XML-Schema (XSD) oder WSDL können mit Plugins abgedeckt werden, wie dem [Abraxas Maven Plugin|Abraxas].

Für die Implementierung eigener [Maven-Plugins] oder anderer Art von Code-Generierung kann die Klasse com.intersult.code.Generator direkt verwendet werden. Die Verwendung ist dabei sehr einfach:

{{{
    JavaClass javaClass = new JavaClass("com.intersult.test", "Test");
    javaClass.generatePath();
    Generator.generateClass(Reflector.INSTANCE, javaClass);
}}}

__Erklärung:__ Es wird eine neue Klasse com.intersult.test.Test erzeugt. Die Methode generatePath erzeugt den Package-Pfad, der nicht in jedem Fall erwünscht sein kann. Der Generator schreibt dann mit generateClass die Klasse in Dateien. Der Java-Standard ist dabei so definiert, dass Unterklassen (Sub-Classes) in getrennte Dateien geschrieben werden mit dem Namensmuster <Hauptklasse>$<Unterklasse>.

Optional kann eine Liste übergeben werden, in der die generierten Dateien eingetragen werden:

{{{
    List<File> files = new ArrayList<File>();
    Generator.generateClass(Reflector.INSTANCE, javaClass, list);
}}}