mbien commented on code in PR #6789:
URL: https://github.com/apache/netbeans/pull/6789#discussion_r1423488025
##########
java/maven/src/org/netbeans/modules/maven/classpath/AbstractProjectClassPathImpl.java:
##########
@@ -54,13 +55,18 @@ public abstract class AbstractProjectClassPathImpl
implements ClassPathImplement
protected AbstractProjectClassPathImpl(NbMavenProjectImpl proj) {
project = proj;
+ LOGGER.log(Level.FINER, "Creating {0} for project {1}, with original
{2}", new Object[] { getClass(), proj, proj.getOriginalMavenProjectOrNull() });
//TODO make weak or remove the listeners as well??
NbMavenProject.addPropertyChangeListener(proj, new
PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
//explicitly listing both RESOURCE and PROJECT properties,
it's unclear if both are required but since some other places call
addWatchedPath but don't listen it's likely required
if (NbMavenProject.PROP_RESOURCE.equals(evt.getPropertyName())
|| NbMavenProject.PROP_PROJECT.equals(evt.getPropertyName())) {
+ MavenProject mp = project.getOriginalMavenProjectOrNull();
+ LOGGER.log(Level.FINE, "{0} got change {1} from project:
{2} with maven project {3}", new Object[] { getClass(), evt.getPropertyName(),
project,
+ System.identityHashCode(mp == null ? this : null) });
Review Comment:
is this meant to be:`System.identityHashCode(mp == null ? this : mp)`? or
simply `System.identityHashCode(mp)`?
(unfortunately `Objects.toIdentityString` requires later API levels which
would be useful here I think)
##########
java/maven/src/org/netbeans/modules/maven/problems/MavenModelProblemsProvider.java:
##########
@@ -179,25 +177,50 @@ private Pair<Collection<ProjectProblem>, Boolean>
doGetProblems1(boolean sync) {
}
MavenProject o = analysedProject.get();
- LOG.log(Level.FINER, "Called getProblems for {0}, analysed = {1},
current = {2}",
- new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
//for non changed project models, no need to recalculate, always
return the cached value
- Object wasprocessed =
updatedPrj.getContextValue(MavenModelProblemsProvider.class.getName());
- if (o == updatedPrj && wasprocessed != null) {
- Pair<Collection<ProjectProblem>, Boolean> cached =
problemsCache;
- LOG.log(Level.FINER, "getProblems: Project was processed,
cached is: {0}", cached);
- if (cached != null) {
- return cached;
+ if (pending.isDone()) {
+ try {
+ // cannot block, if .isDone().
+ MavenProject updatedPrj = pending.get();
+ LOG.log(Level.FINER, "Called getProblems for {0}, analysed
= {1}, current = {2}",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
Review Comment:
could simply use `System.identityHashCode(o)` since it already returns `0`
if the argument is null.
##########
java/maven/src/org/netbeans/modules/maven/problems/MavenModelProblemsProvider.java:
##########
@@ -179,25 +177,50 @@ private Pair<Collection<ProjectProblem>, Boolean>
doGetProblems1(boolean sync) {
}
MavenProject o = analysedProject.get();
- LOG.log(Level.FINER, "Called getProblems for {0}, analysed = {1},
current = {2}",
- new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
//for non changed project models, no need to recalculate, always
return the cached value
- Object wasprocessed =
updatedPrj.getContextValue(MavenModelProblemsProvider.class.getName());
- if (o == updatedPrj && wasprocessed != null) {
- Pair<Collection<ProjectProblem>, Boolean> cached =
problemsCache;
- LOG.log(Level.FINER, "getProblems: Project was processed,
cached is: {0}", cached);
- if (cached != null) {
- return cached;
+ if (pending.isDone()) {
+ try {
+ // cannot block, if .isDone().
+ MavenProject updatedPrj = pending.get();
+ LOG.log(Level.FINER, "Called getProblems for {0}, analysed
= {1}, current = {2}",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
+ Object wasprocessed =
updatedPrj.getContextValue(MavenModelProblemsProvider.class.getName());
+ if (o == updatedPrj && wasprocessed != null) {
+ Pair<Collection<ProjectProblem>, Boolean> cached =
problemsCache;
+ LOG.log(Level.FINER, "getProblems: Project was
processed, cached is: {0}", cached);
+ if (cached != null) {
+ return cached;
+ }
+ }
+ } catch (ExecutionException | InterruptedException ex) {
+ LOG.log(Level.FINER, "Project load for {0} threw exception
{1}", new Object[] { project, ex.getMessage() });
+ LOG.log(Level.FINER, "Stacktrace:", ex);
}
- }
+ } else {
+ LOG.log(Level.FINER, "Called getProblems for {0}, analysed =
{1}, current = PENDING",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o) });
+ }
SanityBuildAction sba = cachedSanityBuild.get();
if (sba != null && sba.getPendingResult() == null) {
cachedSanityBuild.clear();
}
+
+ // PENDING: think if .thenApplyAsync would be more useful.
c = () -> {
// double check, the project may be invalidated during the
time.
- MavenProject prj =
((NbMavenProjectImpl)project).getFreshOriginalMavenProject();
+ MavenProject prj;
+
+ try {
+ prj =
((NbMavenProjectImpl)project).getFreshOriginalMavenProject().get();
+ LOG.log(Level.FINER, "Evaluating getProblems for {0},
analysed = {1}, current = {2}",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(prj) });
Review Comment:
same here
##########
java/maven/src/org/netbeans/modules/maven/problems/MavenModelProblemsProvider.java:
##########
@@ -179,25 +177,50 @@ private Pair<Collection<ProjectProblem>, Boolean>
doGetProblems1(boolean sync) {
}
MavenProject o = analysedProject.get();
- LOG.log(Level.FINER, "Called getProblems for {0}, analysed = {1},
current = {2}",
- new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
//for non changed project models, no need to recalculate, always
return the cached value
- Object wasprocessed =
updatedPrj.getContextValue(MavenModelProblemsProvider.class.getName());
- if (o == updatedPrj && wasprocessed != null) {
- Pair<Collection<ProjectProblem>, Boolean> cached =
problemsCache;
- LOG.log(Level.FINER, "getProblems: Project was processed,
cached is: {0}", cached);
- if (cached != null) {
- return cached;
+ if (pending.isDone()) {
+ try {
+ // cannot block, if .isDone().
+ MavenProject updatedPrj = pending.get();
+ LOG.log(Level.FINER, "Called getProblems for {0}, analysed
= {1}, current = {2}",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o), System.identityHashCode(updatedPrj) });
+ Object wasprocessed =
updatedPrj.getContextValue(MavenModelProblemsProvider.class.getName());
+ if (o == updatedPrj && wasprocessed != null) {
+ Pair<Collection<ProjectProblem>, Boolean> cached =
problemsCache;
+ LOG.log(Level.FINER, "getProblems: Project was
processed, cached is: {0}", cached);
+ if (cached != null) {
+ return cached;
+ }
+ }
+ } catch (ExecutionException | InterruptedException ex) {
+ LOG.log(Level.FINER, "Project load for {0} threw exception
{1}", new Object[] { project, ex.getMessage() });
+ LOG.log(Level.FINER, "Stacktrace:", ex);
}
- }
+ } else {
+ LOG.log(Level.FINER, "Called getProblems for {0}, analysed =
{1}, current = PENDING",
+ new Object[] { project, o == null ? 0 :
System.identityHashCode(o) });
Review Comment:
same here
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists