Spec-Zone.ru › OpenJDK 25

Класс SourceCodeAnalysis

java.lang.Object
jdk.jshell.SourceCodeAnalysis
public abstract class SourceCodeAnalysis extends Object
Предоставляет утилиты для анализа исходного кода. Необязательные функции обеспечивают более широкие возможности интерактивной работы. Включает анализ завершённости: является ли ввод завершённым фрагментом кода? Нужно ли запросить дополнительные данные? Станет ли фрагмент завершённым, если добавить точку с запятой? Содержит ли он несколько фрагментов? и т. д. Также включает предложения по дополнению, которые могут использоваться, например, для дополнения по клавише Tab.
Начиная с:
9

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static enum  SourceCodeAnalysis.Attribute
Атрибут диапазона, который можно использовать для выбора цвета.
static enum  SourceCodeAnalysis.Completeness
Описывает завершённость заданного ввода.
static interface  SourceCodeAnalysis.CompletionInfo
Результат analyzeCompletion(String input).
static interface  SourceCodeAnalysis.Documentation
Документация кандидата на продолжение заданного пользовательского ввода.
static final record  SourceCodeAnalysis.Highlight
Назначает диапазонам внутри фрагмента атрибуты, которые можно использовать для выбора цвета.
static final class  SourceCodeAnalysis.QualifiedNames
Список возможных квалифицированных имён.
static interface  SourceCodeAnalysis.SnippetWrapper
Обёртывание фрагмента исходного кода Java в корректный исходный код верхнего уровня Java.
static interface  SourceCodeAnalysis.Suggestion
Кандидат на продолжение заданного пользовательского ввода.

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

Модификатор и тип Метод Описание
abstract SourceCodeAnalysis.CompletionInfo analyzeCompletion(String input)
Получает входную строку, находит в ней первый фрагмент кода (инструкцию, объявление, импорт или выражение) и определяет, завершён ли он.
abstract String analyzeType(String code, int cursor)
Определяет тип заданного выражения.
abstract List<SourceCodeAnalysis.Suggestion> completionSuggestions(String input, int cursor, int[] anchor)
Вычисляет возможные продолжения заданного ввода.
abstract Collection<Snippet> dependents(Snippet snippet)
Возвращает коллекцию Snippets, которые, возможно, потребуется обновить при обновлении заданного Snippet.
abstract List<SourceCodeAnalysis.Documentation> documentation(String input, int cursor, boolean computeJavadoc)
Создаёт документацию для заданного пользовательского ввода.
abstract List<SourceCodeAnalysis.Highlight> highlights(String snippet)
Возвращает коллекцию Highlights, которые можно использовать для раскрашивания заданного фрагмента.
abstract SourceCodeAnalysis.QualifiedNames listQualifiedNames(String code, int cursor)
Выводит список квалифицированных имён, известных для простого имени в заданном коде непосредственно слева от заданной позиции курсора.
abstract List<Snippet> sourceToSnippets(String input)
Преобразует исходный код фрагмента в объект Snippet (или в список объектов Snippet в случае некоторых объявлений переменных, например: int x, y, z;).
abstract SourceCodeAnalysis.SnippetWrapper wrapper(Snippet snippet)
Возвращает сведения об обёртке для Snippet.
abstract List<SourceCodeAnalysis.SnippetWrapper> wrappers(String input)
Возвращает сведения об обёртке для фрагмента во входной исходной строке.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

analyzeCompletion

public abstract SourceCodeAnalysis.CompletionInfo analyzeCompletion(String input)
Получает входную строку, находит в ней первый фрагмент кода (инструкцию, объявление, импорт или выражение) и определяет, завершён ли он.
Параметры:
input — входная исходная строка
Возвращает:
экземпляр CompletionInfo с информацией о расположении и завершённости

completionSuggestions

public abstract List<SourceCodeAnalysis.Suggestion> completionSuggestions(String input, int cursor, int[] anchor)
Вычисляет возможные продолжения заданного ввода. Использует информацию о текущем состоянии JShell, включая сведения о типах, для фильтрации предложений.
Параметры:
input — введённая пользователем на данный момент строка
cursor — текущая позиция курсора в заданном тексте input
anchor — выходной параметр: при выборе варианта дополнения текст между начальной позицией и курсором будет удалён и заменён выбранным вариантом
Возвращает:
список возможных продолжений заданного ввода.

documentation

public abstract List<SourceCodeAnalysis.Documentation> documentation(String input, int cursor, boolean computeJavadoc)
Создаёт документацию для заданного пользовательского ввода. Если пользовательскому вводу соответствуют несколько элементов (например, перегруженные методы), может быть возвращено несколько объектов Documentation.
Параметры:
input — введённый пользователем на данный момент фрагмент
cursor — текущая позиция курсора в заданном тексте input
computeJavadoc — true, если помимо сигнатуры нужно создать javadoc для заданного ввода
Возвращает:
документацию для заданного пользовательского ввода; если вводу соответствуют несколько элементов, возвращаются несколько объектов Documentation.

