Enable some tests after J19 problems were fixed for J21
Two test classes which had redundant default clauses for switch with
record patterns were copied from the java19 to the java21 directory and
the redundant clauses deactivated, i.e. the test now run as originally
intended. For older JDK versions, the old tests still stay active in
order to document the old state of affairs.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This mostly affects pattern matching for switch and record patterns.
Two tests which were working before for pattern matching for switch
(preview 4), started to fail, so the corresponding code was commented
out and https://github.com/eclipse-jdt/eclipse.jdt.core/issues/1466
recorded.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
AjcTestCase: Make sure main methods can be called in Java 21
Since JDK 21, a public main method of a non-public (e.g. default-scoped)
class can no longer be invoked without making it accessible first.
Because many test sources contain multiple aspects and classes in one
file, this is a frequent use case.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
The tests and their XML definitions are still copy & paste and need to
be cleaned up. Separate Java 21 feature tests do not exist yet.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
AntSpec: Improve filter for warning "Archived non-system classes are disabled"
In JDK 21, the prefix has changed once again, no longer being a JVM
specifier like "OpenJDK 64-Bit Server VM" or "Java HotSpot(TM) 64-Bit
Server VM" but rather something like "[0.016s][warning][cds]".
Even worse, before J21, the warning appears on stdErr, but in J21+, it
appears on stdOut.
Fixes LTWTests.testJ14LTWWithXML, which started failing on Java 21.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
While trying to understand the code a bit better in order to fix failing
builds, I applied some cosmetic refactoring and reformatting. This
commit does not change any functionality.
Whether the static import of CompilationAndWeavingContext.* is a good
thing or not is debatable, but I like the code to be less chatty than it
was before, assuming that every developer uses an IDE helping to find
out where static methods and constants come from.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Background: JDT Core dependencies now contain hundreds of Java 17 class
files, i.e. Ajc now requires Java 17+ runtime environment. :-(
For more details, see:
https://github.com/eclipse-aspectj/aspectj/issues/260#issuecomment-1736540176
Adoptium Java 21 release is not available yet, so we need to run on EA.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
messages_aspectj.properties:
compiler.version = ... d23a141971 (27Apr2023) - Java20
Too bad this version string did not make it into 1.9.20 and 1.9.20.1.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
ajc162.xml: Fix test failing after previous bugfix
A change made to ajc162.xml in commit 43cb1e2f has been reverted
and improved after the recent negated type pattern fix. Relates to #257.
The pointcut 'call(!void *.*(..)) && this(src) && target(dst)' actually
does match method call 'payloadClass.getPayload()' within the
around-advice in GenericClassInAdvice itself.
Improvement: Activate '-showWeaveInfo' and verify weaving message.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
NotTypePattern: Fix matching problem for negated type patterns
The implementation for boolean matchesArray(UnresolvedType type) was
buggy.
'!String' should match anything but String, no matter if it is
an array or not, e.g. int, void, int[], String[], String[][].
'!String[]' should match anything but String[], no matter if it is
an array or not, e.g. int, void, int[], String, String[][].
Fixes #257.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Instead of using a pre-generated JAR, the source code generating the
class with reordered methods (bridge method first) is now compiled
directly before usage. This is possible, because in the previous commit
ASM was put on the Ajc classpath for tests.
Relates to #256.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
This enables compiled source code to use ASM. This way, it is possible
to bootstrap tests needing specially prepared class files by
1. compiling an ASM-enabled byte code generator class,
2. running the generator, writing out class files,
3. using the generated class files in subsequent tests.
Until now, such classes always had to be checked into the ASM directly
or inside JARs. Now, this is no longer necessary.
The next commit will be the first example.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Fixes spring-projects/spring-framework#27761.
Fixes #256.
Bridge methods are now ignored in favour of their overriding namesakes
during method matching.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Relates to spring-projects/spring-framework#27761.
The test needs an ASM-generated class file with reordered methods in
order to reproduce the issue in plain AspectJ. The test fails now, but
should pass after the fix.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Move 1.9.20 bug regression tests to the correct spots
Originally, I had intended to release a minor 1.9.19.1 release to fix
some bugs. But then, Java 20 support was implemented and merged, so the
next release will be 1.9.20. Therefore, I moved some bug regression
tests to the 1.9.20 suite.
Relates to #254.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Improve error message in LazyClassGen.getJavaClassBytesIncludingReweavable
No longer report "Unable to find ASM classes", if simply an ASM
processing error occurred. In that case, report "Error processing
class file".
Relates to #250.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Fix inline accessor method bug in BcelAccessForInlineMunger
Make sure to create one ajc$inlineAccessMethod per identically named
(overloaded) private aspect method in
BcelAccessForInlineMunger.createOrGetInlineAccessorForMethod.
Fixes #250.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Add method ArrayReferenceType.equals to fix failing tests
This also fixes a bug. Previously, ResolvedType.equals was used for
equality check, and in there is a '==' comparison, which does not work
for two different ArrayReferenceType instances, even if the component
type is the same.
Relates to #246.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
- Fix quotation error in console output
- Throw RuntimeException instead of Error. Maybe this helps to avoid
the prominent error message listing in the GitHub build log, which
always looks like something bad happened, even though it is simply an
expected error.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>