Ticket #13948: validator_seems_to_hang_3.patch

File validator_seems_to_hang_3.patch, 2.1 KB (added by GerdP, 7 years ago)
  • src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java

     
    104104                removeKeyListener(keyListener);
    105105            }
    106106        }
     107        addDataSetListener();
     108    }
     109
     110    private void addDataSetListener() {
     111        if (getErrors().isEmpty())
     112            return;
    107113        DataSet ds = Main.getLayerManager().getEditDataSet();
    108114        if (ds != null) {
    109115            ds.addDataSetListener(this);
     
    302308     */
    303309    public final void setErrorList(List<TestError> errors) {
    304310        this.errors = errors;
     311        addDataSetListener();
    305312        if (isVisible()) {
    306313            buildTree();
    307314        }
     
    320327                errors.add(error);
    321328            }
    322329        }
     330        addDataSetListener();
    323331        if (isVisible()) {
    324332            buildTree();
    325333        }
     
    436444    }
    437445
    438446    @Override public void primitivesRemoved(PrimitivesRemovedEvent event) {
    439         // Remove purged primitives (fix #8639)
    440         for (TestError err : errors) {
    441             try {
    442                 err.getPrimitives().removeAll(event.getPrimitives());
    443             } catch (UnsupportedOperationException e) {
    444                 if (event.getPrimitives().containsAll(err.getPrimitives())) {
    445                     err.getPrimitives().clear();
    446                 } else {
    447                     Main.warn(e, "Unable to remove primitives from "+err+'.');
    448                 }
    449             }
    450         }
     447        // Remove errors which list of primitives refer to purged primitives (fix #8639)
     448        setErrorList(errors.stream()
     449                .filter(err -> event.getPrimitives().stream().noneMatch(prim -> err.getPrimitives().contains(prim)))
     450                .collect(Collectors.toList()));
    451451    }
    452452
    453453    @Override public void primitivesAdded(PrimitivesAddedEvent event) {