Skip to content

Commit ad577b0

Browse files
authored
XPlugin Issue with Maven Build Cache Extension in IntelliJ (#358)
* bugfix : sometimes MavenSession is not started when Guice Injection * use javax.inject.Provider and not com.google.inject.Provider
1 parent 0fbb00f commit ad577b0

File tree

5 files changed

+31
-14
lines changed

5 files changed

+31
-14
lines changed

src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javax.annotation.Nonnull;
2222
import javax.inject.Inject;
2323
import javax.inject.Named;
24+
import javax.inject.Provider;
2425

2526
import java.io.File;
2627
import java.io.FileNotFoundException;
@@ -127,7 +128,7 @@ public class CacheControllerImpl implements CacheController {
127128
private final LocalCacheRepository localCache;
128129
private final RemoteCacheRepository remoteCache;
129130
private final ConcurrentMap<String, CacheResult> cacheResults = new ConcurrentHashMap<>();
130-
private final LifecyclePhasesHelper lifecyclePhasesHelper;
131+
private final Provider<LifecyclePhasesHelper> providerLifecyclePhasesHelper;
131132
private volatile Map<String, MavenProject> projectIndex;
132133
private final ProjectInputCalculator projectInputCalculator;
133134
private final RestoredArtifactHandler restoreArtifactHandler;
@@ -153,16 +154,15 @@ public CacheControllerImpl(
153154
CacheConfig cacheConfig,
154155
ProjectInputCalculator projectInputCalculator,
155156
RestoredArtifactHandler restoreArtifactHandler,
156-
LifecyclePhasesHelper lifecyclePhasesHelper,
157-
MavenSession session) {
157+
Provider<LifecyclePhasesHelper> providerLifecyclePhasesHelper) {
158158
// CHECKSTYLE_OFF: ParameterNumber
159159
this.projectHelper = projectHelper;
160160
this.localCache = localCache;
161161
this.remoteCache = remoteCache;
162162
this.cacheConfig = cacheConfig;
163163
this.artifactHandlerManager = artifactHandlerManager;
164164
this.xmlService = xmlService;
165-
this.lifecyclePhasesHelper = lifecyclePhasesHelper;
165+
this.providerLifecyclePhasesHelper = providerLifecyclePhasesHelper;
166166
this.projectInputCalculator = projectInputCalculator;
167167
this.restoreArtifactHandler = restoreArtifactHandler;
168168
}
@@ -171,6 +171,7 @@ public CacheControllerImpl(
171171
@Nonnull
172172
public CacheResult findCachedBuild(
173173
MavenSession session, MavenProject project, List<MojoExecution> mojoExecutions, boolean skipCache) {
174+
final LifecyclePhasesHelper lifecyclePhasesHelper = providerLifecyclePhasesHelper.get();
174175
final String highestPhase = lifecyclePhasesHelper.resolveHighestLifecyclePhase(project, mojoExecutions);
175176

176177
if (!lifecyclePhasesHelper.isLaterPhaseThanClean(highestPhase)) {
@@ -257,6 +258,7 @@ private CacheResult analyzeResult(CacheContext context, List<MojoExecution> mojo
257258
build.getCacheImplementationVersion());
258259
}
259260

261+
final LifecyclePhasesHelper lifecyclePhasesHelper = providerLifecyclePhasesHelper.get();
260262
List<MojoExecution> cachedSegment =
261263
lifecyclePhasesHelper.getCachedSegment(context.getProject(), mojoExecutions, build);
262264
List<MojoExecution> missingMojos = build.getMissingExecutions(cachedSegment);
@@ -296,6 +298,7 @@ private CacheResult analyzeResult(CacheContext context, List<MojoExecution> mojo
296298
}
297299

298300
private boolean canIgnoreMissingSegment(MavenProject project, Build info, List<MojoExecution> mojoExecutions) {
301+
final LifecyclePhasesHelper lifecyclePhasesHelper = providerLifecyclePhasesHelper.get();
299302
final List<MojoExecution> postCachedSegment =
300303
lifecyclePhasesHelper.getPostCachedSegment(project, mojoExecutions, info);
301304

src/main/java/org/apache/maven/buildcache/DefaultMultiModuleSupport.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import javax.inject.Inject;
2222
import javax.inject.Named;
23+
import javax.inject.Provider;
2324

2425
import java.io.File;
2526
import java.util.ArrayList;
@@ -58,21 +59,23 @@ public class DefaultMultiModuleSupport implements MultiModuleSupport {
5859

5960
private final ProjectBuilder projectBuilder;
6061
private final CacheConfig cacheConfig;
61-
private final MavenSession session;
62+
private final Provider<MavenSession> providerSession;
6263

6364
private volatile boolean built;
6465
private volatile Map<String, MavenProject> projectMap;
6566
private volatile Map<String, MavenProject> sessionProjectMap;
6667

6768
@Inject
68-
public DefaultMultiModuleSupport(ProjectBuilder projectBuilder, CacheConfig cacheConfig, MavenSession session) {
69+
public DefaultMultiModuleSupport(
70+
ProjectBuilder projectBuilder, CacheConfig cacheConfig, Provider<MavenSession> providerSession) {
6971
this.projectBuilder = projectBuilder;
7072
this.cacheConfig = cacheConfig;
71-
this.session = session;
73+
this.providerSession = providerSession;
7274
}
7375

7476
@Override
7577
public boolean isPartOfSession(String groupId, String artifactId, String version) {
78+
MavenSession session = providerSession.get();
7679
return getProjectMap(session).containsKey(KeyUtils.getProjectKey(groupId, artifactId, version));
7780
}
7881

@@ -85,6 +88,7 @@ public Optional<MavenProject> tryToResolveProject(String groupId, String artifac
8588
@Override
8689
public boolean isPartOfMultiModule(String groupId, String artifactId, String version) {
8790
String projectKey = KeyUtils.getProjectKey(groupId, artifactId, version);
91+
MavenSession session = providerSession.get();
8892
return getProjectMap(session).containsKey(projectKey)
8993
|| getMultiModuleProjectsMap().containsKey(projectKey);
9094
}
@@ -102,6 +106,7 @@ private Map<String, MavenProject> getMultiModuleProjectsMap() {
102106
if (projectMap != null) {
103107
return projectMap;
104108
}
109+
MavenSession session = providerSession.get();
105110
return getMultiModuleProjectsMapInner(session);
106111
}
107112

src/main/java/org/apache/maven/buildcache/DefaultProjectInputCalculator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import javax.inject.Inject;
2222
import javax.inject.Named;
23+
import javax.inject.Provider;
2324

2425
import java.util.LinkedHashSet;
2526
import java.util.Set;
@@ -44,7 +45,7 @@ public class DefaultProjectInputCalculator implements ProjectInputCalculator {
4445

4546
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultProjectInputCalculator.class);
4647

47-
private final MavenSession mavenSession;
48+
private final Provider<MavenSession> providerSession;
4849
private final RemoteCacheRepository remoteCache;
4950
private final CacheConfig cacheConfig;
5051
private final RepositorySystem repoSystem;
@@ -58,14 +59,14 @@ public class DefaultProjectInputCalculator implements ProjectInputCalculator {
5859

5960
@Inject
6061
public DefaultProjectInputCalculator(
61-
MavenSession mavenSession,
62+
Provider<MavenSession> providerSession,
6263
RemoteCacheRepository remoteCache,
6364
CacheConfig cacheConfig,
6465
RepositorySystem repoSystem,
6566
NormalizedModelProvider rawModelProvider,
6667
MultiModuleSupport multiModuleSupport,
6768
ArtifactHandlerManager artifactHandlerManager) {
68-
this.mavenSession = mavenSession;
69+
this.providerSession = providerSession;
6970
this.remoteCache = remoteCache;
7071
this.cacheConfig = cacheConfig;
7172
this.repoSystem = repoSystem;
@@ -104,6 +105,7 @@ private ProjectsInputInfo calculateInputInternal(String key, MavenProject projec
104105
+ ", setOfCalculatingProjects=" + projectsSet + "]");
105106
}
106107
try {
108+
final MavenSession mavenSession = providerSession.get();
107109
final MavenProjectInput input = new MavenProjectInput(
108110
project,
109111
normalizedModelProvider,

src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import javax.annotation.Nullable;
2323
import javax.inject.Inject;
2424
import javax.inject.Named;
25+
import javax.inject.Provider;
2526

2627
import java.nio.file.Files;
2728
import java.nio.file.Path;
@@ -115,7 +116,7 @@ public class CacheConfigImpl implements org.apache.maven.buildcache.xml.CacheCon
115116
private static final Logger LOGGER = LoggerFactory.getLogger(CacheConfigImpl.class);
116117

117118
private final XmlService xmlService;
118-
private final MavenSession session;
119+
private final Provider<MavenSession> providerSession;
119120
private final RuntimeInformation rtInfo;
120121

121122
private volatile CacheState state;
@@ -124,9 +125,9 @@ public class CacheConfigImpl implements org.apache.maven.buildcache.xml.CacheCon
124125
private List<Pattern> excludePatterns;
125126

126127
@Inject
127-
public CacheConfigImpl(XmlService xmlService, MavenSession session, RuntimeInformation rtInfo) {
128+
public CacheConfigImpl(XmlService xmlService, Provider<MavenSession> providerSession, RuntimeInformation rtInfo) {
128129
this.xmlService = xmlService;
129-
this.session = session;
130+
this.providerSession = providerSession;
130131
this.rtInfo = rtInfo;
131132
}
132133

@@ -153,6 +154,7 @@ public CacheState initialize() {
153154
if (StringUtils.isNotBlank(configPathText)) {
154155
configPath = Paths.get(configPathText);
155156
} else {
157+
final MavenSession session = providerSession.get();
156158
configPath =
157159
getMultimoduleRoot(session).resolve(".mvn").resolve("maven-build-cache-config.xml");
158160
}
@@ -635,6 +637,7 @@ private void checkInitializedState() {
635637
}
636638

637639
private String getProperty(String key, String defaultValue) {
640+
MavenSession session = providerSession.get();
638641
String value = session.getUserProperties().getProperty(key);
639642
if (value == null) {
640643
value = session.getSystemProperties().getProperty(key);
@@ -646,6 +649,7 @@ private String getProperty(String key, String defaultValue) {
646649
}
647650

648651
private boolean getProperty(String key, boolean defaultValue) {
652+
MavenSession session = providerSession.get();
649653
String value = session.getUserProperties().getProperty(key);
650654
if (value == null) {
651655
value = session.getSystemProperties().getProperty(key);

src/test/java/org/apache/maven/buildcache/xml/CacheConfigImplTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.buildcache.xml;
2020

21+
import javax.inject.Provider;
22+
2123
import java.io.File;
2224
import java.io.IOException;
2325
import java.lang.reflect.InvocationTargetException;
@@ -110,8 +112,9 @@ void setUp() throws IOException {
110112
testCacheConfig = new XmlService().loadCacheConfig("<cache></cache>".getBytes());
111113
when(xmlService.loadCacheConfig(rootConfigFile)).thenReturn(testCacheConfig);
112114

115+
Provider<MavenSession> provider = (() -> mavenSession);
113116
// test object
114-
testObject = new CacheConfigImpl(xmlService, mavenSession, rtInfo);
117+
testObject = new CacheConfigImpl(xmlService, provider, rtInfo);
115118
}
116119

117120
private static void deepMockConfigFile(File mockFile, boolean exists) throws IOException {

0 commit comments

Comments
 (0)