]> source.dussan.org Git - aspectj.git/log
aspectj.git
15 months agoBump JDT Core to 1.9.20
Alexander Kriegisch [Wed, 16 Aug 2023 04:14:49 +0000 (11:14 +0700)]
Bump JDT Core to 1.9.20

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
15 months agoAdd 1.9.20 release notes and update version compatibility matrix
Alexander Kriegisch [Wed, 16 Aug 2023 03:36:33 +0000 (10:36 +0700)]
Add 1.9.20 release notes and update version compatibility matrix

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
15 months agoMove 1.9.20 bug regression tests to the correct spots
Alexander Kriegisch [Tue, 15 Aug 2023 01:58:14 +0000 (08:58 +0700)]
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>
15 months agoFix tests using Javac via Ant using source/target < 1.8
Alexander Kriegisch [Sun, 6 Aug 2023 01:50:46 +0000 (08:50 +0700)]
Fix tests using Javac via Ant using source/target < 1.8

Since JDK 20, targets older than 1.8 are no longer supported by Javac.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
15 months agoImprove error message in LazyClassGen.getJavaClassBytesIncludingReweavable
Alexander Kriegisch [Sun, 6 Aug 2023 02:12:38 +0000 (09:12 +0700)]
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>
15 months agoFix inline accessor method bug in BcelAccessForInlineMunger
Alexander Kriegisch [Sat, 5 Aug 2023 05:15:37 +0000 (12:15 +0700)]
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>
15 months agoAdd regression test for #250
Alexander Kriegisch [Sat, 5 Aug 2023 04:34:59 +0000 (11:34 +0700)]
Add regression test for #250

Reproduces #250.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
15 months agoUse relocated ASM class names in BCException message
Alexander Kriegisch [Fri, 4 Aug 2023 02:31:31 +0000 (09:31 +0700)]
Use relocated ASM class names in BCException message

Fixes #251.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoAdd method ArrayReferenceType.equals to fix failing tests
Alexander Kriegisch [Mon, 26 Jun 2023 06:11:38 +0000 (08:11 +0200)]
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>
16 months agoBcelTypeMunger.getRealMemberForITDFromAspect code cosmetics
Alexander Kriegisch [Sun, 25 Jun 2023 10:22:34 +0000 (12:22 +0200)]
BcelTypeMunger.getRealMemberForITDFromAspect code cosmetics

Relates to #246.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoCorrectly identify ITD method signatures in weaver
Alexander Kriegisch [Sun, 25 Jun 2023 10:17:48 +0000 (12:17 +0200)]
Correctly identify ITD method signatures in weaver

by removing faulty condition 'if (isCtorRelated)' from
BcelTypeMunger.getRealMemberForITDFromAspect, see comment
https://github.com/eclipse-aspectj/aspectj/issues/246#issuecomment-1605999896.

Fixes #246.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoAdd failing test reproducing #246
Alexander Kriegisch [Sat, 24 Jun 2023 06:15:24 +0000 (08:15 +0200)]
Add failing test reproducing #246

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoAdjust expected error message in switch pattern tests after upstream typo fix
Alexander Kriegisch [Fri, 31 Mar 2023 07:26:45 +0000 (09:26 +0200)]
Adjust expected error message in switch pattern tests after upstream typo fix

See:
https://github.com/eclipse-jdt/eclipse.jdt.core/issues/919
https://github.com/eclipse-jdt/eclipse.jdt.core/commit/b681dfb5
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoImprove SystemPropertiesTest
Alexander Kriegisch [Thu, 30 Mar 2023 10:03:59 +0000 (12:03 +0200)]
Improve SystemPropertiesTest

- 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>
16 months agoSwitch CI build to coactions/setup-xvfb
Alexander Kriegisch [Thu, 30 Mar 2023 09:09:02 +0000 (11:09 +0200)]
Switch CI build to coactions/setup-xvfb

GabrielBB/xvfb-action is no longer maintained and points to
coactions/setup-xvfb. The switch should eliminate this warning in CI
builds:

Node.js 12 actions are deprecated. Please update the following actions
to use Node.js 16: GabrielBB/xvfb-action@v1.6. For more information see:
https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoAdd AllTestsAspectJ1920 to AllTests19 suite
Alexander Kriegisch [Thu, 30 Mar 2023 07:59:18 +0000 (09:59 +0200)]
Add AllTestsAspectJ1920 to AllTests19 suite

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoeclipse-jdt/eclipse.jdt.core#919 has been fixed
Alexander Kriegisch [Thu, 30 Mar 2023 07:13:05 +0000 (09:13 +0200)]
eclipse-jdt/eclipse.jdt.core#919 has been fixed

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoBuild on JDK 11, 17, 20 (remove 19)
Alexander Kriegisch [Thu, 30 Mar 2023 07:12:00 +0000 (09:12 +0200)]
Build on JDK 11, 17, 20 (remove 19)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoFix tests using Javac using source/target 1.7
Alexander Kriegisch [Wed, 29 Mar 2023 14:14:00 +0000 (16:14 +0200)]
Fix tests using Javac using source/target 1.7

