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