test_class.declarator: namedProjectionAnnotationMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private NamedProjection namedProjectionAnnotationMock;
test_class.type: NamedProjection
test_class.var_name: namedProjectionAnnotationMock
test_class.declarator: typeScannerMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private AnnotatedTypeScanner typeScannerMock;
test_class.type: AnnotatedTypeScanner
test_class.var_name: typeScannerMock
test_class.declarator: annotationUtilsWrapperMock
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private AnnotationUtilsWrapper annotationUtilsWrapperMock;
test_class.type: AnnotationUtilsWrapper
test_class.var_name: annotationUtilsWrapperMock
test_class.declarator: annotatedClass
test_class.modifier: private
test_class.original_string: private Class annotatedClass;
test_class.type: Class
test_class.var_name: annotatedClass
test_class.declarator: projectionService
test_class.modifier: private
test_class.original_string: private ProjectionService projectionService;
test_class.type: ProjectionService
test_class.var_name: projectionService
test_class.file: backend/project-board/src/test/java/de/adesso/projectboard/base/projection/ProjectionServiceTest.java
test_class.identifier: ProjectionServiceTest
test_case.body: @Test
      public void addProjectionInterfacesAddsProjectionInterfaces() throws MultipleDefaultProjectionsException, MultipleSimilarlyNamedProjectionsException {
          // given
          var expectedName = "name";
          var expectedTarget = (Class) Integer.class;
          var expectedBasePackage = "de/test";
  
          given(typeScannerMock.findTypes(expectedBasePackage)).willReturn(Set.of(annotatedClass));
  
          given(annotationUtilsWrapperMock.findAnnotation(annotatedClass, NamedProjection.class))
                  .willReturn(namedProjectionAnnotationMock);
  
          given(namedProjectionAnnotationMock.target())
                  .willReturn(expectedTarget);
          given(namedProjectionAnnotationMock.name())
                  .willReturn(expectedName);
          given(namedProjectionAnnotationMock.defaultProjection())
                  .willReturn(true);
  
          // when
          projectionService.addProjectionInterfaces(expectedBasePackage);
  
          // then
          var softly = new SoftAssertions();
  
          softly.assertThat(projectionService.projectionClassMap)
                  .containsExactly(entry(Pair.of(expectedName, expectedTarget), (Class<?>) annotatedClass));
  
          softly.assertThat(projectionService.defaultProjectionClassMap)
                  .containsExactly(entry((Class<?>) expectedTarget, (Class<?>) annotatedClass));
  
          softly.assertAll();
      }