Javac 20+ no longer supports 1.7.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoFix javadoc generation broken on JDK 20
Alexander Kriegisch [Wed, 29 Mar 2023 10:49:22 +0000 (12:49 +0200)]
Fix javadoc generation broken on JDK 20

Firstly, Javadoc 20 cannot handle source level 1.7 anymore, so I bumped
it to 11, which hopefully will be around for another while. It also
matches the ajc minimum of Java 11, i.e. ajdoc and ajc are synchronised
in this regard now.

Secondly, as of JDK 20, the javadoc tool renders HTML pages with section
headers specific to the JVM default locale. The workaround is to set the
locale to English before calling javadoc.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoImprove Java 9+ version matching in ClassPath.getClassPath
Alexander Kriegisch [Wed, 29 Mar 2023 06:38:57 +0000 (08:38 +0200)]
Improve Java 9+ version matching in ClassPath.getClassPath

On the short term, this fixes the failing weaver tests on JDK 20. On the
long term, the improved matching heuristics should make it unnecessary
to update the regex again.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoAdd basic tests for Java 20, deactivate Java 19 preview tests
Alexander Kriegisch [Tue, 28 Mar 2023 14:29:12 +0000 (16:29 +0200)]
Add basic tests for Java 20, deactivate Java 19 preview tests

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agomessages_aspectj.properties: update ECJ version string
Alexander Kriegisch [Mon, 27 Mar 2023 11:41:40 +0000 (13:41 +0200)]
messages_aspectj.properties: update ECJ version string

This update includes the upstream fix for
https://github.com/eclipse-jdt/eclipse.jdt.core/issues/911.

Eclipse Compiler b15e5c75653358 (24Mar2023) - Java20

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoTemporarily build both Java 19 and 20 on GitHub
Alexander Kriegisch [Mon, 27 Mar 2023 08:29:06 +0000 (10:29 +0200)]
Temporarily build both Java 19 and 20 on GitHub

Let's find out if the tests still pass
  - on Java 19, except for J19 preview features,
  - on Java 20, also except for J19 with changed syntax.

TODO: After having added Java 20 preview feature tests, remove J19
build.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoBump jdt.core.version to 1.9.20-SNAPSHOT
Alexander Kriegisch [Mon, 27 Mar 2023 08:27:14 +0000 (10:27 +0200)]
Bump jdt.core.version to 1.9.20-SNAPSHOT

Let's find out if the tests still pass
  - on Java 19, except for J19 preview features,
  - on Java 20, also except for J19 with changed syntax.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agomessages_aspectj.properties: update ECJ version string
Alexander Kriegisch [Mon, 27 Mar 2023 07:43:58 +0000 (09:43 +0200)]
messages_aspectj.properties: update ECJ version string

Eclipse Compiler 40fa81de93d65b (24Mar2023) - Java20

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
16 months agoUse ASM 9.5 for Java 20 support
Alexander Kriegisch [Mon, 27 Mar 2023 07:29:33 +0000 (09:29 +0200)]
Use ASM 9.5 for Java 20 support

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
17 months agoAdd null checks for Shadow.getResolvedSignature()
Alexander Kriegisch [Tue, 13 Jun 2023 07:21:52 +0000 (09:21 +0200)]
Add null checks for Shadow.getResolvedSignature()

Fixes #243.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
17 months agoFix XML config for Bugs1919Tests.test_GitHub_214
Alexander Kriegisch [Sun, 4 Jun 2023 10:52:54 +0000 (12:52 +0200)]
Fix XML config for Bugs1919Tests.test_GitHub_214

The test started breaking on GitHub, but ran fine locally, which implied
some kind of classpath ordering issue. As it turned out, for XML tests
all JARs found in the sandbox directory are added to the classpath
automatically. So if we do not want them on the classpath, we need to
delete or rename them before running.

In this case, however, it was enough to make sure the classpath order is
correct, so that the duplicate 'Application' class is found in the woven
version, not in the unwoven one by chance. We therefore need to use the
correct syntax,
  1. separating classpath entries by comma, not space,
  2. prepending '$sandbox/' to the JAR name.

Now the test reliably does what it should have done from the start: run
the woven code. Until now, the output assertions were adjusted to the
weird result of no aspect logs being present on the console, which was
wrong right from the start.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
17 months agoAdd null check to AjLookupEnvironment.hasAspectDeclarations
Alexander Kriegisch [Sun, 4 Jun 2023 07:37:47 +0000 (09:37 +0200)]
Add null check to AjLookupEnvironment.hasAspectDeclarations

