package bluej.stride.framedjava.ast;

import java.util.stream.Stream;

import bluej.stride.framedjava.errors.EmptyError;
import bluej.stride.framedjava.errors.SyntaxCodeError;
import bluej.stride.framedjava.errors.UnneededSemiColonError;
import bluej.stride.framedjava.slots.ExpressionSlot;
import bluej.stride.slots.TextSlot;

public class NameDefSlotFragment
extends TextSlotFragment{    
   private TextSlot<NameDefSlotFragment> slot;

   
   public NameDefSlotFragment(String content, TextSlot<NameDefSlotFragment> slot)
   {
      super(content);
       
      this.slot = slot;     
      }
    
   
   public NameDefSlotFragment(String content)
   {
      this(content, null);     
      }
    
   
   
   public NameDefSlotFragment(StringSlotFragment f)
   {
      this(f.getContent());     
      }

   
   @Override
   
   public String getJavaCode(Destination dest, ExpressionSlot<?> completing, Parser.DummyNameGenerator dummyNameGenerator)
   {
      if (!dest.substitute() || (content != null && Parser.parseableAsNameDef(content)))
           
      return content;
       
      else{ 
         
         return "invalid#";
         }     
      }
    
   
   @Override
   
   public Stream findEarlyErrors()
   {
      if (content != null && content.isEmpty())
           
      return Stream.of(new EmptyError(this, "Name cannot be empty"));
      else if (content != null && content.endsWith(";"))
           
      
      return Stream.of(new UnneededSemiColonError(this, () -> getSlot().setText(content.substring(0, content.length() - 1))));
      else if (content == null || !Parser.parseableAsNameDef(content))
           
      return Stream.of(new SyntaxCodeError(this, "Invalid name"));
        
       
      
      return Stream.empty();     
      } 

   
   @Override
   
   public TextSlot getSlot()
   {        
      return slot;     
      }

   
   @Override
   
   public void registerSlot(TextSlot slot)
   {
      if (this.slot == null)
           
      this.slot = slot;     
      } 
   }
top, use, map, class NameDefSlotFragment

.   NameDefSlotFragment
.   NameDefSlotFragment
.   NameDefSlotFragment
.   getJavaCode
.   findEarlyErrors
.   getSlot
.   registerSlot




88 neLoCode + 0 LoComm