001package daikon.tools.runtimechecker;
002
003import daikon.tools.jtb.Ast;
004import java.util.ArrayList;
005import java.util.List;
006import jtb.syntaxtree.*;
007import org.checkerframework.checker.nullness.qual.NonNull;
008
009/** Represents a set of classes created by the instrumenter to check invariants. */
010public class CheckerClasses {
011
012  protected List<CheckerClass> classes = new ArrayList<>();
013
014  public void addCheckerClass(ClassOrInterfaceBody clazz) {
015    classes.add(new CheckerClass(clazz));
016  }
017
018  public List<CheckerClass> getCheckerClasses() {
019    return classes;
020  }
021
022  @SuppressWarnings("interning")
023  public void addDeclaration(ClassOrInterfaceBody clazz, StringBuilder decl) {
024
025    for (CheckerClass c : classes) {
026      if (c.fclassbody == clazz) {
027        c.addDeclaration(decl);
028      }
029    }
030  }
031
032  public void addDeclaration(ConstructorDeclaration clazz, StringBuilder decl) {
033
034    @SuppressWarnings(
035        "nullness") // application invariant: a constructor is always in a class or interface
036    @NonNull ClassOrInterfaceBody body =
037        (ClassOrInterfaceBody) Ast.getParent(ClassOrInterfaceBody.class, clazz);
038    addDeclaration(body, decl);
039  }
040
041  public void addDeclaration(MethodDeclaration clazz, StringBuilder decl) {
042
043    @SuppressWarnings(
044        "nullness") // application invariant: a method is always in a class or interface
045    @NonNull ClassOrInterfaceBody body =
046        (ClassOrInterfaceBody) Ast.getParent(ClassOrInterfaceBody.class, clazz);
047    addDeclaration(body, decl);
048  }
049}