test_case.class_method_signature: ProjectionServiceTest.addProjectionInterfacesAddsProjectionInterfaces()
test_case.full_signature: @Test public void addProjectionInterfacesAddsProjectionInterfaces()
test_case.identifier: addProjectionInterfacesAddsProjectionInterfaces
test_case.invocations: willReturn given findTypes of willReturn given findAnnotation willReturn given target willReturn given name willReturn given defaultProjection addProjectionInterfaces containsExactly assertThat entry of containsExactly assertThat entry assertAll
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void addProjectionInterfacesAddsProjectionInterfaces()
focal_class.declarator: BASE_PACKAGE = "de/adesso/projectboard/base"
focal_class.modifier: private final
focal_class.original_string: private final String BASE_PACKAGE = "de/adesso/projectboard/base";
focal_class.type: String
focal_class.var_name: BASE_PACKAGE
focal_class.declarator: typeScanner
focal_class.modifier: private final
focal_class.original_string: private final AnnotatedTypeScanner typeScanner;
focal_class.type: AnnotatedTypeScanner
focal_class.var_name: typeScanner
focal_class.declarator: annotationUtilsWrapper
focal_class.modifier: private final
focal_class.original_string: private final AnnotationUtilsWrapper annotationUtilsWrapper;
focal_class.type: AnnotationUtilsWrapper
focal_class.var_name: annotationUtilsWrapper
focal_class.declarator: projectionClassMap
focal_class.modifier: final
focal_class.original_string: final Map<Pair<String, Class<?>>, Class<?>> projectionClassMap;
focal_class.type: Map<Pair<String, Class<?>>, Class<?>>
focal_class.var_name: projectionClassMap
focal_class.declarator: defaultProjectionClassMap
focal_class.modifier: final
focal_class.original_string: final Map<Class<?>, Class<?>> defaultProjectionClassMap;
focal_class.type: Map<Class<?>, Class<?>>
focal_class.var_name: defaultProjectionClassMap
focal_class.file: backend/project-board/src/main/java/de/adesso/projectboard/base/projection/ProjectionService.java
focal_class.identifier: ProjectionService
focal_class.interfaces: implements InitializingBean
focal_class.class_method_signature: ProjectionService.ProjectionService(AnnotatedTypeScanner typeScanner, AnnotationUtilsWrapper annotationUtilsWrapper)
focal_class.full_signature: @Autowired public  ProjectionService(AnnotatedTypeScanner typeScanner, AnnotationUtilsWrapper annotationUtilsWrapper)
focal_class.identifier: ProjectionService
focal_class.modifiers: @Autowired public
focal_class.parameters: (AnnotatedTypeScanner typeScanner, AnnotationUtilsWrapper annotationUtilsWrapper)
focal_class.signature:  ProjectionService(AnnotatedTypeScanner typeScanner, AnnotationUtilsWrapper annotationUtilsWrapper)
focal_class.class_method_signature: ProjectionService.getByNameOrDefault(@NonNull String projectionName, @NonNull Class<?> projectionTarget)
focal_class.full_signature: public Class<?> getByNameOrDefault(@NonNull String projectionName, @NonNull Class<?> projectionTarget)
focal_class.identifier: getByNameOrDefault
focal_class.modifiers: public
focal_class.parameters: (@NonNull String projectionName, @NonNull Class<?> projectionTarget)
focal_class.return: Class<?>
focal_class.signature: Class<?> getByNameOrDefault(@NonNull String projectionName, @NonNull Class<?> projectionTarget)
focal_class.class_method_signature: ProjectionService.getDefault(Class<?> projectionTarget)
focal_class.full_signature: public Class<?> getDefault(Class<?> projectionTarget)
focal_class.identifier: getDefault
focal_class.modifiers: public
focal_class.parameters: (Class<?> projectionTarget)
focal_class.return: Class<?>
focal_class.signature: Class<?> getDefault(Class<?> projectionTarget)
focal_class.class_method_signature: ProjectionService.addProjectionInterfaces(String basePackage)
focal_class.full_signature:  void addProjectionInterfaces(String basePackage)
focal_class.identifier: addProjectionInterfaces
focal_class.parameters: (String basePackage)
focal_class.return: void
focal_class.signature: void addProjectionInterfaces(String basePackage)
focal_class.class_method_signature: ProjectionService.getAnnotatedInterfaces(String basePackage)
focal_class.full_signature:  Set<Class<?>> getAnnotatedInterfaces(String basePackage)
focal_class.identifier: getAnnotatedInterfaces
focal_class.parameters: (String basePackage)
focal_class.return: Set<Class<?>>
focal_class.signature: Set<Class<?>> getAnnotatedInterfaces(String basePackage)
focal_class.class_method_signature: ProjectionService.addProjectionInterface(NamedProjection annotation, Class<?> annotatedInterface)
focal_class.full_signature:  void addProjectionInterface(NamedProjection annotation, Class<?> annotatedInterface)
focal_class.identifier: addProjectionInterface
focal_class.parameters: (NamedProjection annotation, Class<?> annotatedInterface)
focal_class.return: void
focal_class.signature: void addProjectionInterface(NamedProjection annotation, Class<?> annotatedInterface)
focal_class.class_method_signature: ProjectionService.getProjectionName(NamedProjection annotation, Class<?> projectionInterface)
focal_class.full_signature:  String getProjectionName(NamedProjection annotation, Class<?> projectionInterface)
focal_class.identifier: getProjectionName
focal_class.parameters: (NamedProjection annotation, Class<?> projectionInterface)
focal_class.return: String
focal_class.signature: String getProjectionName(NamedProjection annotation, Class<?> projectionInterface)
focal_class.class_method_signature: ProjectionService.afterPropertiesSet()
focal_class.full_signature: @Override public void afterPropertiesSet()
focal_class.identifier: afterPropertiesSet
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void afterPropertiesSet()
focal_method.body: void addProjectionInterfaces(String basePackage) throws MultipleDefaultProjectionsException, MultipleSimilarlyNamedProjectionsException {
          for(var annotatedInterface : getAnnotatedInterfaces(basePackage)) {
              var annotation = annotationUtilsWrapper.findAnnotation(annotatedInterface, NamedProjection.class);
              addProjectionInterface(annotation, annotatedInterface);
          }
      }
focal_method.class_method_signature: ProjectionService.addProjectionInterfaces(String basePackage)
focal_method.full_signature:  void addProjectionInterfaces(String basePackage)
focal_method.identifier: addProjectionInterfaces
focal_method.invocations: getAnnotatedInterfaces findAnnotation addProjectionInterface
focal_method.parameters: (String basePackage)
focal_method.return: void
focal_method.signature: void addProjectionInterfaces(String basePackage)