Class CBegin

    • Field Detail

      • version

        protected int version
        версия байт-кода
        • 45 - Java 1.0
        • 45.3 - Java 1.1
        • 46 - Java 1.2
        • 47 - Java 1.3
        • 48 - Java 1.4
        • 49 - Java 5
        • 50 - Java 6
        • 51 - Java 7
        • 52 - Java 8
        • 53 - Java 9
        • 54 - Java 10
        • 55 - Java 11
        • 56 - Java 12
        • 57 - Java 13
        • 58 - Java 14
        • 59 - Java 15
        • 60 - Java 16
        • 61 - Java 17
        • 62 - Java 18
      • access

        protected int access
        флаги доступа к классу AccFlags
      • signature

        protected String signature
        Сигнатура в случае Generic класса/интерфейса или null
      • superName

        protected String superName
        Имя (байт-код) класса родителя JavaClassName
      • interfaces

        protected String[] interfaces
        имена (байт-код) интерфейсов, см JavaClassName
      • source

        protected CSource source
        Содержит имя исходного класса/файла отладки (debug)
      • annotations

        protected List<CAnnotation> annotations
        аннотации прикрепленные к классу
      • typeAnnotations

        protected List<CTypeAnnotation> typeAnnotations
        аннотации прикрепленные к классу
      • fields

        protected List<CField> fields
        Список полней класса
      • methods

        protected List<CMethod> methods
        Список методов класса
      • order

        protected Map<ClsByteCode,​Integer> order
        Содержит порядок определения полей/методов/.. в классе (байт-коде)
    • Constructor Detail

      • CBegin

        public CBegin()
        Конструктор по умолчанию
      • CBegin

        public CBegin​(int version,
                      int access,
                      String name,
                      String signature,
                      String superName,
                      String[] interfaces)
        Конструктор
        Parameters:
        version - версия байт-кода version
        access - флаги доступа
        name - имя (байт-код) класса, см JavaClassName
        signature - сигнатура, в случае Generic типа
        superName - имя (байт-код) класса родителя
        interfaces - имена (байт-код) интерфейсов
      • CBegin

        public CBegin​(CBegin sample)
        Конструктор копирования
        Parameters:
        sample - образец для копирования
    • Method Detail

      • clone

        public CBegin clone()
        Создает полную копию класса
        Specified by:
        clone in interface ClsByteCode
        Overrides:
        clone in class Object
        Returns:
        копия
      • configure

        public CBegin configure​(Consumer<CBegin> conf)
        Конфигурация экземпляра
        Parameters:
        conf - конфигурация
        Returns:
        SELF ссылка
      • getVersion

        public int getVersion()
        Возвращает версию байт-кода совместимую с JVM version
        Returns:
        версия совместимая JVM
      • setVersion

        public void setVersion​(int version)
        Указывает версию байт-кода совместимую с JVM version
        Parameters:
        version - версия совместимая JVM
      • getAccess

        public int getAccess()
        Возвращает флаги доступа к классу AccFlags
        Specified by:
        getAccess in interface AccFlagsProperty
        Returns:
        флаги доступа
      • setAccess

        public void setAccess​(int access)
        Указывает флаги доступа к классу AccFlags
        Specified by:
        setAccess in interface AccFlagsProperty
        Parameters:
        access - флаги доступа
      • getName

        public String getName()
        Возвращает имя (байт-код) класса, см javaName(), JavaClassName
        Returns:
        имя класса
      • setName

        public void setName​(String name)
        Указывает имя (байт-код) класса, см javaName(), JavaClassName
        Parameters:
        name - имя класса
      • javaName

        public CBegin.JavaNamed javaName()
        Изменение имени класса, меняет содержимое поля name
        Returns:
        управление именем класса
      • getSignature

        public String getSignature()
        Возвращает сигнатуру generic
        Returns:
        сигнатура или null
      • setSignature

        public void setSignature​(String signature)
        Указывает сигнатуру generic
        Parameters:
        signature - сигнатура или null
      • getSuperName

        public String getSuperName()
        Возвращает имя (байт-код) класса родителя JavaClassName
        Returns:
        имя (байт-код) класса родителя
      • setSuperName

        public void setSuperName​(String superName)
        Указывает имя (байт-код) класса родителя JavaClassName
        Parameters:
        superName - имя (байт-код) класса родителя
      • getInterfaces

        public String[] getInterfaces()
        Возвращает имена (байт-код) интерфейсов, см JavaClassName
        Returns:
        имена (байт-код) интерфейсов
      • setInterfaces

        public void setInterfaces​(String[] interfaces)
        Указывает имена (байт-код) интерфейсов, см JavaClassName
        Parameters:
        interfaces - имена (байт-код) интерфейсов
      • getSource

        public CSource getSource()
        Возвращает имя исходного файла
        Returns:
        имя исходного файла
      • setSource

        public void setSource​(CSource s)
        Указывает имя исходного файла
        Parameters:
        s - имя исходного файла
      • setOuterClass

        public void setOuterClass​(COuterClass s)
      • getNestHost

        public CNestHost getNestHost()
      • setNestHost

        public void setNestHost​(CNestHost s)
      • getAnnotations

        public List<CAnnotation> getAnnotations()
        Возвращает аннотации прикрепленные к классу
        Returns:
        аннотации
      • setAnnotations

        public void setAnnotations​(List<CAnnotation> ls)
        Указывает аннотации прикрепленные к классу
        Parameters:
        ls - аннотации
      • getTypeAnnotations

        public List<CTypeAnnotation> getTypeAnnotations()
        Возвращает аннотации прикрепленные к классу
        Returns:
        аннотации
      • setTypeAnnotations

        public void setTypeAnnotations​(List<CTypeAnnotation> ls)
        Указывает аннотации прикрепленные к классу
        Parameters:
        ls - аннотации
      • getFields

        public List<CField> getFields()
        Возвращает список полней класса
        Returns:
        список полней класса
      • setFields

        public void setFields​(List<CField> fields)
        Указывает список полней класса
        Parameters:
        fields - список полней класса
      • getMethods

        public List<CMethod> getMethods()
        Возвращает список методов класса
        Returns:
        список методов класса
      • setMethods

        public void setMethods​(List<CMethod> methods)
        Указывает список методов класса
        Parameters:
        methods - список методов класса
      • getOrder

        public Map<ClsByteCode,​Integer> getOrder()
        Возвращает порядок определения полей/методов/.. в классе (байт-коде)
        Returns:
        порядок определения полей/методов/..
      • setOrder

        public void setOrder​(Map<ClsByteCode,​Integer> order)
        Указывает порядок определения полей/методов/.. в классе (байт-коде)
        Parameters:
        order - порядок определения полей/методов/..
      • order

        public CBegin order​(ClsByteCode c,
                            int order)
        Указывает порядок определения полей/методов/..
        Parameters:
        c - поле/методо/...
        order - порядок
        Returns:
        SELF ссылка
      • nodes

        public xyz.cofe.iter.Eterable<ByteCode> nodes()
        Возвращает дочерние узлы
        Specified by:
        nodes in interface ByteCode
        Specified by:
        nodes in interface xyz.cofe.collection.ImTree<ByteCode>
        Returns:
        дочерние узлы
      • write

        public void write​(org.objectweb.asm.ClassWriter v)
        Генерация байт кода
        Specified by:
        write in interface ClazzWriter
        Parameters:
        v - куда будет записан байт код
      • toByteCode

        public byte[] toByteCode()
        Возвращает байт-код.
        Класс будет сгенерирован с использованием таких флагов new ClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES)
        Returns:
        байт-код
      • parseByteCode

        public static CBegin parseByteCode​(byte[] byteCode)
        Парсинг байт-кода
        Parameters:
        byteCode - байт-код
        Returns:
        представление класса
      • parseByteCode

        public static CBegin parseByteCode​(Class<?> clazz)
        Парсинг байт-кода класса.
        • Будет произведен поиск класса в ресурсах
          var resName = "/"+clazz.getName().replace(".","/")+".class"
          clazz.getResource(resName)
        • Если ресурс будет найдет, то быдет вызов parseByteCode(URL)
        Parameters:
        clazz - класс
        Returns:
        представление байт кода
      • parseByteCode

        public static CBegin parseByteCode​(URL url)
        Парсинг байт-кода
        Parameters:
        url - ссылка на байт-код
        Returns:
        представление класса