Skip to content

Commit 5d4a04e

Browse files
committed
Introduce a build listener that can be disabled in case of conflict
1 parent 148c96e commit 5d4a04e

File tree

4 files changed

+157
-4
lines changed

4 files changed

+157
-4
lines changed

src/main/java/dev/nokee/init/NokeeInitPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.nokee.init;
22

3+
import dev.nokee.init.internal.DisableableBuildListener;
34
import dev.nokee.init.internal.NokeeInitBuildListener;
45
import dev.nokee.init.internal.RegisterNokeeTaskAction;
56
import dev.nokee.init.internal.versions.DefaultGradleVersionProvider;
@@ -28,7 +29,7 @@ protected NokeeInitPlugin() {
2829
@Override
2930
public void apply(Gradle gradle) {
3031
if (MINIMUM_GRADLE_SUPPORTED.compareTo(gradleVersionProvider.get()) <= 0) {
31-
gradle.addBuildListener(new NokeeInitBuildListener());
32+
gradle.addBuildListener(new DisableableBuildListener(new NokeeInitBuildListener()));
3233
}
3334
}
3435
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package dev.nokee.init.internal;
2+
3+
import org.gradle.BuildAdapter;
4+
import org.gradle.BuildListener;
5+
import org.gradle.BuildResult;
6+
import org.gradle.api.initialization.Settings;
7+
import org.gradle.api.invocation.Gradle;
8+
9+
public final class DisableableBuildListener extends BuildAdapter {
10+
private final BuildListener delegate;
11+
private boolean disabled = false;
12+
13+
public DisableableBuildListener(BuildListener delegate) {
14+
this.delegate = delegate;
15+
}
16+
17+
public void disable() {
18+
disabled = true;
19+
}
20+
21+
@Override
22+
public void beforeSettings(Settings settings) {
23+
if (!disabled) {
24+
delegate.beforeSettings(settings);
25+
}
26+
}
27+
28+
@Override
29+
public void settingsEvaluated(Settings settings) {
30+
if (!disabled) {
31+
delegate.settingsEvaluated(settings);
32+
}
33+
}
34+
35+
@Override
36+
public void projectsLoaded(Gradle gradle) {
37+
if (!disabled) {
38+
delegate.projectsLoaded(gradle);
39+
}
40+
}
41+
42+
@Override
43+
public void projectsEvaluated(Gradle gradle) {
44+
if (!disabled) {
45+
delegate.projectsEvaluated(gradle);
46+
}
47+
}
48+
49+
@Override
50+
public void buildFinished(BuildResult result) {
51+
if (!disabled) {
52+
delegate.buildFinished(result);
53+
}
54+
}
55+
}

src/test/groovy/dev/nokee/init/NokeeInitPluginTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package dev.nokee.init;
22

3-
import dev.nokee.init.internal.NokeeInitBuildListener;
43
import org.gradle.api.invocation.Gradle;
54
import org.gradle.util.GradleVersion;
65
import org.junit.jupiter.api.Test;
76
import org.mockito.Mockito;
87

9-
import static org.mockito.ArgumentMatchers.isA;
8+
import static org.mockito.ArgumentMatchers.any;
109
import static org.mockito.Mockito.verify;
1110
import static org.mockito.Mockito.verifyNoInteractions;
1211

@@ -22,6 +21,6 @@ void doNothingOnUnsupportedVersion() {
2221
@Test
2322
void configuresGradleOnSupportedVersion() {
2423
new NokeeInitPlugin(() -> GradleVersion.version("6.3")).apply(gradle);
25-
verify(gradle).addBuildListener(isA(NokeeInitBuildListener.class));
24+
verify(gradle).addBuildListener(any());
2625
}
2726
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package dev.nokee.init.internal;
2+
3+
import lombok.val;
4+
import org.gradle.BuildListener;
5+
import org.gradle.BuildResult;
6+
import org.gradle.api.initialization.Settings;
7+
import org.gradle.api.invocation.Gradle;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Nested;
10+
import org.junit.jupiter.api.Test;
11+
12+
import static org.mockito.Mockito.*;
13+
14+
class DisableableBuildListenerTest {
15+
private final BuildListener delegate = mock(BuildListener.class);
16+
private final DisableableBuildListener subject = new DisableableBuildListener(delegate);
17+
18+
@Nested
19+
class Enabled {
20+
@Test
21+
void delegatesCallToBeforeSettings() {
22+
val arg = mock(Settings.class);
23+
subject.beforeSettings(arg);
24+
verify(delegate).beforeSettings(arg);
25+
}
26+
27+
@Test
28+
void delegatesCallToSettingsEvaluated() {
29+
val arg = mock(Settings.class);
30+
subject.settingsEvaluated(arg);
31+
verify(delegate).settingsEvaluated(arg);
32+
}
33+
34+
@Test
35+
void delegatesCallToBuildFinished() {
36+
val arg = new BuildResult(null, null);
37+
subject.buildFinished(arg);
38+
verify(delegate).buildFinished(arg);
39+
}
40+
41+
@Test
42+
void delegatesCallToProjectsEvaluated() {
43+
val arg = mock(Gradle.class);
44+
subject.projectsEvaluated(arg);
45+
verify(delegate).projectsEvaluated(arg);
46+
}
47+
48+
@Test
49+
void delegatesCallToProjectsLoaded() {
50+
val arg = mock(Gradle.class);
51+
subject.projectsLoaded(arg);
52+
verify(delegate).projectsLoaded(arg);
53+
}
54+
}
55+
56+
@Nested
57+
class Disabled {
58+
@BeforeEach
59+
void disableBuildListener() {
60+
subject.disable();
61+
}
62+
63+
@Test
64+
void delegatesCallToBeforeSettings() {
65+
val arg = mock(Settings.class);
66+
subject.beforeSettings(arg);
67+
verify(delegate, never()).beforeSettings(arg);
68+
}
69+
70+
@Test
71+
void delegatesCallToSettingsEvaluated() {
72+
val arg = mock(Settings.class);
73+
subject.settingsEvaluated(arg);
74+
verify(delegate, never()).settingsEvaluated(arg);
75+
}
76+
77+
@Test
78+
void delegatesCallToBuildFinished() {
79+
val arg = new BuildResult(null, null);
80+
subject.buildFinished(arg);
81+
verify(delegate, never()).buildFinished(arg);
82+
}
83+
84+
@Test
85+
void delegatesCallToProjectsEvaluated() {
86+
val arg = mock(Gradle.class);
87+
subject.projectsEvaluated(arg);
88+
verify(delegate, never()).projectsEvaluated(arg);
89+
}
90+
91+
@Test
92+
void delegatesCallToProjectsLoaded() {
93+
val arg = mock(Gradle.class);
94+
subject.projectsLoaded(arg);
95+
verify(delegate, never()).projectsLoaded(arg);
96+
}
97+
}
98+
}

0 commit comments

Comments
 (0)