--- FreeformEvaluator.java +++ FreeformEvaluator.java @@ -92,14 +92,15 @@ } private PropertyEvaluator initEval() throws IOException { + PropertyProvider preprovider = project.helper().getStockPropertyPreprovider(); + List defs = new ArrayList(); + synchronized (intermediateEvaluators) { // Stop listening to old intermediate evaluators. Iterator ieIt = intermediateEvaluators.iterator(); while (ieIt.hasNext()) { ieIt.next().removePropertyChangeListener(this); ieIt.remove(); } - PropertyProvider preprovider = project.helper().getStockPropertyPreprovider(); - List defs = new ArrayList(); Element genldata = project.getPrimaryConfigurationData(); Element properties = Util.findElement(genldata, "properties", FreeformProjectType.NS_GENERAL); // NOI18N if (properties != null) { @@ -125,6 +126,7 @@ } } } + } return PropertyUtils.sequentialPropertyEvaluator(preprovider, defs.toArray(new PropertyProvider[defs.size()])); } @@ -173,7 +175,11 @@ public void propertyChange(PropertyChangeEvent propertyChangeEvent) { Object source = propertyChangeEvent.getSource(); assert source instanceof PropertyEvaluator : source; - if (intermediateEvaluators.contains(source)) { + boolean contains; + synchronized (intermediateEvaluators) { + contains = intermediateEvaluators.contains(source); + } + if (contains) { // A may have changed location. Generally need to rebuild the list of definers. fireAnyChange(); } else {