From ee31278482583ba4da2f21372c1800a3ba97bcff Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 26 Oct 2022 12:12:32 +0200 Subject: [PATCH 1/2] [MRESOLVER-278] Session close and onClose hooks fix There are valid cases in Maven when interaction with resolver (that would "lazily" init SyncContext) happens way late, when session is already done readOnly. Fix: adding onCloseHandler should NOT be affected by readOnly state of session, as it merely means it's members like LRM, etc are "fixed", but session data etc are all still mutable. Similarly, due lazy init, some components may way -- as above in valid cases -- register some handler when session is already read only. This change makes all Maven ITs pass with this resolver. --- .../org/eclipse/aether/DefaultRepositorySystemSession.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java b/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java index 4450487f6..2c6100502 100644 --- a/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java +++ b/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java @@ -894,8 +894,11 @@ public Collection getTransformersForArtifact( Artifact artifact @Override public void addOnCloseHandler( Consumer handler ) { - verifyStateForMutation(); requireNonNull( handler, "handler cannot be null" ); + if ( closed.get() ) + { + throw new IllegalStateException( "repository system session is closed" ); + } onCloseHandlers.add( 0, handler ); } From f9bc3ef3f12e872f1db83b43f66977689de29ed7 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Wed, 26 Oct 2022 12:58:24 +0200 Subject: [PATCH 2/2] PR review --- .../org/eclipse/aether/DefaultRepositorySystemSession.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java b/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java index 2c6100502..7ed9313a5 100644 --- a/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java +++ b/maven-resolver-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java @@ -816,9 +816,9 @@ private void verifyStateForMutation() { throw new IllegalStateException( "repository system session is read-only" ); } - if ( isClosed() ) + if ( closed.get() ) { - throw new IllegalStateException( "repository system session is closed" ); + throw new IllegalStateException( "repository system session is already closed" ); } } @@ -897,7 +897,7 @@ public void addOnCloseHandler( Consumer handler ) requireNonNull( handler, "handler cannot be null" ); if ( closed.get() ) { - throw new IllegalStateException( "repository system session is closed" ); + throw new IllegalStateException( "repository system session is already closed" ); } onCloseHandlers.add( 0, handler ); }