Spec-Zone.ru › OpenJDK 25

Интерфейс CharacterRangeInfo

public sealed interface CharacterRangeInfo
Моделирует одну запись диапазона символов в CharacterRangeTableAttribute.

Каждая запись диапазона символов связывает диапазон индексов в массиве кода с диапазоном позиций символов в исходном файле. Позиция символа в исходном файле представлена номером строки и номером столбца, а её значение кодируется как lineNumber << 10 + columnNumber. Обратите внимание, что номера столбцов не совпадают с количеством байтов в столбце, поскольку исходный файл может содержать многобайтовые символы. Каждая запись диапазона символов содержит флаг, указывающий, какой вид диапазона описан: оператор, присваивание, вызов метода и т. д.

С момента:
24
См. также:
  • CharacterRangeTableAttribute.characterRangeTable()
  • CharacterRange

Краткое описание методов

Модификатор и тип Метод Описание
int characterRangeEnd()
Возвращает закодированную конечную позицию символов в исходном файле, не включая её.
int characterRangeStart()
Возвращает закодированную начальную позицию символов в исходном файле, включая её.
int endPc()
Возвращает конечный индекс в массиве кода, не включая его.
int flags()
Возвращает флаги этой записи диапазона символов.
static CharacterRangeInfo of(int startPc, int endPc, int characterRangeStart, int characterRangeEnd, int flags)
Возвращает запись диапазона символов.
int startPc()
Возвращает начальный индекс в массиве кода, включая его.

Подробное описание методов

startPc

int startPc()
Возвращает начальный индекс в массиве кода, включая его.
Возвращает:
начальный индекс в массиве кода, включая его
См. также:
  • CharacterRange.startScope()

endPc

int endPc()
Возвращает конечный индекс в массиве кода, не включая его.
Возвращает:
конечный индекс в массиве кода, не включая его
См. также:
  • CharacterRange.endScope()

characterRangeStart

int characterRangeStart()
Возвращает закодированную начальную позицию символов в исходном файле, включая её.
Возвращает:
закодированную начальную позицию символов в исходном файле, включая её

characterRangeEnd

int characterRangeEnd()
Возвращает закодированную конечную позицию символов в исходном файле, не включая её.
Возвращает:
закодированную конечную позицию символов в исходном файле, не включая её

flags

int flags()
Возвращает флаги этой записи диапазона символов.

Значение элемента flags описывает тип диапазона. В flags могут быть установлены несколько флагов.

  • CharacterRange.FLAG_STATEMENT Диапазон является оператором (за исключением ExpressionStatement), StatementExpression (JLS 14.8), а также каждой VariableDeclaratorId = VariableInitializer LocalVariableDeclarationStatement (JLS 14.4) или FieldDeclaration (JLS 8.3) в грамматике.
  • CharacterRange.FLAG_BLOCK Диапазон является блоком в грамматике.
  • CharacterRange.FLAG_ASSIGNMENT Диапазон является выражением присваивания — Expression1 AssignmentOperator Expression1 в грамматике, а также выражением инкремента или декремента (как префиксным, так и постфиксным).
  • CharacterRange.FLAG_FLOW_CONTROLLER Выражение, значение которого влияет на поток управления. Flowcon в следующих случаях:
    if ( Flowcon ) Statement [else Statement]
    for ( ForInitOpt ; [Flowcon] ; ForUpdateOpt ) Statement
    while ( Flowcon ) Statement
    do Statement while ( Flowcon ) ;
    switch ( Flowcon ) { SwitchBlockStatementGroups }
    Flowcon || Expression3
    Flowcon && Expression3
    Flowcon ? Expression : Expression1
    
  • CharacterRange.FLAG_FLOW_TARGET Оператор или выражение, на которое влияет CRT_FLOW_CONTROLLER. Flowtarg в следующих случаях:
    if ( Flowcon ) Flowtarg [else Flowtarg]
    for ( ForInitOpt ; [Flowcon] ; ForUpdateOpt ) Flowtarg
    while ( Flowcon ) Flowtarg
    do Flowtarg while ( Flowcon ) ;
    Flowcon || Flowtarg
    Flowcon && Flowtarg
    Flowcon ? Flowtarg : Flowtarg
    
  • CharacterRange.FLAG_INVOKE Вызов метода. Например: Identifier Arguments.
  • CharacterRange.FLAG_CREATE Создание нового объекта. Например: new Creator.
  • CharacterRange.FLAG_BRANCH_TRUE Условие, закодированное в инструкции ветвления, непосредственно входящей в диапазон кода этой записи, не инвертировано относительно соответствующего условия ветвления в исходном коде. То есть фактический переход происходит тогда и только тогда, когда условие ветвления в исходном коде истинно. Записи этого типа создаются только для условий, перечисленных в описании флага CRT_FLOW_CONTROLLER. Исходный диапазон записи содержит выражение, управляющее потоком выполнения. Поле start_pc записи этого типа должно указывать на инструкцию ветвления: if_acmp<cond>, if_icmp<cond>, if<cond>, ifnonull, ifnull или goto. CRT_BRANCH_TRUE и CRT_BRANCH_FALSE — специальные типы записей, позволяющие определить, какая ветвь условия была выбрана во время выполнения.
  • CharacterRange.FLAG_BRANCH_FALSE Условие, закодированное в инструкции ветвления, непосредственно входящей в диапазон кода этой записи, инвертировано относительно соответствующего условия ветвления в исходном коде. То есть фактический переход происходит тогда и только тогда, когда условие ветвления в исходном коде ложно. Записи этого типа создаются только для условий, перечисленных в описании флага CRT_FLOW_CONTROLLER. Исходный диапазон записи содержит выражение, управляющее потоком выполнения. Поле start_pc записи этого типа должно указывать на инструкцию ветвления: if_acmp<cond>, if_icmp<cond>, if<cond>, ifnonull, ifnull или goto.

Все биты элемента flags, не указанные выше, зарезервированы для использования в будущем. В создаваемых файлах классов они должны быть равны нулю, а реализации виртуальной машины Java должны их игнорировать.

Возвращает:
флаги этой записи диапазона символов
См. также:
  • CharacterRange.flags()

of

static CharacterRangeInfo of(int startPc, int endPc, int characterRangeStart, int characterRangeEnd, int flags)
Возвращает запись диапазона символов.
Примечание API:
Созданную запись нельзя записать в CodeBuilder. Вместо этого используйте CodeBuilder::characterRange.
Параметры:
startPc — начальный индекс в массиве кода, включая его
endPc — конечный индекс в массиве кода, не включая его
characterRangeStart — закодированная начальная позиция символов в исходном файле, включая её
characterRangeEnd — закодированная конечная позиция символов в исходном файле, не включая её
flags — флаги этой записи
Возвращает:
запись диапазона символов

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/classfile/attribute/CharacterRangeInfo.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API