Throw exception for minimal AJC runtime version violation
When running AJC, throw an AbortException(MINIMAL_JRE_VERSION) instead
of just logging an error, if the minimal JRE version requirement is
violated. Otherwise, in-process compilation would not fail due to the
skipped System.exit(-1) that was used before. In-process compilation is,
for example, relevant for AspectJ Maven Plugin, but also for non-forked
executions of Plexus AspectJ via Maven Compiler.
I am not 100% sure that AbortException is the appropriate exception
type, because it was designed for an aborted compilation process and
here compilation has not even started yet, but it seems to work fine.
Relates to #269.
Fixes #292.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Use new constant Main.MINIMAL_JRE_VERSION (currently = 17) and
SourceVersion.latest().ordinal() to check, if the minimal JRE version
requirement for AJC is met. If not, then exit with code -1 and error
message "The AspectJ compiler needs at least Java runtime 17".
Relates to #269.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
After Ajc usage text output is filtered into its own category
IMessage.USAGE now - see commit @31b2d60b - some tests in module
'org.aspectj.ajdt.core' were failing. I fixed and also improved them a
bit.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Improve usage text, error and warning output in batch compiler
- Usage texts are now printed to stdOut, no longer stdErr.
- 'java ...Main -?' no longer prints usage text twice (once to stdOut
and then again to stdErr).
- AjdtCommand.inferKind: Usage texts are no longer mis-identified as
warnings or errors just because they contain substrings "warning" or
"error". Matching is now more precise, looking for "[warning]" and
"[error]". But in that case the method would not be called anyway
because errors and warnings are identified in other ways already. As a
fall-back, the categories IMessage.ERROR and IMessage.WARNING still
exist in the method.
- In case of compile errors, no usage message is printed anymore,
because previously the user had to scroll up a lot in order to see the
actual messages. This is also in line with ECJ. The same is true for
warnings, but it was like this in Ajc already.
- AjdtCommand.inferKind: There is a new category IMessage.USAGE
especially for AspectJ usage texts, which will be identified by string
matching and then correctly handled (i.e. printed to stdOut, not
stdErr).
- Usage text printing is no longer done in AspectJ but in the AspectJ
"shadows" fork of JDT. This helps to get rid of some now obsolete code
here.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
'String.indexOf()' expression is replaceable with 'contains()'
Reports any String.indexOf() expressions which can be replaced with a call to the String.contains() method available in Java 5 and newer.
Signed-off-by: Lars Grefer <eclipse@larsgrefer.de>
Reports for loops which iterate over collections or arrays, and can be replaced with an enhanced for loop (i.e. the foreach iteration syntax).
Signed-off-by: Lars Grefer <eclipse@larsgrefer.de>