public synchronized void deregister()

in core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java [77:125]


    public synchronized void deregister(Class<? extends NameMapper> classToDeregister)
    {
        boolean subNameMapper = false;

        if (classToDeregister != null && classToDeregister.isAnnotationPresent(Nested.class))
        {
            subNameMapper = true;
        }

        List<NameMapper<T>> nameMapperList = getNameMapperList();
        List<NameMapper<T>> changeableList;
        if (!subNameMapper && (getNameMapperList() instanceof CopyOnWriteArrayList))
        {
            // If we have a CopyOnWriteArrayList, we can't remove it so copy it to a temporary list
            changeableList = new ArrayList<NameMapper<T>>(nameMapperList);
        }
        else
        {
            changeableList = nameMapperList;
        }
        Iterator<NameMapper<T>> nameMapperIterator = changeableList.iterator();
        while (nameMapperIterator.hasNext())
        {
            if (subNameMapper)
            {
                NameMapper<T> nameMapper = nameMapperIterator.next();
                if (nameMapper instanceof SubMapperAwareNameMapper)
                {
                    ((SubMapperAwareNameMapper) nameMapper).removeNameMapper(classToDeregister);
                }
            }
            else
            {
                if (nameMapperIterator.next().getClass().getName().equals(classToDeregister.getName()))
                {
                    nameMapperIterator.remove();
                    //don't break - e.g. to deregister all wrappers...
                    //break;
                }
            }
            if (!subNameMapper && (getNameMapperList() instanceof CopyOnWriteArrayList))
            {
                // Set the correct content back in the CopyOnWriteArrayList
                getNameMapperList().clear();
                getNameMapperList().addAll(changeableList);
            }

        }
    }