Lines 83-92
Link Here
|
83 |
import org.netbeans.modules.maven.api.execute.ActiveJ2SEPlatformProvider; |
83 |
import org.netbeans.modules.maven.api.execute.ActiveJ2SEPlatformProvider; |
84 |
import org.netbeans.modules.maven.api.problem.ProblemReport; |
84 |
import org.netbeans.modules.maven.api.problem.ProblemReport; |
85 |
import org.netbeans.modules.maven.configurations.M2ConfigProvider; |
85 |
import org.netbeans.modules.maven.configurations.M2ConfigProvider; |
|
|
86 |
import org.netbeans.modules.maven.configurations.M2Configuration; |
86 |
import org.netbeans.modules.maven.configurations.ProjectProfileHandlerImpl; |
87 |
import org.netbeans.modules.maven.configurations.ProjectProfileHandlerImpl; |
87 |
import org.netbeans.modules.maven.embedder.EmbedderFactory; |
88 |
import org.netbeans.modules.maven.embedder.EmbedderFactory; |
88 |
import org.netbeans.modules.maven.embedder.MavenEmbedder; |
89 |
import org.netbeans.modules.maven.embedder.MavenEmbedder; |
89 |
import org.netbeans.modules.maven.execute.AbstractMavenExecutor; |
90 |
import org.netbeans.modules.maven.execute.AbstractMavenExecutor; |
|
|
91 |
import org.netbeans.modules.maven.modelcache.MavenProjectCache; |
90 |
import org.netbeans.modules.maven.problems.ProblemReporterImpl; |
92 |
import org.netbeans.modules.maven.problems.ProblemReporterImpl; |
91 |
import org.netbeans.modules.maven.spi.queries.JavaLikeRootProvider; |
93 |
import org.netbeans.modules.maven.spi.queries.JavaLikeRootProvider; |
92 |
import org.netbeans.spi.java.project.support.LookupMergerSupport; |
94 |
import org.netbeans.spi.java.project.support.LookupMergerSupport; |
Lines 179-185
Link Here
|
179 |
projectFolderUpdater = new Updater("nb-configuration.xml", "pom.xml"); //NOI18N |
181 |
projectFolderUpdater = new Updater("nb-configuration.xml", "pom.xml"); //NOI18N |
180 |
userFolderUpdater = new Updater("settings.xml");//NOI18N |
182 |
userFolderUpdater = new Updater("settings.xml");//NOI18N |
181 |
problemReporter = new ProblemReporterImpl(this); |
183 |
problemReporter = new ProblemReporterImpl(this); |
182 |
M2AuxilaryConfigImpl auxiliary = new M2AuxilaryConfigImpl(folder, problemReporter); |
184 |
M2AuxilaryConfigImpl auxiliary = new M2AuxilaryConfigImpl(folder); |
|
|
185 |
auxiliary.setProblemReporter(problemReporter); |
183 |
auxprops = new MavenProjectPropsImpl(auxiliary, this); |
186 |
auxprops = new MavenProjectPropsImpl(auxiliary, this); |
184 |
profileHandler = new ProjectProfileHandlerImpl(this, auxiliary); |
187 |
profileHandler = new ProjectProfileHandlerImpl(this, auxiliary); |
185 |
configProvider = new M2ConfigProvider(this, auxiliary, profileHandler); |
188 |
configProvider = new M2ConfigProvider(this, auxiliary, profileHandler); |
Lines 208-213
Link Here
|
208 |
* @param properties |
211 |
* @param properties |
209 |
* @return |
212 |
* @return |
210 |
*/ |
213 |
*/ |
|
|
214 |
//TODO revisit usage, eventually should be only reuse MavenProjectCache |
211 |
public @NonNull MavenProject loadMavenProject(MavenEmbedder embedder, List<String> activeProfiles, Properties properties) { |
215 |
public @NonNull MavenProject loadMavenProject(MavenEmbedder embedder, List<String> activeProfiles, Properties properties) { |
212 |
try { |
216 |
try { |
213 |
MavenExecutionRequest req = embedder.createMavenExecutionRequest(); |
217 |
MavenExecutionRequest req = embedder.createMavenExecutionRequest(); |
Lines 215-221
Link Here
|
215 |
req.setPom(projectFile); |
219 |
req.setPom(projectFile); |
216 |
req.setNoSnapshotUpdates(true); |
220 |
req.setNoSnapshotUpdates(true); |
217 |
req.setUpdateSnapshots(false); |
221 |
req.setUpdateSnapshots(false); |
218 |
Properties props = createSystemPropsForProjectLoading(); |
222 |
Properties props = MavenProjectCache.createSystemPropsForProjectLoading(null); |
219 |
if (properties != null) { |
223 |
if (properties != null) { |
220 |
props.putAll(properties); |
224 |
props.putAll(properties); |
221 |
} |
225 |
} |
Lines 241-247
Link Here
|
241 |
//#136184 NumberFormatException |
245 |
//#136184 NumberFormatException |
242 |
LOG.log(Level.INFO, "Runtime exception thrown while loading maven project at " + getProjectDirectory(), exc); //NOI18N |
246 |
LOG.log(Level.INFO, "Runtime exception thrown while loading maven project at " + getProjectDirectory(), exc); //NOI18N |
243 |
} |
247 |
} |
244 |
return getFallbackProject(); |
248 |
return MavenProjectCache.getFallbackProject(this.getPOMFile()); |
245 |
} |
249 |
} |
246 |
|
250 |
|
247 |
public List<String> getCurrentActiveProfiles() { |
251 |
public List<String> getCurrentActiveProfiles() { |
Lines 249-283
Link Here
|
249 |
toRet.addAll(configProvider.getActiveConfiguration().getActivatedProfiles()); |
253 |
toRet.addAll(configProvider.getActiveConfiguration().getActivatedProfiles()); |
250 |
return toRet; |
254 |
return toRet; |
251 |
} |
255 |
} |
252 |
private static final Properties statics = new Properties(); |
|
|
253 |
|
256 |
|
254 |
private static Properties cloneStaticProps() { |
|
|
255 |
synchronized (statics) { |
256 |
if (statics.isEmpty()) { // not yet initialized |
257 |
// Now a misnomer, but available to activate profiles only during NB project parse: |
258 |
statics.setProperty("netbeans.execution", "true"); // NOI18N |
259 |
EmbedderFactory.fillEnvVars(statics); |
260 |
statics.putAll(AbstractMavenExecutor.excludeNetBeansProperties(System.getProperties())); |
261 |
} |
262 |
Properties toRet = new Properties(); |
263 |
toRet.putAll(statics); |
264 |
return toRet; |
265 |
} |
266 |
} |
267 |
|
257 |
|
268 |
//#158700 |
|
|
269 |
private Properties createSystemPropsForProjectLoading() { |
270 |
Properties props = cloneStaticProps(); |
271 |
props.putAll(configProvider.getActiveConfiguration().getProperties()); |
272 |
//TODO the properties for java.home and maybe others shall be relevant to the project setup not ide setup. |
273 |
// we got a chicken-egg situation here, the jdk used in project can be defined in the pom.xml file. |
274 |
return props; |
275 |
} |
276 |
|
277 |
//#172952 for property expression resolution we need this to include |
258 |
//#172952 for property expression resolution we need this to include |
278 |
// the properties of the platform to properly resolve stuff like com.sun.boot.class.path |
259 |
// the properties of the platform to properly resolve stuff like com.sun.boot.class.path |
279 |
public Map<? extends String,? extends String> createSystemPropsForPropertyExpressions() { |
260 |
public Map<? extends String,? extends String> createSystemPropsForPropertyExpressions() { |
280 |
Map<String,String> props = NbCollections.checkedMapByCopy(cloneStaticProps(), String.class, String.class, true); |
261 |
Map<String,String> props = NbCollections.checkedMapByCopy(MavenProjectCache.cloneStaticProps(), String.class, String.class, true); |
281 |
ActiveJ2SEPlatformProvider platformProvider = getLookup().lookup(ActiveJ2SEPlatformProvider.class); |
262 |
ActiveJ2SEPlatformProvider platformProvider = getLookup().lookup(ActiveJ2SEPlatformProvider.class); |
282 |
if (platformProvider != null) { // may be null inside PackagingProvider |
263 |
if (platformProvider != null) { // may be null inside PackagingProvider |
283 |
props.putAll(platformProvider.getJavaPlatform().getSystemProperties()); |
264 |
props.putAll(platformProvider.getJavaPlatform().getSystemProperties()); |
Lines 293-299
Link Here
|
293 |
public @NonNull synchronized MavenProject getOriginalMavenProject() { |
274 |
public @NonNull synchronized MavenProject getOriginalMavenProject() { |
294 |
MavenProject mp = project == null ? null : project.get(); |
275 |
MavenProject mp = project == null ? null : project.get(); |
295 |
if (mp == null) { |
276 |
if (mp == null) { |
296 |
mp = loadOriginalMavenProject(); |
277 |
mp = loadOriginalMavenProject(false); |
297 |
} |
278 |
} |
298 |
project = new SoftReference<MavenProject>(mp); |
279 |
project = new SoftReference<MavenProject>(mp); |
299 |
return mp; |
280 |
return mp; |
Lines 317-371
Link Here
|
317 |
+ "This is preventing the project model from loading properly. \n" |
298 |
+ "This is preventing the project model from loading properly. \n" |
318 |
+ "Please file a bug report with details about your project and the IDE's log file.\n\n" |
299 |
+ "Please file a bug report with details about your project and the IDE's log file.\n\n" |
319 |
}) |
300 |
}) |
320 |
private @NonNull MavenProject loadOriginalMavenProject() { |
301 |
private @NonNull MavenProject loadOriginalMavenProject(boolean reload) { |
321 |
long startLoading = System.currentTimeMillis(); |
302 |
MavenProject newproject; |
322 |
MavenProject newproject = null; |
|
|
323 |
try { |
303 |
try { |
324 |
// ProgressTransferListener.setAggregateHandle(hndl); |
304 |
newproject = MavenProjectCache.getMavenProject(this.folderFileObject, reload); |
325 |
// hndl.start(); |
305 |
MavenExecutionResult res = MavenProjectCache.getExecutionResult(newproject); |
326 |
final MavenExecutionRequest req = getEmbedder().createMavenExecutionRequest(); |
|
|
327 |
|
328 |
//#172526 have the modellineage cache reset at the same time the project cache resets |
329 |
profileHandler.clearLineageCache(); |
330 |
req.addActiveProfiles(getCurrentActiveProfiles()); |
331 |
req.setPom(projectFile); |
332 |
req.setNoSnapshotUpdates(true); |
333 |
req.setUpdateSnapshots(false); |
334 |
//MEVENIDE-634 i'm wondering if this fixes the issue |
335 |
req.setInteractiveMode(false); |
336 |
// recursive == false is important to avoid checking all submodules for extensions |
337 |
// that will not be used in current pom anyway.. |
338 |
// #135070 |
339 |
req.setRecursive(false); |
340 |
req.setOffline(true); |
341 |
req.setUserProperties(createSystemPropsForProjectLoading()); |
342 |
MavenExecutionResult res = getEmbedder().readProjectWithDependencies(req, true); |
343 |
newproject = res.getProject(); |
344 |
if (res.hasExceptions()) { |
306 |
if (res.hasExceptions()) { |
345 |
problemReporter.reportExceptions(res); |
307 |
problemReporter.reportExceptions(res); |
346 |
} else { |
308 |
} else { |
347 |
problemReporter.doArtifactChecks(newproject); |
309 |
problemReporter.doArtifactChecks(newproject); |
348 |
} |
310 |
} |
349 |
} catch (RuntimeException exc) { |
311 |
// } catch (RuntimeException exc) { |
350 |
//guard against exceptions that are not processed by the embedder |
312 |
// //guard against exceptions that are not processed by the embedder |
351 |
//#136184 NumberFormatException |
313 |
// //#136184 NumberFormatException |
352 |
LOG.log(Level.INFO, "Runtime exception thrown while loading maven project at " + getProjectDirectory(), exc); //NOI18N |
314 |
// LOG.log(Level.INFO, "Runtime exception thrown while loading maven project at " + getProjectDirectory(), exc); //NOI18N |
353 |
StringWriter wr = new StringWriter(); |
315 |
// StringWriter wr = new StringWriter(); |
354 |
PrintWriter pw = new PrintWriter(wr); |
316 |
// PrintWriter pw = new PrintWriter(wr); |
355 |
exc.printStackTrace(pw); |
317 |
// exc.printStackTrace(pw); |
356 |
pw.flush(); |
318 |
// pw.flush(); |
|
|
319 |
// |
320 |
// ProblemReport report = new ProblemReport(ProblemReport.SEVERITY_HIGH, |
321 |
// TXT_RuntimeException(), |
322 |
// TXT_RuntimeExceptionLong() + wr.toString(), null); |
323 |
// problemReporter.addReport(report); |
357 |
|
324 |
|
358 |
ProblemReport report = new ProblemReport(ProblemReport.SEVERITY_HIGH, |
|
|
359 |
TXT_RuntimeException(), |
360 |
TXT_RuntimeExceptionLong() + wr.toString(), null); |
361 |
problemReporter.addReport(report); |
362 |
|
363 |
} finally { |
325 |
} finally { |
364 |
if (newproject == null) { |
|
|
365 |
newproject = getFallbackProject(); |
366 |
} |
367 |
long endLoading = System.currentTimeMillis(); |
368 |
LOG.log(Level.FINE, "Loaded project in {0} msec at {1}", new Object[] {endLoading - startLoading, getProjectDirectory().getPath()}); |
369 |
if (LOG.isLoggable(Level.FINE) && SwingUtilities.isEventDispatchThread()) { |
326 |
if (LOG.isLoggable(Level.FINE) && SwingUtilities.isEventDispatchThread()) { |
370 |
LOG.log(Level.FINE, "Project " + getProjectDirectory().getPath() + " loaded in AWT event dispatching thread!", new RuntimeException()); |
327 |
LOG.log(Level.FINE, "Project " + getProjectDirectory().getPath() + " loaded in AWT event dispatching thread!", new RuntimeException()); |
371 |
} |
328 |
} |
Lines 374-395
Link Here
|
374 |
return newproject; |
331 |
return newproject; |
375 |
} |
332 |
} |
376 |
|
333 |
|
377 |
@Messages({ |
|
|
378 |
"LBL_Incomplete_Project_Name=<partially loaded Maven project>", |
379 |
"LBL_Incomplete_Project_Desc=Partially loaded Maven project; try building it." |
380 |
}) |
381 |
private MavenProject getFallbackProject() throws AssertionError { |
382 |
MavenProject newproject = new MavenProject(); |
383 |
newproject.setGroupId("error"); |
384 |
newproject.setArtifactId("error"); |
385 |
newproject.setVersion("0"); |
386 |
newproject.setPackaging("pom"); |
387 |
newproject.setName(LBL_Incomplete_Project_Name()); |
388 |
newproject.setDescription(LBL_Incomplete_Project_Desc()); |
389 |
newproject.setFile(projectFile); |
390 |
return newproject; |
391 |
} |
392 |
|
334 |
|
|
|
335 |
|
393 |
public void fireProjectReload() { |
336 |
public void fireProjectReload() { |
394 |
//#149566 prevent project firing squads to execute under project mutex. |
337 |
//#149566 prevent project firing squads to execute under project mutex. |
395 |
if (ProjectManager.mutex().isReadAccess() |
338 |
if (ProjectManager.mutex().isReadAccess() |
Lines 405-411
Link Here
|
405 |
return; |
348 |
return; |
406 |
} |
349 |
} |
407 |
problemReporter.clearReports(); //#167741 -this will trigger node refresh? |
350 |
problemReporter.clearReports(); //#167741 -this will trigger node refresh? |
408 |
MavenProject prj = loadOriginalMavenProject(); |
351 |
MavenProject prj = loadOriginalMavenProject(true); |
409 |
synchronized (this) { |
352 |
synchronized (this) { |
410 |
project = new SoftReference<MavenProject>(prj); |
353 |
project = new SoftReference<MavenProject>(prj); |
411 |
} |
354 |
} |