@@ -0,0 +1,1451 @@
+package io.github.classgraph.features;%0A%0Aimport static org.assertj.core.api.Assertions.assertThat;%0A%0Aimport java.lang.annotation.Retention;%0Aimport java.lang.annotation.RetentionPolicy;%0A%0Aimport org.junit.jupiter.api.Test;%0A%0Aimport io.github.classgraph.ClassGraph;%0Aimport io.github.classgraph.ClassInfo;%0Aimport io.github.classgraph.ScanResult;%0A%0A/**%0A * Test%0A */%0Aclass ClassTypeAnnotation %7B%0A    /***/%0A    @Retention(RetentionPolicy.RUNTIME)%0A    private static @interface X %7B%0A    %7D%0A%0A    /***/%0A    private static class Z %7B%0A    %7D%0A%0A    /***/%0A    private static class Y%3CT%3E extends @X Z %7B%0A    %7D%0A%0A    @Test%0A    void classTypeAnnotation() %7B%0A        try (ScanResult scanResult = new ClassGraph()%0A                .acceptPackages(ClassTypeAnnotation.class.getPackage().getName()).enableAllInfo().scan()) %7B%0A            final ClassInfo classInfo = scanResult.getClassInfo(Y.class.getName());%0A            assertThat(classInfo).isNotNull();%0A            %0A            // This is%0A            //   Y%3CT%3E extends ClassTypeAnnotation.@X Z%0A            // and not%0A            //   Y%3CT%3E extends @X ClassTypeAnnotation.Z%0A            // Because the annotation is on Z, not ClassTypeAnnotation%0A            assertThat(classInfo.getTypeSignature().toString()).isEqualTo(%22private static class %22%0A                    + Y.class.getName() + %22%3CT%3E extends %22 + ClassTypeAnnotation.class.getName() + %22.@%22%0A                    + X.class.getName() + %22 %22 + Z.class.getSimpleName());%0A        %7D%0A    %7D%0A%7D%0A

Test for #664