Как часть компилятора для языка программирования, над которым я работаю, я наткнулся на общие подписи в байт-коде, который я пытаюсь разобрать и преобразовать в AST. Алгоритм синтаксического анализа в основном работает, но, кажется, есть особый случай, когда формат этих подписей ведет себя немного странно. Вот несколько таких случаев:
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;)V
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;II)V
java.lang.Class#getAnnotation: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)TA;
java.lang.Class#getAnnotationsByType: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)[TA;
java.lang.Class#getDeclaredAnnotation: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)TA;
java.lang.Class#getDeclaredAnnotationsByType: <A::Ljava/lang/annotation/Annotation;>(Ljava/lang/Class<TA;>;)[TA;
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;)V
java.util.Arrays#parallelSort: <T::Ljava/lang/Comparable<-TT;>;>([TT;II)V
java.util.Collections#sort: <T::Ljava/lang/Comparable<-TT;>;>(Ljava/util/List<TT;>;)V
Из всех методов в этих классах только эти имеют ::
в своей подписи. Мой вопрос в том, что делает этот токен и почему он существует.
Изменить
Я знаю об операторе ::
в языке Java, но это что-то на уровне байт-кода.