Spec-Zone.ru › OpenJDK 27

Класс SourceCodeAnalysis

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

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

Модификатор и тип Класс Описание
static enum  SourceCodeAnalysis.Attribute
Атрибут диапазона, который можно использовать для определения цвета.
static enum  SourceCodeAnalysis.Completeness
Описывает полноту заданных входных данных.
static enum  SourceCodeAnalysis.CompletionContext
Различные флаги, описывающие контекст выполнения дополнения.
static interface  SourceCodeAnalysis.CompletionInfo
Результат analyzeCompletion(String input).
static interface  SourceCodeAnalysis.CompletionState
Предоставляет доступ к состоянию дополнения.
static interface  SourceCodeAnalysis.Documentation
Описание варианта продолжения ввода пользователя.
static interface  SourceCodeAnalysis.ElementSuggestion
Описание Element, который может быть продолжением заданного фрагмента.
static interface  SourceCodeAnalysis.ElementSuggestionConvertor<S>
Преобразователь списка SourceCodeAnalysis.ElementSuggestion в список элементов дополнения пользовательского целевого типа.
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 <S> List<S> completionSuggestions(String input, int cursor, SourceCodeAnalysis.ElementSuggestionConvertor<S> convertor)
Вычисляет возможные продолжения заданных входных данных.
abstract Collection<Snippet> dependents(Snippet snippet)
Возвращает коллекцию Snippet, которые, возможно, потребуется обновить при обновлении заданного Snippet.
abstract List<SourceCodeAnalysis.Documentation> documentation(String input, int cursor, boolean computeJavadoc)
Создаёт документацию для заданного пользовательского ввода.
abstract List<SourceCodeAnalysis.Highlight> highlights(String snippet)
Возвращает коллекцию Highlight, которые можно использовать для раскрашивания заданного фрагмента.
abstract SourceCodeAnalysis.QualifiedNames listQualifiedNames(String code, int cursor)
Перечисляет квалифицированные имена, известные для простого имени в заданном коде непосредственно слева от указанной позиции курсора.
abstract List<Snippet> sourceToSnippets(String input)
Преобразует исходный код фрагмента в объект Snippet (или в список объектов Snippet в случае некоторых объявлений var, например: 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
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

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 — выходной параметр: при выборе варианта текст между якорем и курсором будет удалён и заменён выбранным вариантом
Возвращает:
список возможных продолжений заданных входных данных.

completionSuggestions

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

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 в случае некоторых объявлений var, например: 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)
Возвращает коллекцию Snippet, которые, возможно, потребуется обновить при обновлении заданного Snippet. Возвращаемая коллекция намеренно включает все возможные варианты и может содержать множество ложноположительных результатов.
Параметры:
snippet — Snippet, для которого требуется получить зависимые элементы
Возвращает:
коллекцию зависимых элементов

highlights

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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