@Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        super.init(processingEnv);
        this.koraAppElement = this.elements.getTypeElement(CommonClassNames.koraApp.canonicalName());
        if (this.koraAppElement == null) {
            return;
        }
        this.moduleElement = this.elements.getTypeElement(CommonClassNames.module.canonicalName());
        this.koraSubmoduleElement = this.elements.getTypeElement(CommonClassNames.koraSubmodule.canonicalName());
        this.componentElement = this.elements.getTypeElement(CommonClassNames.component.canonicalName());
        this.initialized = true;
        this.ctx = new ProcessingContext(processingEnv);
        log.info("@KoraApp processor started");
    }
@Test
    void appWithAllOf() throws Throwable {
        var graphDraw = testClass(AppWithAllOfComponents.class);
        Assertions.assertThat(graphDraw.getNodes()).hasSize(12);
        var graph = graphDraw.init();

        var classWithNonTaggedAllOf = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithAllOf.class, AppWithAllOfComponents.Superclass.class);
        Assertions.assertThat(classWithNonTaggedAllOf).hasSize(1);
        var l1 = graph.get(classWithNonTaggedAllOf.get(0));
        Assertions.assertThat(l1.allOfSuperclass()).hasSize(1);

        var classWithTaggedAllOf = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithAllOf.class, AppWithAllOfComponents.Superclass.class, AppWithAllOfComponents.Superclass.class);
        Assertions.assertThat(classWithTaggedAllOf).hasSize(1);
        var l2 = graph.get(classWithTaggedAllOf.get(0));
        Assertions.assertThat(l2.allOfSuperclass()).hasSize(1);


        var classWithAllOfNodesProxies = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithAllValueOf.class);
        Assertions.assertThat(classWithAllOfNodesProxies).hasSize(1);
        var lp = graph.get(classWithAllOfNodesProxies.get(0));
        Assertions.assertThat(lp.allOfSuperclass()).hasSize(5);


        var classWithInterfaces = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithInterfaces.class);
        Assertions.assertThat(classWithInterfaces).hasSize(1);
        var li = graph.get(classWithInterfaces.get(0));
        Assertions.assertThat(li.allSomeInterfaces()).hasSize(2);

        var classWithInterfacesValueOf = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithInterfacesValueOf.class);
        Assertions.assertThat(classWithInterfacesValueOf).hasSize(1);
        var lpi = graph.get(classWithInterfacesValueOf.get(0));
        Assertions.assertThat(lpi.allSomeInterfaces()).hasSize(2);


        var classWithAllOfAnyTag = this.findNodesOf(graphDraw, AppWithAllOfComponents.ClassWithAllOfAnyTag.class);
        Assertions.assertThat(classWithAllOfAnyTag).hasSize(1);
        var aoat = graph.get(classWithAllOfAnyTag.get(0));
        Assertions.assertThat(aoat.class5All()).hasSize(2);
    }