test_class.file: server/src/test/java/io/spine/server/entity/storage/ScannerTest.java
test_class.identifier: ScannerTest
test_case.body: @Test
      @DisplayName("extract columns implemented via `EntityWithColumns` descendant")
      void extractImplementedColumns() {
          EntityClass<TaskViewProjection> entityClass = asEntityClass(TaskViewProjection.class);
          Scanner scanner = new Scanner(entityClass);
          ImmutableMap<ColumnName, InterfaceBasedColumn> columns =
                  scanner.interfaceBasedColumns();
  
          assertThat(columns).containsKey(ColumnName.of("name"));
          assertThat(columns).containsKey(ColumnName.of("estimate_in_days"));
          assertThat(columns).containsKey(ColumnName.of("status"));
          assertThat(columns).containsKey(ColumnName.of("due_date"));
      }
test_case.class_method_signature: ScannerTest.extractImplementedColumns()
test_case.full_signature: @Test @DisplayName("extract columns implemented via `EntityWithColumns` descendant") void extractImplementedColumns()
test_case.identifier: extractImplementedColumns
test_case.invocations: asEntityClass interfaceBasedColumns containsKey assertThat of containsKey assertThat of containsKey assertThat of containsKey assertThat of
test_case.modifiers: @Test @DisplayName("extract columns implemented via `EntityWithColumns` descendant")
test_case.parameters: ()
test_case.return: void
test_case.signature: void extractImplementedColumns()
focal_class.declarator: entityClass
focal_class.modifier: private final
focal_class.original_string: private final EntityClass<?> entityClass;
focal_class.type: EntityClass<?>
focal_class.var_name: entityClass
focal_class.declarator: columnsInterfaceBased
focal_class.modifier: private final
focal_class.original_string: private final boolean columnsInterfaceBased;
focal_class.type: boolean
focal_class.var_name: columnsInterfaceBased
focal_class.file: server/src/main/java/io/spine/server/entity/storage/Scanner.java
focal_class.identifier: Scanner
focal_class.class_method_signature: Scanner.Scanner(EntityClass<?> entityClass)
focal_class.full_signature:   Scanner(EntityClass<?> entityClass)
focal_class.identifier: Scanner
focal_class.parameters: (EntityClass<?> entityClass)
focal_class.signature:  Scanner(EntityClass<?> entityClass)
focal_class.class_method_signature: Scanner.systemColumns()
focal_class.full_signature:  ImmutableMap<ColumnName, SysColumn> systemColumns()
focal_class.identifier: systemColumns
focal_class.parameters: ()
focal_class.return: ImmutableMap<ColumnName, SysColumn>
focal_class.signature: ImmutableMap<ColumnName, SysColumn> systemColumns()
focal_class.class_method_signature: Scanner.addSystemColumns(Class<?> entityClazz,
                                           ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.full_signature: private static void addSystemColumns(Class<?> entityClazz,
                                           ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.identifier: addSystemColumns
focal_class.modifiers: private static
focal_class.parameters: (Class<?> entityClazz,
                                           ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.return: void
focal_class.signature: void addSystemColumns(Class<?> entityClazz,
                                           ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.class_method_signature: Scanner.addSystemColumn(Method method,
                                          ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.full_signature: private static void addSystemColumn(Method method,
                                          ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.identifier: addSystemColumn
focal_class.modifiers: private static
focal_class.parameters: (Method method,
                                          ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.return: void
focal_class.signature: void addSystemColumn(Method method,
                                          ImmutableMap.Builder<ColumnName, SysColumn> columns)
focal_class.class_method_signature: Scanner.simpleColumns()
focal_class.full_signature:  ImmutableMap<ColumnName, SimpleColumn> simpleColumns()
focal_class.identifier: simpleColumns
focal_class.parameters: ()
focal_class.return: ImmutableMap<ColumnName, SimpleColumn>
focal_class.signature: ImmutableMap<ColumnName, SimpleColumn> simpleColumns()
focal_class.class_method_signature: Scanner.addSimpleColumn(FieldDeclaration field,
                                   ImmutableMap.Builder<ColumnName, SimpleColumn> columns)
focal_class.full_signature: private void addSimpleColumn(FieldDeclaration field,
                                   ImmutableMap.Builder<ColumnName, SimpleColumn> columns)
focal_class.identifier: addSimpleColumn
focal_class.modifiers: private
focal_class.parameters: (FieldDeclaration field,
                                   ImmutableMap.Builder<ColumnName, SimpleColumn> columns)
focal_class.return: void
focal_class.signature: void addSimpleColumn(FieldDeclaration field,
                                   ImmutableMap.Builder<ColumnName, SimpleColumn> columns)
focal_class.class_method_signature: Scanner.interfaceBasedColumns()
focal_class.full_signature:  ImmutableMap<ColumnName, InterfaceBasedColumn> interfaceBasedColumns()
focal_class.identifier: interfaceBasedColumns
focal_class.parameters: ()
focal_class.return: ImmutableMap<ColumnName, InterfaceBasedColumn>
focal_class.signature: ImmutableMap<ColumnName, InterfaceBasedColumn> interfaceBasedColumns()
focal_class.class_method_signature: Scanner.addImplementedColumn(FieldDeclaration field,
                                        ImmutableMap.Builder<ColumnName, InterfaceBasedColumn> columns)
focal_class.full_signature: private void addImplementedColumn(FieldDeclaration field,
                                        ImmutableMap.Builder<ColumnName, InterfaceBasedColumn> columns)
focal_class.identifier: addImplementedColumn
focal_class.modifiers: private
focal_class.parameters: (FieldDeclaration field,
                                        ImmutableMap.Builder<ColumnName, InterfaceBasedColumn> columns)
focal_class.return: void
focal_class.signature: void addImplementedColumn(FieldDeclaration field,
                                        ImmutableMap.Builder<ColumnName, InterfaceBasedColumn> columns)
focal_class.class_method_signature: Scanner.getterOf(FieldDeclaration field, Class<?> clazz)
focal_class.full_signature: private static Method getterOf(FieldDeclaration field, Class<?> clazz)
focal_class.identifier: getterOf
focal_class.modifiers: private static
focal_class.parameters: (FieldDeclaration field, Class<?> clazz)
focal_class.return: Method
focal_class.signature: Method getterOf(FieldDeclaration field, Class<?> clazz)
focal_class.class_method_signature: Scanner.getterNotFound(FieldDeclaration field,
                                                          String getterName,
                                                          Class<?> clazz,
                                                          NoSuchMethodException e)
focal_class.full_signature: private static IllegalStateException getterNotFound(FieldDeclaration field,
                                                          String getterName,
                                                          Class<?> clazz,
                                                          NoSuchMethodException e)
focal_class.identifier: getterNotFound
focal_class.modifiers: private static
focal_class.parameters: (FieldDeclaration field,
                                                          String getterName,
                                                          Class<?> clazz,
                                                          NoSuchMethodException e)
focal_class.return: IllegalStateException
focal_class.signature: IllegalStateException getterNotFound(FieldDeclaration field,
                                                          String getterName,
                                                          Class<?> clazz,
                                                          NoSuchMethodException e)
focal_class.class_method_signature: Scanner.invoke(MethodHandle method, Object receiver)
focal_class.full_signature: private static Object invoke(MethodHandle method, Object receiver)
focal_class.identifier: invoke
focal_class.modifiers: private static
focal_class.parameters: (MethodHandle method, Object receiver)
focal_class.return: Object
focal_class.signature: Object invoke(MethodHandle method, Object receiver)
focal_method.body: ImmutableMap<ColumnName, InterfaceBasedColumn> interfaceBasedColumns() {
          if (!columnsInterfaceBased) {
              return ImmutableMap.of();
          }
          ImmutableMap.Builder<ColumnName, InterfaceBasedColumn> columns = ImmutableMap.builder();
          for (FieldDeclaration field : columnsOf(entityClass.stateType())) {
              addImplementedColumn(field, columns);
          }
          return columns.build();
      }
focal_method.class_method_signature: Scanner.interfaceBasedColumns()
focal_method.full_signature:  ImmutableMap<ColumnName, InterfaceBasedColumn> interfaceBasedColumns()
focal_method.identifier: interfaceBasedColumns
focal_method.invocations: of builder columnsOf stateType addImplementedColumn build
focal_method.parameters: ()
focal_method.return: ImmutableMap<ColumnName, InterfaceBasedColumn>
focal_method.signature: ImmutableMap<ColumnName, InterfaceBasedColumn> interfaceBasedColumns()