# HG changeset patch
# Parent 468666ae23e827cf0b94cd7419a357f35d86e4f3
diff --git a/java.project/nbproject/project.xml b/java.project/nbproject/project.xml
--- a/java.project/nbproject/project.xml
+++ b/java.project/nbproject/project.xml
@@ -160,7 +160,7 @@
1
- 1.60
+ 1.63
diff --git a/java.project/src/org/netbeans/modules/java/project/ProjectProblemsProviders.java b/java.project/src/org/netbeans/modules/java/project/ProjectProblemsProviders.java
--- a/java.project/src/org/netbeans/modules/java/project/ProjectProblemsProviders.java
+++ b/java.project/src/org/netbeans/modules/java/project/ProjectProblemsProviders.java
@@ -43,7 +43,6 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
import java.io.File;
import java.io.IOException;
import java.lang.ref.Reference;
@@ -105,6 +104,7 @@
import org.netbeans.spi.project.ui.ProjectProblemResolver;
import org.netbeans.spi.project.ui.ProjectProblemsProvider.Result;
import org.netbeans.spi.project.ui.support.ProjectChooser;
+import org.netbeans.spi.project.ui.support.ProjectProblemsProviderSupport;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.modules.SpecificationVersion;
@@ -128,7 +128,7 @@
throw new IllegalStateException(String.format("The %s cannot be instantiated.",this.getClass().getName())); //NOI18N
}
-
+
public static ProjectProblemsProvider createReferenceProblemProvider(
@NonNull final AntProjectHelper projectHelper,
@@ -140,7 +140,7 @@
pp.attachListeners();
return pp;
}
-
+
public static ProjectProblemsProvider createPlatformVersionProblemProvider(
@NonNull final AntProjectHelper helper,
@NonNull final PropertyEvaluator evaluator,
@@ -551,7 +551,7 @@
}
//
-
+
//
private static abstract class BaseResolver implements ProjectProblemResolver {
@@ -566,7 +566,7 @@
this.type = type;
this.id = id;
}
-
+
@Override
public final int hashCode() {
int result = 17;
@@ -574,7 +574,7 @@
result = 31 * result + id.hashCode();
return result;
}
-
+
@Override
public final boolean equals(@NullAllowed final Object other) {
if (!(other instanceof BaseResolver)) {
@@ -611,7 +611,7 @@
}
}
-
+
private static class LibraryResolver extends BaseResolver {
private final Callable definer;
@@ -702,7 +702,7 @@
}
return new Object[] {original, null};
}
- }
+ }
private static class VariableResolver extends BaseResolver {
VariableResolver(@NonNull final RefType type, @NonNull final String id) {
@@ -996,13 +996,7 @@
//
private static final class ReferenceProblemProviderImpl implements ProjectProblemsProvider, PropertyChangeListener {
- private final PropertyChangeSupport support = new PropertyChangeSupport(this);
-
- private final Object problemsLock = new Object();
- //@GuardedBy("problemsLock")
- private Collection extends ProjectProblem> problems;
- //@GuardedBy("problemsLock")
- private long eventId;
+ private final ProjectProblemsProviderSupport problemsProviderSupport = new ProjectProblemsProviderSupport(this);
private final AtomicBoolean listenersInitialized = new AtomicBoolean();
private final AntProjectHelper helper;
@@ -1035,46 +1029,33 @@
@Override
public void addPropertyChangeListener(@NonNull final PropertyChangeListener listener) {
Parameters.notNull("listener", listener); //NOI18N
- support.addPropertyChangeListener(listener);
+ problemsProviderSupport.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(@NonNull final PropertyChangeListener listener) {
Parameters.notNull("listener", listener); //NOI18N
- support.removePropertyChangeListener(listener);
+ problemsProviderSupport.removePropertyChangeListener(listener);
}
@Override
public Collection extends ProjectProblem> getProblems() {
- Collection extends ProjectProblem> curProblems;
- long curEventId;
- synchronized (problemsLock) {
- curProblems = problems;
- curEventId = eventId;
- }
- if (curProblems != null) {
- return curProblems;
- }
- curProblems = ProjectManager.mutex().readAccess(
- new Mutex.Action>(){
- @Override
- public Collection extends ProjectProblem> run() {
- final Set newProblems = new LinkedHashSet();
- newProblems.addAll(getReferenceProblems(helper,eval,refHelper,refProps,false));
- newProblems.addAll(getPlatformProblems(eval,platformProps,false));
- return Collections.unmodifiableSet(newProblems);
- }
- });
- synchronized (problemsLock){
- if (curEventId == eventId) {
- //No canonical mapping needed
- problems = curProblems;
- } else if (problems != null) {
- curProblems = problems;
+ return problemsProviderSupport.getProblems(new ProjectProblemsProviderSupport.ProblemsCollector() {
+ @Override
+ public Collection extends ProjectProblemsProvider.ProjectProblem> collectProblems() {
+ Collection extends ProjectProblemsProvider.ProjectProblem> currentProblems = ProjectManager.mutex().readAccess(
+ new Mutex.Action>() {
+ @Override
+ public Collection extends ProjectProblem> run() {
+ final Set newProblems = new LinkedHashSet();
+ newProblems.addAll(getReferenceProblems(helper,eval,refHelper,refProps,false));
+ newProblems.addAll(getPlatformProblems(eval,platformProps,false));
+ return Collections.unmodifiableSet(newProblems);
+ }
+ });
+ return currentProblems;
}
- }
- assert curProblems != null;
- return curProblems;
+ });
}
@Override
@@ -1082,11 +1063,7 @@
if (LibraryManager.PROP_OPEN_LIBRARY_MANAGERS.equals(evt.getPropertyName())) {
addLibraryManagerListener();
}
- synchronized (problemsLock) {
- problems = null;
- eventId++;
- }
- support.firePropertyChange(PROP_PROBLEMS,null,null);
+ problemsProviderSupport.fireProblemsChange();
}
void attachListeners() {
@@ -1145,12 +1122,7 @@
private static final class PlatformVersionProblemProviderImpl implements ProjectProblemsProvider, PropertyChangeListener {
- private final PropertyChangeSupport support = new PropertyChangeSupport(this);
- private final Object problemsLock = new Object();
- //@GuardedBy("problemsLock")
- private Collection extends ProjectProblem> problems;
- //@GuardedBy("problemsLock")
- private long eventId;
+ private final ProjectProblemsProviderSupport problemsProviderSupport = new ProjectProblemsProviderSupport(this);
private final AtomicBoolean listenersInitialized = new AtomicBoolean();
private final AntProjectHelper helper;
@@ -1183,13 +1155,13 @@
@Override
public void addPropertyChangeListener(@NonNull final PropertyChangeListener listener) {
Parameters.notNull("listener", listener); //NOI18N
- support.addPropertyChangeListener(listener);
+ problemsProviderSupport.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(@NonNull final PropertyChangeListener listener) {
Parameters.notNull("listener", listener); //NOI18N
- support.removePropertyChangeListener(listener);
+ problemsProviderSupport.removePropertyChangeListener(listener);
}
@Override
@@ -1198,63 +1170,46 @@
"HINT_Invalid_JDK_Vernsion=The active project platform is an older version than it's required by project source/binary format."
})
public Collection extends ProjectProblem> getProblems() {
- Collection extends ProjectProblem> curProblems;
- long curEventId;
- synchronized (problemsLock) {
- curProblems = problems;
- curEventId = eventId;
- }
- if (curProblems != null) {
- return curProblems;
- }
- curProblems = ProjectManager.mutex().readAccess(
- new Mutex.Action>() {
- @Override
- public Collection extends ProjectProblem> run() {
- final JavaPlatform activePlatform = getActivePlatform();
- final SpecificationVersion platformVersion = activePlatform == null ?
- null:
- activePlatform.getSpecification().getVersion();
- final Collection invalidVersionProps = new ArrayList(versionProps.size());
- SpecificationVersion minVersion = getInvalidJdkVersion(
- platformVersion,
- invalidVersionProps);
- return minVersion != null ?
- Collections.singleton(ProjectProblem.createError(
- LBL_Invalid_JDK_Version(),
- HINT_Invalid_JDK_Vernsion(),
- new SourceTargetResolver(
- helper,
- hook,
- platformType,
- platformProp,
- invalidVersionProps,
- minVersion,
- platformVersion))) :
- Collections.emptySet();
- }
+ return problemsProviderSupport.getProblems(new ProjectProblemsProviderSupport.ProblemsCollector() {
+ @Override
+ public Collection extends ProjectProblemsProvider.ProjectProblem> collectProblems() {
+ Collection extends ProjectProblemsProvider.ProjectProblem> currentProblems = ProjectManager.mutex().readAccess(
+ new Mutex.Action>() {
+ @Override
+ public Collection extends ProjectProblem> run() {
+ final JavaPlatform activePlatform = getActivePlatform();
+ final SpecificationVersion platformVersion = activePlatform == null ?
+ null:
+ activePlatform.getSpecification().getVersion();
+ final Collection invalidVersionProps = new ArrayList(versionProps.size());
+ SpecificationVersion minVersion = getInvalidJdkVersion(
+ platformVersion,
+ invalidVersionProps);
+ return minVersion != null ?
+ Collections.singleton(ProjectProblem.createError(
+ LBL_Invalid_JDK_Version(),
+ HINT_Invalid_JDK_Vernsion(),
+ new SourceTargetResolver(
+ helper,
+ hook,
+ platformType,
+ platformProp,
+ invalidVersionProps,
+ minVersion,
+ platformVersion))) :
+ Collections.emptySet();
+ }
+ });
+ return currentProblems;
+ }
});
- synchronized (problemsLock) {
- if (curEventId == eventId) {
- //No canonical mapping needed
- problems = curProblems;
- } else if (problems != null) {
- curProblems = problems;
- }
- }
- assert curProblems != null;
- return curProblems;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
final String propName = evt.getPropertyName();
if (propName == null || platformProp.equals(propName) || versionProps.contains(propName)) {
- synchronized (problemsLock) {
- problems = null;
- eventId++;
- }
- support.firePropertyChange(PROP_PROBLEMS,null,null);
+ problemsProviderSupport.fireProblemsChange();
}
}
diff --git a/php.project/nbproject/project.xml b/php.project/nbproject/project.xml
--- a/php.project/nbproject/project.xml
+++ b/php.project/nbproject/project.xml
@@ -302,7 +302,7 @@
1
- 1.60
+ 1.63
diff --git a/php.project/src/org/netbeans/modules/php/project/problems/ProjectPropertiesProblemProvider.java b/php.project/src/org/netbeans/modules/php/project/problems/ProjectPropertiesProblemProvider.java
--- a/php.project/src/org/netbeans/modules/php/project/problems/ProjectPropertiesProblemProvider.java
+++ b/php.project/src/org/netbeans/modules/php/project/problems/ProjectPropertiesProblemProvider.java
@@ -43,12 +43,10 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.netbeans.modules.php.project.PhpProject;
@@ -60,6 +58,7 @@
import org.netbeans.modules.php.project.ui.customizer.CompositePanelProviderImpl;
import org.netbeans.modules.php.project.ui.customizer.PhpProjectProperties;
import org.netbeans.spi.project.ui.ProjectProblemsProvider;
+import org.netbeans.spi.project.ui.support.ProjectProblemsProviderSupport;
import org.openide.filesystems.FileAttributeEvent;
import org.openide.filesystems.FileChangeListener;
import org.openide.filesystems.FileEvent;
@@ -81,15 +80,10 @@
PhpProjectProperties.WEB_ROOT,
PhpProjectProperties.INCLUDE_PATH));
- private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+ final ProjectProblemsProviderSupport problemsProviderSupport = new ProjectProblemsProviderSupport(this);
private final PhpProject project;
- private final Object problemsLock = new Object();
private final PropertyChangeListener projectPropertiesListener = new ProjectPropertiesListener();
- // @GuardedBy("problemsLock")
- private Collection problems;
- // @GuardedBy("problemsLock")
- private long eventId;
private volatile FileChangeListener fileChangesListener = new FileChangesListener();
@@ -106,47 +100,31 @@
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(listener);
+ problemsProviderSupport.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(listener);
+ problemsProviderSupport.removePropertyChangeListener(listener);
}
@Override
public Collection extends ProjectProblem> getProblems() {
- Collection currentProblems;
- long curEventId;
- synchronized (problemsLock) {
- currentProblems = problems;
- curEventId = eventId;
- }
- if (currentProblems != null) {
- return currentProblems;
- }
- // check all problems
- currentProblems = new ArrayList();
- checkSrcDir(currentProblems);
- if (currentProblems.isEmpty()) {
- // check other problems only if sources are correct (other problems are fixed in customizer but customizer needs correct sources)
- checkTestDir(currentProblems);
- checkSeleniumDir(currentProblems);
- checkWebRoot(currentProblems);
- checkIncludePath(currentProblems);
- }
- if (currentProblems.isEmpty()) {
- currentProblems = Collections.emptySet();
- }
- synchronized (problemsLock) {
- if (curEventId == eventId) {
- problems = currentProblems;
- } else if (problems != null) {
- currentProblems = problems;
+ return problemsProviderSupport.getProblems(new ProjectProblemsProviderSupport.ProblemsCollector() {
+ @Override
+ public Collection collectProblems() {
+ Collection currentProblems = new ArrayList(5);
+ checkSrcDir(currentProblems);
+ if (currentProblems.isEmpty()) {
+ // check other problems only if sources are correct (other problems are fixed in customizer but customizer needs correct sources)
+ checkTestDir(currentProblems);
+ checkSeleniumDir(currentProblems);
+ checkWebRoot(currentProblems);
+ checkIncludePath(currentProblems);
+ }
+ return currentProblems;
}
- }
- assert currentProblems != null;
- return currentProblems;
+ });
}
@NbBundle.Messages({
@@ -156,7 +134,7 @@
"# {0} - project name",
"ProjectPropertiesProblemProvider.invalidSrcDir.dialog.title=Select Source Files for {0}"
})
- private void checkSrcDir(Collection currentProblems) {
+ void checkSrcDir(Collection currentProblems) {
File invalidDirectory = getInvalidDirectory(ProjectPropertiesSupport.getSourcesDirectory(project), PhpProjectProperties.SRC_DIR);
if (invalidDirectory != null) {
ProjectProblem problem = ProjectProblem.createError(
@@ -172,7 +150,7 @@
"# {0} - test dir path",
"ProjectPropertiesProblemProvider.invalidTestDir.description=The directory \"{0}\" does not exist and cannot be used for Test Files."
})
- private void checkTestDir(Collection currentProblems) {
+ void checkTestDir(Collection currentProblems) {
File invalidDirectory = getInvalidDirectory(ProjectPropertiesSupport.getTestDirectory(project, false), PhpProjectProperties.TEST_SRC_DIR);
if (invalidDirectory != null) {
ProjectProblem problem = ProjectProblem.createError(
@@ -190,7 +168,7 @@
"# {0} - project name",
"ProjectPropertiesProblemProvider.invalidSeleniumDir.dialog.title=Select Selenium Test Files for {0}"
})
- private void checkSeleniumDir(Collection currentProblems) {
+ void checkSeleniumDir(Collection currentProblems) {
File invalidDirectory = getInvalidDirectory(ProjectPropertiesSupport.getSeleniumDirectory(project, false), PhpProjectProperties.SELENIUM_SRC_DIR);
if (invalidDirectory != null) {
ProjectProblem problem = ProjectProblem.createError(
@@ -207,7 +185,7 @@
"# {0} - web root path",
"ProjectPropertiesProblemProvider.invalidWebRoot.description=The directory \"{0}\" does not exist and cannot be used for Web Root."
})
- private void checkWebRoot(Collection currentProblems) {
+ void checkWebRoot(Collection currentProblems) {
File webRoot = getWebRoot();
if (webRoot == null) {
// project fatally broken => do not validate web root
@@ -227,7 +205,7 @@
"ProjectPropertiesProblemProvider.invalidIncludePath.title=Invalid Include Path",
"ProjectPropertiesProblemProvider.invalidIncludePath.description=Some directories on project's Include Path are broken."
})
- private void checkIncludePath(Collection currentProblems) {
+ void checkIncludePath(Collection currentProblems) {
IncludePathSupport includePathSupport = new IncludePathSupport(ProjectPropertiesSupport.getPropertyEvaluator(project),
project.getRefHelper(), project.getHelper());
for (BasePathSupport.Item item : includePathSupport.itemsList(ProjectPropertiesSupport.getPropertyEvaluator(project).getProperty(PhpProjectProperties.INCLUDE_PATH))) {
@@ -305,14 +283,6 @@
}
}
- void fireProblemsChange() {
- synchronized (problemsLock) {
- problems = null;
- eventId++;
- }
- propertyChangeSupport.firePropertyChange(PROP_PROBLEMS, null, null);
- }
-
void propertiesChanged() {
// release the current listener
fileChangesListener = new FileChangesListener();
@@ -326,7 +296,7 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (WATCHED_PROPERTIES.contains(evt.getPropertyName())) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
propertiesChanged();
}
}
@@ -337,7 +307,7 @@
@Override
public void fileFolderCreated(FileEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override
@@ -352,12 +322,12 @@
@Override
public void fileDeleted(FileEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override
public void fileRenamed(FileRenameEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override
diff --git a/web.clientproject/nbproject/project.xml b/web.clientproject/nbproject/project.xml
--- a/web.clientproject/nbproject/project.xml
+++ b/web.clientproject/nbproject/project.xml
@@ -114,7 +114,7 @@
1
- 1.60
+ 1.63
diff --git a/web.clientproject/src/org/netbeans/modules/web/clientproject/problems/ProjectPropertiesProblemProvider.java b/web.clientproject/src/org/netbeans/modules/web/clientproject/problems/ProjectPropertiesProblemProvider.java
--- a/web.clientproject/src/org/netbeans/modules/web/clientproject/problems/ProjectPropertiesProblemProvider.java
+++ b/web.clientproject/src/org/netbeans/modules/web/clientproject/problems/ProjectPropertiesProblemProvider.java
@@ -43,12 +43,10 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.netbeans.modules.web.clientproject.ClientSideProject;
@@ -56,6 +54,7 @@
import org.netbeans.modules.web.clientproject.ui.customizer.CompositePanelProviderImpl;
import org.netbeans.spi.project.support.ant.PropertyEvaluator;
import org.netbeans.spi.project.ui.ProjectProblemsProvider;
+import org.netbeans.spi.project.ui.support.ProjectProblemsProviderSupport;
import org.openide.filesystems.FileAttributeEvent;
import org.openide.filesystems.FileChangeListener;
import org.openide.filesystems.FileEvent;
@@ -76,15 +75,10 @@
ClientSideProjectConstants.PROJECT_TEST_FOLDER,
ClientSideProjectConstants.PROJECT_CONFIG_FOLDER));
- private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+ final ProjectProblemsProviderSupport problemsProviderSupport = new ProjectProblemsProviderSupport(this);
private final ClientSideProject project;
- private final Object problemsLock = new Object();
private final PropertyChangeListener projectPropertiesListener = new ProjectPropertiesListener();
- // @GuardedBy("problemsLock")
- private Collection problems;
- // @GuardedBy("problemsLock")
- private long eventId;
private volatile FileChangeListener fileChangesListener = new FileChangesListener();
@@ -101,42 +95,26 @@
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(listener);
+ problemsProviderSupport.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(listener);
+ problemsProviderSupport.removePropertyChangeListener(listener);
}
@Override
public Collection extends ProjectProblem> getProblems() {
- Collection currentProblems;
- long curEventId;
- synchronized (problemsLock) {
- currentProblems = problems;
- curEventId = eventId;
- }
- if (currentProblems != null) {
- return currentProblems;
- }
- // check all problems
- currentProblems = new ArrayList();
- checkSiteRootDir(currentProblems);
- checkTestDir(currentProblems);
- checkConfigDir(currentProblems);
- if (currentProblems.isEmpty()) {
- currentProblems = Collections.emptySet();
- }
- synchronized (problemsLock) {
- if (curEventId == eventId) {
- problems = currentProblems;
- } else if (problems != null) {
- currentProblems = problems;
+ return problemsProviderSupport.getProblems(new ProjectProblemsProviderSupport.ProblemsCollector() {
+ @Override
+ public Collection collectProblems() {
+ Collection currentProblems = new ArrayList(3);
+ checkSiteRootDir(currentProblems);
+ checkTestDir(currentProblems);
+ checkConfigDir(currentProblems);
+ return currentProblems;
}
- }
- assert currentProblems != null;
- return currentProblems;
+ });
}
@NbBundle.Messages({
@@ -238,14 +216,6 @@
}
}
- void fireProblemsChange() {
- synchronized (problemsLock) {
- problems = null;
- eventId++;
- }
- propertyChangeSupport.firePropertyChange(PROP_PROBLEMS, null, null);
- }
-
void propertiesChanged() {
// release the current listener
fileChangesListener = new FileChangesListener();
@@ -259,7 +229,7 @@
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (WATCHED_PROPERTIES.contains(evt.getPropertyName())) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
propertiesChanged();
}
}
@@ -270,7 +240,7 @@
@Override
public void fileFolderCreated(FileEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override
@@ -285,12 +255,12 @@
@Override
public void fileDeleted(FileEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override
public void fileRenamed(FileRenameEvent fe) {
- fireProblemsChange();
+ problemsProviderSupport.fireProblemsChange();
}
@Override