analyzeType

public abstract String analyzeType(String code, int cursor)
Определяет тип заданного выражения. Выражение начинается в начале code и заканчивается в заданной позиции cursor. Возвращает null, если определить тип выражения невозможно.
Параметры:
code — выражение, тип которого требуется определить
cursor — текущая позиция курсора в заданном коде
Возвращает:
определённый тип или null, если его невозможно определить

listQualifiedNames

public abstract SourceCodeAnalysis.QualifiedNames listQualifiedNames(String code, int cursor)
Выводит список квалифицированных имён, известных для простого имени в заданном коде непосредственно слева от заданной позиции курсора. Квалифицированные имена собираются путём проверки пути к классам, используемого eval (см. JShell.addToClasspath(java.lang.String)).
Параметры:
code — выражение, для которого нужно вычислить возможные квалифицированные имена
cursor — текущая позиция курсора в заданном коде
Возвращает:
известные квалифицированные имена

wrapper

public abstract SourceCodeAnalysis.SnippetWrapper wrapper(Snippet snippet)
Возвращает сведения об обёртке для Snippet. Обёртка меняется при изменении среды, поэтому вызовы этого метода в разное время могут возвращать разные результаты.
Параметры:
snippet — Snippet, для которого требуется получить обёртку
Возвращает:
сведения об обёртке

wrappers

public abstract List<SourceCodeAnalysis.SnippetWrapper> wrappers(String input)
Возвращает сведения об обёртке для фрагмента во входной исходной строке.

Для некорректных и незавершённых фрагментов также создаются обёртки. Список упорядочен по порядку появления фрагментов. Обёртка меняется при изменении среды, поэтому вызовы этого метода в разное время могут возвращать разные результаты.

Ввод должен содержать ровно один завершённый фрагмент исходного кода, то есть одно выражение, инструкцию, объявление переменной, объявление метода, объявление класса или импорт. Чтобы разделить произвольный ввод на отдельные завершённые фрагменты, используйте analyzeCompletion(String).

Обёртка может отличаться от той, которую возвращает wrapper(Snippet), если исходный код был преобразован в Snippet.

Параметры:
input — исходный ввод, на основе которого нужно создать обёртки
Возвращает:
список сведений об обёртках

sourceToSnippets

public abstract List<Snippet> sourceToSnippets(String input)
Преобразует исходный код фрагмента в объект Snippet (или в список объектов Snippet в случае некоторых объявлений переменных, например: int x, y, z;). Не устанавливает фрагменты: объявления недоступны другим фрагментам, импорты не добавляются. Не выполняет фрагменты.

К объекту Snippet можно применять запросы. Значение Snippet.id() будет "*UNASSOCIATED*". Возвращённые фрагменты не связаны с экземпляром JShell, поэтому попытки передать их методам JShell приведут к выбросу IllegalArgumentException, если не указано иное. Они не будут отображаться в результатах запросов фрагментов, например JShell.snippets().

Ограничения на ввод такие же, как для JShell.eval(String).

Выполняется только предварительная компиляция, достаточная для создания Snippet. Заведомо ошибочные фрагменты возвращаются как ErroneousSnippet; остальные фрагменты могут содержать или не содержать ошибки.

Параметры:
input — входная строка, которую нужно преобразовать
Возвращает:
обычно список, содержащий один Snippet, но он может быть пустым или содержать несколько элементов
Выбрасывает:
IllegalStateException — если экземпляр JShell закрыт.
Начиная с:
10

dependents

public abstract Collection<Snippet> dependents(Snippet snippet)
Возвращает коллекцию Snippets, которые, возможно, потребуется обновить при обновлении заданного Snippet. Возвращаемая коллекция составлена с расчётом на полноту и может содержать много ложноположительных результатов.
Параметры:
snippet — Snippet, для которого запрашиваются зависимые элементы
Возвращает:
коллекцию зависимых элементов

highlights

public abstract List<SourceCodeAnalysis.Highlight> highlights(String snippet)
Возвращает коллекцию Highlights, которые можно использовать для раскрашивания заданного фрагмента.

Возвращённые Highlights не перекрываются и отсортированы по начальной позиции.

Параметры:
snippet — фрагмент, для которого требуется вычислить Highlights
Возвращает:
вычисленные Highlights.
Начиная с:
19

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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/jdk.jshell/jdk/jshell/SourceCodeAnalysis.html

Spec-Zone.ru

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