Clover coverage report - picocontainer - 1.2-beta-1
Coverage timestamp: Sun May 29 2005 14:29:04 BST
file stats: LOC: 120   Methods: 7
NCLOC: 67   Classes: 2
 
 Source file Conditionals Statements Methods TOTAL
VerifyingVisitor.java 100% 100% 100% 100%
coverage
 1    /*****************************************************************************
 2    * Copyright (C) PicoContainer Organization. All rights reserved. *
 3    * ------------------------------------------------------------------------- *
 4    * The software in this package is published under the terms of the BSD *
 5    * style license a copy of which has been included with this distribution in *
 6    * the LICENSE.txt file. *
 7    *****************************************************************************/
 8    package org.picocontainer.defaults;
 9   
 10    import org.picocontainer.ComponentAdapter;
 11    import org.picocontainer.Parameter;
 12    import org.picocontainer.PicoContainer;
 13    import org.picocontainer.PicoVerificationException;
 14    import org.picocontainer.PicoVisitor;
 15   
 16    import java.util.ArrayList;
 17    import java.util.HashSet;
 18    import java.util.List;
 19    import java.util.Set;
 20   
 21   
 22    /**
 23    * Visitor to verify {@link PicoContainer}instances. The visitor walks down the logical
 24    * container hierarchy.
 25    *
 26    * @author Jörg Schaible
 27    * @since 1.1
 28    */
 29    public class VerifyingVisitor
 30    extends AbstractPicoVisitor {
 31   
 32    private final List nestedVerificationExceptions;
 33    private final Set verifiedComponentAdapters;
 34    private final PicoVisitor componentAdapterCollector;
 35    private PicoContainer currentPico;
 36   
 37  30 public VerifyingVisitor() {
 38  30 nestedVerificationExceptions = new ArrayList();
 39  30 verifiedComponentAdapters = new HashSet();
 40  30 componentAdapterCollector = new ComponentAdapterCollector();
 41    }
 42   
 43    /**
 44    * Traverse through all components of the {@link PicoContainer} hierarchy and verify the
 45    * components.
 46    *
 47    * @throws PicoVerificationException if some components could not be verified.
 48    * @see org.picocontainer.PicoVisitor#traverse(java.lang.Object)
 49    */
 50  30 public Object traverse(Object node) throws PicoVerificationException {
 51  30 nestedVerificationExceptions.clear();
 52  30 verifiedComponentAdapters.clear();
 53  30 try {
 54  30 super.traverse(node);
 55  24 if (!nestedVerificationExceptions.isEmpty()) {
 56  14 throw new PicoVerificationException(new ArrayList(nestedVerificationExceptions));
 57    }
 58    } finally {
 59  30 nestedVerificationExceptions.clear();
 60  30 verifiedComponentAdapters.clear();
 61    }
 62  10 return Void.TYPE;
 63    }
 64   
 65    /**
 66    * {@inheritDoc}
 67    *
 68    * @see org.picocontainer.PicoVisitor#visitContainer(org.picocontainer.PicoContainer)
 69    */
 70  22 public void visitContainer(PicoContainer pico) {
 71  22 checkTraversal();
 72  20 currentPico = pico;
 73    }
 74   
 75    /**
 76    * {@inheritDoc}
 77    *
 78    * @see org.picocontainer.PicoVisitor#visitComponentAdapter(org.picocontainer.ComponentAdapter)
 79    */
 80  94 public void visitComponentAdapter(ComponentAdapter componentAdapter) {
 81  94 checkTraversal();
 82  94 if (!verifiedComponentAdapters.contains(componentAdapter)) {
 83  40 try {
 84  40 componentAdapter.verify(currentPico);
 85    } catch (RuntimeException e) {
 86  26 nestedVerificationExceptions.add(e);
 87    }
 88  40 componentAdapter.accept(componentAdapterCollector);
 89    }
 90    }
 91   
 92    /**
 93    * {@inheritDoc}
 94    *
 95    * @see org.picocontainer.PicoVisitor#visitParameter(org.picocontainer.Parameter)
 96    */
 97  4 public void visitParameter(Parameter parameter) {
 98  4 checkTraversal();
 99    }
 100   
 101    private class ComponentAdapterCollector
 102    implements PicoVisitor {
 103    ///CLOVER:OFF
 104    public Object traverse(Object node) {
 105    return null;
 106    }
 107   
 108    public void visitContainer(PicoContainer pico) {
 109    }
 110   
 111    ///CLOVER:ON
 112   
 113  94 public void visitComponentAdapter(ComponentAdapter componentAdapter) {
 114  94 verifiedComponentAdapters.add(componentAdapter);
 115    }
 116   
 117  4 public void visitParameter(Parameter parameter) {
 118    }
 119    }
 120    }