This is the first part of the introduction of annotation processing to cloud. A new `@CommandContainer` annotation has been introduced, which can be placed on classes to have the annotation parser automatically construct & parse the classes when `AnnotationParser.parseContainers()` is invoked.
A future PR will introduce another processor that will scan for `@CommandMethod` annotations and verify the integrity of the annotated methods (visibility, argument annotations, etc.).
This PR also adds a `handler()` getter to the command builder class. This will allow for things along the line of https://github.com/Incendo/cloud/issues/189 to be achieved.
The following PR fixes interop issues between Kotlin and Java.
Currently, there is no way to go from `Command.Builder` -> `MutableCommandBuilder`, nor from `MutableCommandBuilder` -> `Command.Builder`.
This PR fixes it by introducing
- A new constructor for `MutableCommandBuilder`:
```kotlin
public constructor(commandBuilder: Command.Builder<C>, commandManager: CommandManager<C>)
```
- Making the `commandBuilder` variable public
- Adding the following extensions
```kotlin
public fun <C : Any> Command.Builder<C>.toMutable(commandManager: CommandManager<C>): MutableCommandBuilder<C>
public fun <C : Any> Command.Builder<C>.mutate(commandManager: CommandManager<C>, lambda: MutableCommandBuilder<C>.() -> Unit): MutableCommandBuilder<C>
```
adds a system for processing strings found in annotations before they're used by AnnotationParser
implements #347
Also, because we're using "-Werror", the code won't actually build (and thus tests won't work) using JDK18. To remedy this, a bunch of @SuppressWarnings("serial")s has been added to the exceptions. We don't serialize exceptions, and they're in fact non-serializable because of their members, so this is the appropriate solution (well, the better solution would be to make them serializable, but that's outside the scope of this PR).
* build: switch to spotless
add in some other basic formatting steps that allow for easy
auto-correction
* build: lint text files as well
* chore: remove license headers from package-info files
spotless can't verify these