Fixes #240.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
20 months agoIDE.md: change 2022-12 AJDT M2E connector link to upstream update site
Alexander Kriegisch [Sat, 11 Mar 2023 12:23:54 +0000 (13:23 +0100)]
IDE.md: change 2022-12 AJDT M2E connector link to upstream update site

20 months agoAdded MIll to the Build tools section
Tobias Roeser [Fri, 20 May 2022 07:31:25 +0000 (09:31 +0200)]
Added MIll to the Build tools section

I'm the author of mill-aspectj and Mill maintainer, so i might be biased. ;-)

We use Mill with the mill-aspectj plugin in commercial projects, so I'm rather confident in it's reliability.

20 months agoJavaVersionCompatibility.md: add Java 19
Alexander Kriegisch [Wed, 1 Mar 2023 16:21:52 +0000 (17:21 +0100)]
JavaVersionCompatibility.md: add Java 19

20 months agoIDE.md: add link to m2e AJDT connector for Eclipse 2022-12
Alexander Kriegisch [Wed, 1 Mar 2023 07:33:36 +0000 (08:33 +0100)]
IDE.md: add link to m2e AJDT connector for Eclipse 2022-12

The link points to aspectj.dev for now, because Mika Vesti has not
merged my PR and published a new version on repo.t5.fi yet.

20 months agoIDE.md: Add new AJDT update site for 2022-12 (4.26)
Alexander Kriegisch [Tue, 28 Feb 2023 11:01:04 +0000 (12:01 +0100)]
IDE.md: Add new AJDT update site for 2022-12 (4.26)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
20 months agoDepend on JDT Core 1.9.20.M1
Alexander Kriegisch [Tue, 28 Feb 2023 07:10:46 +0000 (08:10 +0100)]
Depend on JDT Core 1.9.20.M1

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
20 months agoHandleProviderDelimiter: rename JEM_MODULAR_CLASSFILE to MODULAR_CLASSFILE
Alexander Kriegisch [Tue, 28 Feb 2023 07:09:48 +0000 (08:09 +0100)]
HandleProviderDelimiter: rename JEM_MODULAR_CLASSFILE to MODULAR_CLASSFILE

The other constants do not have the JEM_ prefix from JavaElement either.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
20 months agoSync HandleProviderDelimiter with JDT Core & AJDT
Alexander Kriegisch [Sat, 25 Feb 2023 22:11:05 +0000 (23:11 +0100)]
Sync HandleProviderDelimiter with JDT Core & AJDT

New constants:
  JEM_MODULAR_CLASSFILE - '\'' (single quote)
  ANNOTATION - '}'
  LAMBDA_EXPRESSION - ')'
  LAMBDA_METHOD - '&'
  STRING - '"'
  MODULE - '`'
  DELIMITER_ESCAPE - '='

Updated AspectJ constants due to JDT Core using constants previously
used by AspectJ:

  ADVICE - '&' to '§'
  ASPECT_TYPE - '\'' to '>'
  ITD_METHOD - ')' to '°'
  DECLARE - '`' to '´'
  POINTCUT - '"' to '©'

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoAdd safeguards for And/Or/Not pattern node types
Alexander Kriegisch [Sun, 29 Jan 2023 16:14:05 +0000 (17:14 +0100)]
Add safeguards for And/Or/Not pattern node types

Affects *PointCut, *TypePattern, *AnnotationTypePattern.

Relates to #215.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoAdd traverse methods for declare and pattern types
Alexander Kriegisch [Sun, 29 Jan 2023 16:05:59 +0000 (17:05 +0100)]
Add traverse methods for declare and pattern types

Relates to #215.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoAdd traverse methods for pointcut types
Alexander Kriegisch [Sun, 29 Jan 2023 12:18:10 +0000 (13:18 +0100)]
Add traverse methods for pointcut types

Relates to #215.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoFurther improve indentation of compilation results on the console gh-217
Alexander Kriegisch [Tue, 24 Jan 2023 16:17:41 +0000 (17:17 +0100)]
Further improve indentation of compilation results on the console

