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}