package bluej.stride.framedjava.elements;

import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

import threadchecker.OnThread;
import threadchecker.Tag;
import bluej.stride.framedjava.frames.CodeFrame;
import bluej.stride.generic.FrameCanvas;

public abstract class ContainerCodeElement
extends CodeElement{    
   public abstract List childrenUpTo(CodeElement c);
            
   @OnThread(Tag.FX)
   
   private static  Stream streamCodeFrame(FrameCanvas canvas, Function<CodeElement, Stream<T>> f)
   {
      return canvas.getBlocksSubtype(CodeFrame.class).stream()
      .map(CodeFrame::getCode)
      .flatMap(f);     
      }
    
   
   
   public List getDeclaredVariablesWithin(CodeElement child)
   {
      return Collections.emptyList();     
      }
    
   
   
   public TopLevelCodeElement getTopLevelElement()
   {        
      return null;     
      }
    
   
   
   public MethodWithBodyElement getMethodElement()
   {        
      return null;     
      }
    
   
   
   public abstract Stream streamContained();
    
   
   
   protected static Stream streamContained(List<CodeElement> els)
   {
      if (els == null) {
         return Stream.empty();         
         }
      return els.stream().flatMap(el -> Stream.concat(Stream.of(el), el.streamContained()));     
      } 
   }
top, use, map, abstract class ContainerCodeElement

.   childrenUpTo
.   streamCodeFrame
.   getDeclaredVariablesWithin
.   getTopLevelElement
.   getMethodElement
.   streamContained
.   streamContained




62 neLoCode + 0 LoComm