In CompilationResult.toString, no longer indent like this:

  [warning 1] warning at
              after() : execution(FooBar Blah.*()) {
                                  ^^^^^^
              xxx FooBar [Xlint:invalidAbsoluteTypeName]

Instead, always just indent by 2 spaces, saving screen real estate:

  [warning 1] warning at
    after() : execution(FooBar Blah.*()) {
                        ^^^^^^
    xxx FooBar [Xlint:invalidAbsoluteTypeName]

Also further streamline/simplify the code a bit.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoFix indentation of compilation results on the console
Alexander Kriegisch [Sun, 22 Jan 2023 20:52:24 +0000 (21:52 +0100)]
Fix indentation of compilation results on the console

Whenever warnings or errors were printed via CompilationResult.toString,
indirectly also using MessageUtil.renderMessage(IMessage, boolean),
messages containing context info such as code snippets with carets
marking erroneous tokens - see also the previous commit - prefixes like
"[warning 1] warning at " were printed right in front of the code
snippets. I.e., the carets marking erroneous tokens in the second line
were not indented like the first line with the code snippet, leading to
(simplified) output like:

  [warning 1] warning at after() : execution(FooBar Blah.*()) {
                      ^^^^^^
  xxx FooBar [Xlint:invalidAbsoluteTypeName]

This was fixed to now correctly indent lines 2 to n according to line 1,
yielding the correct output:

  [warning 1] warning at
              after() : execution(FooBar Blah.*()) {
                                  ^^^^^^
              xxx FooBar [Xlint:invalidAbsoluteTypeName]

Especially with longer, more complex context lines, this helps to
identify the erroneous section. BTW, for one-line messages, everything
of course looks like before.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
21 months agoBugfix: caret error marks in compiler output too short
Alexander Kriegisch [Sun, 22 Jan 2023 11:22:37 +0000 (12:22 +0100)]
Bugfix: caret error marks in compiler output too short

This very old bug in EclipseAdapterUtils calculated the '^' caret error
marks incorrectly. The marks were too short like this:

  void m() { return vax[3]; }
             ^^^^^^^^^^^

Where the correct result would look like this:

  void m() { return vax[3]; }
             ^^^^^^^^^^^^^^

This was due to the rather complicated way in which first surrounding
context code - here the leading 'void m() { ' and trailing  ' }' - was
first added and then possible leading white space was cut off again from
the left. It is difficult to explain, the code is a nightmare, trying to
work with char arrays, counting indexes, repeatedly using
System.arraycopy and using lots of counters and offsets. I would have
liked to simplify the code, converting char[] buffers to Strings, but
decided to keep the basic structure for now, not sure what kind of
memory or performance considerations led to this design.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix GitHub #214
Alexander Kriegisch [Sat, 21 Jan 2023 10:26:05 +0000 (11:26 +0100)]
Fix GitHub #214

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoAdd regression test reproducing GitHub #214
Alexander Kriegisch [Sat, 21 Jan 2023 10:25:49 +0000 (11:25 +0100)]
Add regression test reproducing GitHub #214

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoComment on newly pointcut parsing found problem in test class
Alexander Kriegisch [Sun, 15 Jan 2023 13:18:32 +0000 (14:18 +0100)]
Comment on newly pointcut parsing found problem in test class

A pointcut like

  execution(*..Collection<?>[] *(..))

leads to an AJ core dump, which is something I noticed while fixing a
test in the previous commit. I am going to create a new issue for it and
link to this commit later.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix failing tests after previous commit
Alexander Kriegisch [Sun, 15 Jan 2023 13:16:04 +0000 (14:16 +0100)]
Fix failing tests after previous commit

After the changes, the weaver's behaviour is now slightly different, but
not actually buggy. Actually, in one case there is now a weaver warning
for a non-matching pointcut which should have been there before, but was
not. I.e., things have improved and the tests are even a bit better now.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoRemove old, erroneously committed binaries from tests/bugs193/543657
Alexander Kriegisch [Sun, 15 Jan 2023 12:22:49 +0000 (13:22 +0100)]
Remove old, erroneously committed binaries from tests/bugs193/543657

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix PointcutRewriterTest, add LogicalPointcutStructure test helper class
Alexander Kriegisch [Sun, 15 Jan 2023 00:25:11 +0000 (01:25 +0100)]
Fix PointcutRewriterTest, add LogicalPointcutStructure test helper class

After WildTypePattern.hashCode was fixed in the previous commit,
PointcutRewriterTest started failing, because in many places it was
falsely relying on a specific order of hash codes, which cannot be
guaranteed, especially since more instance fields are part of the hash
code now in accordance with 'equals'.

The new test helper class LogicalPointcutStructure is able to recognise
chained '&&' and '||' pointcuts of the same logical nesting level,
un-nesting them from the actual pointcut structure and making them
comparable, disregarding their order. I.e., something like
  ((A && B) && C) && D
is actually recognised to logically be
  A && B && C && D
and equivalent to e.g. either of
  D && B && A && C
  A && B && D && C
  C && A && D && B

This helps to compare rewritten pointcuts, as long as their logical
structure has not been altered.

Relates to #24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoWildTypePattern: fix hashCode and toString methods
Alexander Kriegisch [Sun, 15 Jan 2023 00:16:24 +0000 (01:16 +0100)]
WildTypePattern: fix hashCode and toString methods

Especially 'hashCode' did not correspond to 'equals', disregarding
several fields, array dimension information being only one of them. This
led to parts of pointcuts being ignored, because they were regarded as
duplicates. Example:

execution(Foo* *(..)) && !execution(Foo*[] *(..))

Here, the negated pattern was falsely regarded as equal to the first
pattern, leading to an "A && !A" situation, i.e. no match at all.

Furthermore, 'toString' did not print array strings, i.e. instead of
"Foo*[][]" something like "Foo*" was printed. This false information was
also present in annotations generated by the weaver.

FuzzilyMatchingAspect was adjusted to actually match exactly once, as
expected, for the "Foo*" return types, i.e. exclusions for the array
return types have been added.

Relates to #24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoImprove array matching for all TypePattern subclasses
Alexander Kriegisch [Sun, 15 Jan 2023 00:05:47 +0000 (01:05 +0100)]
Improve array matching for all TypePattern subclasses

Relates to #24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoHandle one- and multi-dimensional array return types correctly
Alexander Kriegisch [Mon, 9 Jan 2023 17:03:50 +0000 (18:03 +0100)]
Handle one- and multi-dimensional array return types correctly

Fixes https://github.com/eclipse/org.aspectj/issues/24, both the array
return type matching as such as well as matching dimensionality patterns
correctly. E.g., 'Foo*[]' is not the same as 'Foo*[][]'. This also works
correctly in combination with asterisks, even for primitive types, i.e.
'in*[][]' correctly matches a 2-dimensional array of 'int'.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoSimplify if-else in WildTypePattern.matchesExactlyByName
Alexander Kriegisch [Mon, 9 Jan 2023 16:59:20 +0000 (17:59 +0100)]
Simplify if-else in WildTypePattern.matchesExactlyByName

A simple boolean condition is enough.

Loosely relates to https://github.com/eclipse/org.aspectj/issues/24, but
actually it is just drive-by cosmetics.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix WildTypePattern.isArray
Alexander Kriegisch [Mon, 9 Jan 2023 16:56:15 +0000 (17:56 +0100)]
Fix WildTypePattern.isArray

The method falsely determined that a one-dimensional array was not an
array due to a one-off bug.

Relates to https://github.com/eclipse/org.aspectj/issues/24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoExpand regression tests for GitHub bug #24
Alexander Kriegisch [Mon, 9 Jan 2023 16:53:30 +0000 (17:53 +0100)]
Expand regression tests for GitHub bug #24

More test cases were added for
  - multi-dimensional arrays,
  - primitive type arrays.

Relates to https://github.com/eclipse/org.aspectj/issues/24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoAdd regression tests for GitHub bug #24
Alexander Kriegisch [Sun, 8 Jan 2023 10:00:46 +0000 (11:00 +0100)]
Add regression tests for GitHub bug #24

Relates to https://github.com/eclipse/org.aspectj/issues/24.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoRefactor, comment and reactivate Ajc183Tests.testAnnoStyleDecp_442425
Alexander Kriegisch [Sat, 7 Jan 2023 13:23:26 +0000 (14:23 +0100)]
Refactor, comment and reactivate Ajc183Tests.testAnnoStyleDecp_442425

This test was always inactive and did not add any value other than
during development. No it runs, passes and documents the status quo of
  - what was fixed (regression for AJC 1.8.2 core dump fixed in 1.8.3),
  - the current limitations of @DeclareParents and @DeclareMixin
    regarding generic interfaces.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoRemove some old, accidentally committed class files from tests
Alexander Kriegisch [Sat, 7 Jan 2023 13:05:22 +0000 (14:05 +0100)]
Remove some old, accidentally committed class files from tests

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoBcelTypeMunger.mungeMethodDelegate: only use 'synchronized' when necessary
Alexander Kriegisch [Sat, 7 Jan 2023 09:36:08 +0000 (10:36 +0100)]
BcelTypeMunger.mungeMethodDelegate: only use 'synchronized' when necessary

Relates to #198. Now, we create a delegate method body which basically
looks as follows:

public void methodOne() {
  if (this.ajc$instance$MyAspect$MyMixin == null) {
    synchronized(this) {
      if (this.ajc$instance$MyAspect$MyMixin == null) {
        this.ajc$instance$MyAspect$MyMixin = MyAspect.aspectOf().createImplementation(this);
      }
    }
  }
  this.ajc$instance$MyAspect$MyMixin.methodOne();
}

The idea for the outer null check is from @aclement, see
https://github.com/eclipse/org.aspectj/pull/205#issuecomment-1371556080.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoNo more compiler errors for implicitly static inner aspects of interfaces
Alexander Kriegisch [Fri, 6 Jan 2023 00:20:55 +0000 (01:20 +0100)]
No more compiler errors for implicitly static inner aspects of interfaces

Fixes #162. Contains regression test
Bugs1919Tests.testInterfaceInnerAspectImplicitlyStatic.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoTest cosmetics
Alexander Kriegisch [Fri, 6 Jan 2023 00:16:31 +0000 (01:16 +0100)]
Test cosmetics

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoGitHub CI build: upgrade GabrielBB/xvfb-action to 1.6
Alexander Kriegisch [Wed, 4 Jan 2023 14:49:36 +0000 (15:49 +0100)]
GitHub CI build: upgrade GabrielBB/xvfb-action to 1.6

CI builds started showing warnings as follows:

Node.js 12 actions are deprecated. For more information see:
https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/.

Please update the following actions to use Node.js 16:
GabrielBB/xvfb-action@v1

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoImprove BcelTypeMunger.mungeMethodDelegate to avoid race condition
Alexander Kriegisch [Thu, 29 Dec 2022 14:24:27 +0000 (15:24 +0100)]
Improve BcelTypeMunger.mungeMethodDelegate to avoid race condition

Fixes #198, i.e. test DeclareMixinTests.testCaseEConcurrent from the
previous commit now passes.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoAdd test reproducing problem from #198
Alexander Kriegisch [Thu, 29 Dec 2022 14:17:53 +0000 (15:17 +0100)]
Add test reproducing problem from #198

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix parenthesised AJ keyword compiler problem
Alexander Kriegisch [Wed, 4 Jan 2023 13:55:42 +0000 (14:55 +0100)]
Fix parenthesised AJ keyword compiler problem

Fixes #20. Needs JDT Core grammar fix.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix TABLESWITCH weaver issue with Integer.MAX_VALUE
Alexander Kriegisch [Fri, 30 Dec 2022 08:55:23 +0000 (09:55 +0100)]
Fix TABLESWITCH weaver issue with Integer.MAX_VALUE

Fixes #190.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoRegression test for #190
Alexander Kriegisch [Fri, 30 Dec 2022 08:52:09 +0000 (09:52 +0100)]
Regression test for #190

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoFix indentation in ajc1919.xml (cosmetics)
Alexander Kriegisch [Fri, 30 Dec 2022 08:49:19 +0000 (09:49 +0100)]
Fix indentation in ajc1919.xml (cosmetics)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
22 months agoImprove code and documentation for #366085 fix
Alexander Kriegisch [Wed, 28 Dec 2022 10:54:28 +0000 (11:54 +0100)]
Improve code and documentation for #366085 fix

This commit is a follow-up for 65f1ec72. The SOURCE retention case is
documented now and considered in a few more call sites. The
previously already similar code structures in
  - DeclareAnnotation.ensureAnnotationDiscovered,
  - DeclareAnnotation.getAnnotationType
have both been streamlined and still remain logically in sync.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoIDE.md: update AJDT version info
Alexander Kriegisch [Thu, 22 Dec 2022 09:58:49 +0000 (10:58 +0100)]
IDE.md: update AJDT version info

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoSet version to 1.9.20-SNAPSHOT
Alexander Kriegisch [Wed, 21 Dec 2022 15:53:32 +0000 (16:53 +0100)]
Set version to 1.9.20-SNAPSHOT

23 months agoAspectJ release 1.9.19 V1_9_19
Alexander Kriegisch [Wed, 21 Dec 2022 15:52:08 +0000 (16:52 +0100)]
AspectJ release 1.9.19

23 months agoBCEL: use MAX_CP_ENTRIES from internal class, not from JRE
Alexander Kriegisch [Wed, 21 Dec 2022 14:56:34 +0000 (15:56 +0100)]
BCEL: use MAX_CP_ENTRIES from internal class, not from JRE

Instead of importing com.sun.org.apache.bcel.internal.Const, use
use org.aspectj.apache.bcel.Constants. The former class is from the
internal JRE module 'java.xml' which is not exposed by default.
Actually, no existing test failed because of it, but javadoc generation
for the AspectJ weaver.

Relates to #192.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoBump JDT Core to release 1.9.19
Alexander Kriegisch [Wed, 21 Dec 2022 14:01:49 +0000 (15:01 +0100)]
Bump JDT Core to release 1.9.19

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoUpdate release notes for 1.9.19 (Java 19)
Alexander Kriegisch [Wed, 21 Dec 2022 14:00:22 +0000 (15:00 +0100)]
Update release notes for 1.9.19 (Java 19)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoFix #366085 concerning declared annotations with source retention
Alexander Kriegisch [Sun, 4 Dec 2022 15:16:37 +0000 (16:16 +0100)]
Fix #366085 concerning declared annotations with source retention

See https://bugs.eclipse.org/bugs/show_bug.cgi?id=366085.
See https://stackoverflow.com/q/74618269/1082681.

The issue described in the Bugzilla issue is about 'declare @type', but
similar issues also existed for 'declare @field', 'declare @method',
'declare @constructor'. This fix is rather superficial and leaves
things to be desired, because it is rather hacky and simply ignores
errors source retention annotation declarations during weaving. A better
fix would drop the corresponding declarations while parsing and also
issue compiler warnings in each case.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoMerge pull request #187 from eclipse/java-19
Alexander Kriegisch [Wed, 21 Dec 2022 12:40:20 +0000 (19:40 +0700)]
Merge pull request #187 from eclipse/java-19

Java 19 support

23 months agoAdd release notes for 1.9.19 (Java 19) 187/head
Alexander Kriegisch [Wed, 21 Dec 2022 12:00:37 +0000 (13:00 +0100)]
Add release notes for 1.9.19 (Java 19)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoAdd tests for Java 19 record patterns
Alexander Kriegisch [Wed, 21 Dec 2022 11:57:44 +0000 (12:57 +0100)]
Add tests for Java 19 record patterns

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
23 months agoBump ECJ version in messages_aspectj.properties
Alexander Kriegisch [Tue, 20 Dec 2022 12:06:56 +0000 (13:06 +0100)]
Bump ECJ version in messages_aspectj.properties

Eclipse Compiler 19f448f47c9e3e (15Dec2022) - Java19

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoMerge branch 'master' into java-19
Alexander Kriegisch [Sun, 13 Nov 2022 10:59:19 +0000 (11:59 +0100)]
Merge branch 'master' into java-19

2 years agoAddress upstream BCEL vulnerability CVE-2022-42920
Alexander Kriegisch [Sun, 13 Nov 2022 10:28:22 +0000 (11:28 +0100)]
Address upstream BCEL vulnerability CVE-2022-42920

Fixes #192.

See https://github.com/advisories/GHSA-97xg-phpr-rg8q.
See https://issues.apache.org/jira/browse/BCEL-363.
See https://github.com/apache/commons-bcel/pull/147.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoOutputSpec.matchesThisVm better supports version ranges
Alexander Kriegisch [Wed, 5 Oct 2022 15:37:21 +0000 (17:37 +0200)]
OutputSpec.matchesThisVm better supports version ranges

vmVersionRanges might be a single version like "9", a list of versions
like "1.2,1.3,1.4,1.5", an equivalent range of "1.2-1.5", an open range
like "-1.8", "9-" (equivalent to "9+") or a more complex list of ranges
like "-1.6,9-11,13-14,17-" or "8,11,16+".

Empty ranges like in "", " ",  "8,,14", ",5", "6-," will be ignored.
I.e., they will not yield a positive match.

Bogus ranges like "9-11-14" will be ignored, too.

Existing XML test specs using '<line text="..." vm="v,v2,...,vn"/>
have been adjusted to use version ranges rather than long lists of
consecutive versions. Furthermore, ranges with a trailing '+' like '14+'
were replaced by using the new canonical format '14-', even though the
parser still correctly recognises '14+'.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoLangUtil: improve Java version major/minor parsing
Alexander Kriegisch [Wed, 5 Oct 2022 08:11:54 +0000 (10:11 +0200)]
LangUtil: improve Java version major/minor parsing

- Ignore everything including and after '+' in versions like '19+36-2238'
- Add minor '.0' to Java versions like '19', '19+36-2238'

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoFix tests due to changed JDK 'toString' methods in Java 19
Alexander Kriegisch [Mon, 3 Oct 2022 19:51:31 +0000 (21:51 +0200)]
Fix tests due to changed JDK 'toString' methods in Java 19

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoAdd the first few Java 19 tests
Alexander Kriegisch [Mon, 3 Oct 2022 15:17:50 +0000 (17:17 +0200)]
Add the first few Java 19 tests

For now, only the "pattern matching for switch" tests from previews 1
and 2 were adjusted to work in preview 3, because guarded patterns were
replaced by 'when' clauses in 'switch' blocks. Therefore, existing test
classes did not compile anymore and had to be replaced by syntactically
upgraded versions with content merged from preview 1 and 2 classes.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoDeactivate Java 18 preview language feature tests
Alexander Kriegisch [Mon, 3 Oct 2022 14:36:33 +0000 (16:36 +0200)]
Deactivate Java 18 preview language feature tests

and enable LangUtil to parse Java versions like '19+36-2238'.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoRemove Batik path entries from test classpath
Alexander Kriegisch [Mon, 3 Oct 2022 12:02:32 +0000 (14:02 +0200)]
Remove Batik path entries from test classpath

Firstly, Batik is not needed for running AspectJ tests.

Secondly, the fixed Windows path separators led to GitHub CI/CD tests
failing under Java 18+ on GitHub. Replacing ';' by 'File.pathSeparator'
would have fixed the problem, but removing the paths altogether is the
cleaner solution.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoCosmetic fixes in Java 18 tests (e.g. copyright year 2022)
Alexander Kriegisch [Mon, 3 Oct 2022 10:55:38 +0000 (12:55 +0200)]
Cosmetic fixes in Java 18 tests (e.g. copyright year 2022)

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoDo not run Java 18 preview feature tests with Java 19 JDT Core
Alexander Kriegisch [Mon, 3 Oct 2022 10:53:33 +0000 (12:53 +0200)]
Do not run Java 18 preview feature tests with Java 19 JDT Core

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoBump ASM to 9.4, supporting Java 20 class files
Alexander Kriegisch [Sun, 2 Oct 2022 15:38:27 +0000 (17:38 +0200)]
Bump ASM to 9.4, supporting Java 20 class files

Even though we just upgraded to 9.3 for Java 19, it does not hurt to
have ASM recognise the Java 20 class file major version.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoSet Maven version to 1.9.19-SNAPSHOT
Alexander Kriegisch [Sun, 2 Oct 2022 10:36:17 +0000 (12:36 +0200)]
Set Maven version to 1.9.19-SNAPSHOT

It makes sense to indicate the Java version in the minor-minor of
AspectJ artifacts.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoSet Java 19 compiler version after JDT Core merge
Alexander Kriegisch [Sun, 2 Oct 2022 10:11:43 +0000 (12:11 +0200)]
Set Java 19 compiler version after JDT Core merge

In messages_aspectj.properties, set compiler.version to
"Eclipse Compiler 5fd28398cc7aba (21Sep2022) - Java19".

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoFirst Java 19 version, barely tested.
Alexander Kriegisch [Sat, 1 Oct 2022 15:51:45 +0000 (17:51 +0200)]
First Java 19 version, barely tested.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoAdd docs/dist/LICENSE-AspectJ.html to all public artifacts
Alexander Kriegisch [Sat, 1 Oct 2022 07:49:19 +0000 (09:49 +0200)]
Add docs/dist/LICENSE-AspectJ.html to all public artifacts

The license file will be included right in the main directory of both
binary and source artifacts for
  - AspectJ Matcher,
  - AspectJ Runtime,
  - AspectJ Weaver,
  - AspectJ Tools (Compiler),
  - AspectJ Installer.

Fixes #185.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agovuln-fix: Partial Path Traversal Vulnerability
Jonathan Leitschuh [Fri, 9 Sep 2022 03:00:08 +0000 (03:00 +0000)]
vuln-fix: Partial Path Traversal Vulnerability

This fixes a partial path traversal vulnerability.

Replaces `dir.getCanonicalPath().startsWith(parent.getCanonicalPath())`, which is vulnerable to partial path traversal attacks, with the more secure `dir.getCanonicalFile().toPath().startsWith(parent.getCanonicalFile().toPath())`.

To demonstrate this vulnerability, consider `"/usr/outnot".startsWith("/usr/out")`.
The check is bypassed although `/outnot` is not under the `/out` directory.
It's important to understand that the terminating slash may be removed when using various `String` representations of the `File` object.
For example, on Linux, `println(new File("/var"))` will print `/var`, but `println(new File("/var", "/")` will print `/var/`;
however, `println(new File("/var", "/").getCanonicalPath())` will print `/var`.

Weakness: CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
Severity: Medium
CVSSS: 6.1
Detection: CodeQL & OpenRewrite (https://public.moderne.io/recipes/org.openrewrite.java.security.PartialPathTraversalVulnerability)

Reported-by: Jonathan Leitschuh <Jonathan.Leitschuh@gmail.com>
Signed-off-by: Jonathan Leitschuh <Jonathan.Leitschuh@gmail.com>
Bug-tracker: https://github.com/JLLeitschuh/security-research/issues/13

Co-authored-by: Moderne <team@moderne.io>
2 years agoImprove condy (constant dynamic) support
Alexander Kriegisch [Sat, 13 Aug 2022 20:46:45 +0000 (22:46 +0200)]
Improve condy (constant dynamic) support

Relates to #170. Fixes the "Unknown constant type 17" problem.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoCI build: upgrade from Java 18-EA to 18
Alexander Kriegisch [Sun, 3 Jul 2022 08:39:24 +0000 (10:39 +0200)]
CI build: upgrade from Java 18-EA to 18

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
2 years agoUse System.lineSeparator() instead of hand-crafted method
Andrey Turbanov [Wed, 20 Apr 2022 20:20:22 +0000 (23:20 +0300)]
Use System.lineSeparator() instead of hand-crafted method