package bluej.stride.framedjava.ast;

import java.security.InvalidParameterException;
import java.util.stream.Stream;

import bluej.stride.framedjava.elements.CodeElement;
import bluej.stride.framedjava.errors.CodeError;
import bluej.stride.framedjava.errors.ErrorShower;
import bluej.stride.framedjava.errors.SyntaxCodeError;
import bluej.stride.framedjava.slots.ExpressionSlot;
import bluej.stride.generic.Frame;
import bluej.stride.slots.EditableSlot;
import threadchecker.OnThread;
import threadchecker.Tag;

public class FrameFragment
extends JavaFragment{    
   private Frame frame;
   
   private final String content;
   
   private final CodeElement element;
    
   
   public FrameFragment(Frame frame, CodeElement src, String content)
   {        
      this.frame = frame;
       
      this.content = content;
       
      this.element = src;
        
      if (content == null)
       {            
         throw new InvalidParameterException("FrameFragment content cannot be null");         
         }

      else if (content.contains("\n"))
       {            
         throw new IllegalStateException("FrameFragment content contains newline");         
         }     
      }
    
   
   @Override
   
   protected String getJavaCode(Destination dest, ExpressionSlot<?> completing, Parser.DummyNameGenerator dummyNameGenerator)
   {        
      return content;     
      }

   
   @Override
   
   public Stream findEarlyErrors()
   {
      return Stream.empty();     
      }

   
   @Override
   
   public void addError(CodeError codeError)
   {
      frame.addError(codeError);     
      }

   
   @Override
   
   public ErrorRelation checkCompileError(int startLine, int startColumn, int endLine, int endColumn)
   {
      if (frame == null)
           
      return ErrorRelation.CANNOT_SHOW;
       
      else
       {            
         
         ErrorRelation errorRelation = super.checkCompileError(startLine, startColumn, endLine, endColumn);
         if (errorRelation == ErrorRelation.OVERLAPS_FRAGMENT)
           {                
            return ErrorRelation.OVERLAPS_FRAGMENT_FALLBACK;             
            }
           

         else
           {                
            return errorRelation;             
            }         
         }     
      }

   
   @Override
   @OnThread(Tag.FX)
   
   protected JavaFragment getCompileErrorRedirect()
   {
      EditableSlot slot = frame.getErrorShowRedirect();
      if (slot != null)
      return slot.getSlotElement();
       
      else{ return this;
         }     
      }

   
   @Override
   @OnThread(Tag.FX)
   
   public ErrorShower getErrorShower()
   {
      EditableSlot slot = frame.getErrorShowRedirect();
      if (slot != null)
           
      return slot;
       
      else{ return frame;
         }     
      }

   
   public void setFrame(Frame frame)
   {        
      this.frame = frame;     
      }

   
   public CodeElement getElement()
   {        
      return element;     
      } 
   }
top, use, map, class FrameFragment

.   FrameFragment
.   getJavaCode
.   findEarlyErrors
.   addError
.   checkCompileError
.   getCompileErrorRedirect
.   getErrorShower
.   setFrame
.   getElement




135 neLoCode + 0 LoComm