Class PluginsContainer.PluginsSpliterator<T>

  • All Implemented Interfaces:
    java.util.function.Consumer<java.lang.Object>, java.util.Spliterator<T>
    Enclosing class:
    PluginsContainer

    final class PluginsContainer.PluginsSpliterator<T>
    extends java.util.Spliterators.AbstractSpliterator<T>
    implements java.util.function.Consumer<java.lang.Object>
    A spliterator of plugins of the specified type ordered by the processor hierarchy.

    The supplied plugins may have duplicates if the same plugin is added into different processors in the hierarchy.

    We supply the parent's plugins after this container's plugins so that there is a hierarchical ordering where this container's plugins come before the parent's plugins. Then PluginsContainer.getPlugin(Class) will select a matching plugin from this container, if it exists, versus one from the parent.

    • Nested Class Summary

      • Nested classes/interfaces inherited from interface java.util.Spliterator

        java.util.Spliterator.OfDouble, java.util.Spliterator.OfInt, java.util.Spliterator.OfLong, java.util.Spliterator.OfPrimitive<T extends java.lang.Object,​T_CONS extends java.lang.Object,​T_SPLITR extends java.util.Spliterator.OfPrimitive<T,​T_CONS,​T_SPLITR>>
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.Spliterator<T> parent  
      private java.lang.Object plugin  
      private java.util.Spliterator<T> provider  
      private java.util.Spliterator<java.lang.Object> self  
      private java.lang.Class<T> type  
      • Fields inherited from interface java.util.Spliterator

        CONCURRENT, DISTINCT, IMMUTABLE, NONNULL, ORDERED, SIZED, SORTED, SUBSIZED
    • Constructor Summary

      Constructors 
      Constructor Description
      PluginsSpliterator​(java.lang.Class<T> type)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void accept​(java.lang.Object plugin)  
      void forEachRemaining​(java.util.function.Consumer<? super T> action)  
      private java.util.Spliterator<T> parent()
      Defer creating the parent spliterator since we may not need it if the stream operation short circuits such as findFirst.
      boolean tryAdvance​(java.util.function.Consumer<? super T> action)  
      • Methods inherited from class java.util.Spliterators.AbstractSpliterator

        characteristics, estimateSize, trySplit
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.function.Consumer

        andThen
      • Methods inherited from interface java.util.Spliterator

        getComparator, getExactSizeIfKnown, hasCharacteristics
    • Field Detail

      • type

        private final java.lang.Class<T> type
      • self

        private final java.util.Spliterator<java.lang.Object> self
      • provider

        private java.util.Spliterator<T> provider
      • parent

        private java.util.Spliterator<T> parent
      • plugin

        private java.lang.Object plugin
    • Constructor Detail

      • PluginsSpliterator

        PluginsSpliterator​(java.lang.Class<T> type)
    • Method Detail

      • parent

        private java.util.Spliterator<T> parent()
        Defer creating the parent spliterator since we may not need it if the stream operation short circuits such as findFirst.
      • tryAdvance

        public boolean tryAdvance​(java.util.function.Consumer<? super T> action)
        Specified by:
        tryAdvance in interface java.util.Spliterator<T>
      • forEachRemaining

        public void forEachRemaining​(java.util.function.Consumer<? super T> action)
        Specified by:
        forEachRemaining in interface java.util.Spliterator<T>
      • accept

        public void accept​(java.lang.Object plugin)
        Specified by:
        accept in interface java.util.function.Consumer<T>