Интерфейс CharacterRangeInfo
public sealed interface CharacterRangeInfo
CharacterRangeTableAttribute. Каждая запись диапазона символов связывает диапазон индексов в массиве кода с диапазоном позиций символов в исходном файле. Позиция символа в исходном файле представлена номером строки и номером столбца, а её значение закодировано как lineNumber << 10 + columnNumber. Обратите внимание, что номера столбцов не совпадают с байтовыми индексами в столбце, поскольку в исходном файле могут присутствовать многобайтовые символы. Каждая запись диапазона символов содержит флаг, указывающий, какой тип диапазона описан: оператор, присваивание, вызов метода и т. д.
- С:
- 24
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
characterRangeEnd() |
Возвращает закодированную конечную позицию символов в исходном файле, не включая её. |
int |
characterRangeStart() |
Возвращает закодированную начальную позицию символов в исходном файле, включая её. |
int |
endPc() |
Возвращает конечный индекс в массиве кода, не включая его. |
int |
flags() |
Возвращает флаги этой записи диапазона символов. |
static CharacterRangeInfo |
of |
Возвращает запись диапазона символов. |
int |
startPc() |
Возвращает начальный индекс в массиве кода, включая его. |
Подробное описание методов
startPc
int startPc()
- Возвращает:
- начальный индекс в массиве кода, включая его
- См. также:
endPc
int endPc()
- Возвращает:
- конечный индекс в массиве кода, не включая его
- См. также:
characterRangeStart
int characterRangeStart()
- Возвращает:
- закодированную начальную позицию символов в исходном файле, включая её
characterRangeEnd
int characterRangeEnd()
- Возвращает:
- закодированную конечную позицию символов в исходном файле, не включая её
flags
int flags()
Значение элемента flags описывает тип диапазона. В элементе flags может быть установлено несколько флагов.
-
CharacterRange.FLAG_STATEMENTДиапазон является оператором (за исключением ExpressionStatement), StatementExpression (JLS §14.8), а также каждымVariableDeclaratorId = VariableInitializerLocalVariableDeclarationStatement (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Вызов метода. Например: идентификатор и аргументы. -
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 должны их игнорировать.
- Возвращает:
- флаги этой записи диапазона символов
- См. также:
of
static CharacterRangeInfo of(int startPc, int endPc, int characterRangeStart, int characterRangeEnd, int flags)
- Примечание к API:
- Созданную запись нельзя записать в
CodeBuilder. Вместо этого используйтеCodeBuilder::characterRange. - Параметры:
-
startPc— начальный индекс в массиве кода, включая его -
endPc— конечный индекс в массиве кода, не включая его -
characterRangeStart— закодированная начальная позиция символов в исходном файле, включая её -
characterRangeEnd— закодированная конечная позиция символов в исходном файле, не включая её -
flags— флаги этой записи - Возвращает:
- запись диапазона символов
- Исключения:
-
IllegalArgumentException— еслиstartPc,endPcилиflagsне являетсяu2
© 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.