1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.databind.codegen.typeinfo;
7   
8   import com.squareup.javapoet.AnnotationSpec;
9   import com.squareup.javapoet.FieldSpec;
10  import com.squareup.javapoet.TypeSpec;
11  
12  import java.util.Set;
13  
14  import dev.metaschema.core.model.IModelDefinition;
15  import dev.metaschema.core.model.IModelInstanceAbsolute;
16  import dev.metaschema.databind.codegen.typeinfo.def.IAssemblyDefinitionTypeInfo;
17  import edu.umd.cs.findbugs.annotations.NonNull;
18  
19  public interface IModelInstanceTypeInfo extends IInstanceTypeInfo {
20  
21    @Override
22    @NonNull
23    IAssemblyDefinitionTypeInfo getParentTypeInfo();
24  
25    @Override
26    IModelInstanceAbsolute getInstance();
27  
28    /**
29     * Generate the Metaschema binding annotation for this instance.
30     * <p>
31     * This method uses a builder so child classes can add to the builder as needed.
32     *
33     * @param typeBuilder
34     *          the class builder the field is on
35     * @param fieldBuilder
36     *          the field builder the annotation is on
37     * @param annotation
38     *          if not {@code null} will seed the annotation to build
39     *
40     * @return a builder for the annotation
41     */
42    @NonNull
43    Set<IModelDefinition> buildBindingAnnotation(
44        @NonNull TypeSpec.Builder typeBuilder,
45        @NonNull FieldSpec.Builder fieldBuilder,
46        @NonNull AnnotationSpec.Builder annotation);
47  }