java.lang.Object
jdk.jshell.SourceCodeAnalysis
提供源代码输入的分析工具。可选功能,提供更丰富的交互体验。包括完成分析:输入是否是完整的代码片段?是否需要提示输入更多内容?添加分号是否会使其完整?是否有多个片段?等等。还包括完成建议,如在制表完成中可能使用的建议。
- 自:
- 9
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enum
一个可用于派生着色的跨度属性。static enum
描述给定输入的完整性。static interface
analyzeCompletion(String input)
的结果。static interface
给定用户输入的候选继续文档。static final record
为代码片段内的跨度分配可用于着色的属性。static final class
可能的限定名称列表。static interface
将Java源代码片段包装为有效的顶级Java源代码。static interface
给定用户输入的候选继续文档。 -
Method Summary
Modifier and TypeMethodDescriptionabstract 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) 返回可能需要更新的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) 给定代码中给定光标位置左侧的简单名称的已知限定名称列表。sourceToSnippets
(String input) 将代码片段的源代码转换为Snippet
对象(或在某些var声明的情况下为Snippet
对象列表,例如:int x, y, z;)。abstract SourceCodeAnalysis.SnippetWrapper
返回Snippet
的包装信息。abstract List
<SourceCodeAnalysis.SnippetWrapper> 返回输入源字符串中代码片段的包装信息。
-
Method Details
-
analyzeCompletion
给定输入字符串,找到第一个代码片段(一个语句、定义、导入或表达式),并评估其是否完整。- 参数:
-
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) 为给定用户输入的文档。- 参数:
-
input
- 用户迄今为止编写的代码片段 -
cursor
- 给定input
文本中当前光标位置 -
computeJavadoc
- 如果应该计算给定输入的javadoc以及签名,则为true - 返回:
-
给定用户输入的文档,如果有多个元素匹配输入,则返回多个
Documentation
对象。
-
analyzeType
推断给定表达式的类型。表达式从code
的开头到给定的cursor
位置。如果无法推断表达式的类型,则返回null。- 参数:
-
code
- 应推断类型的表达式 -
cursor
- 给定代码中的当前光标位置 - 返回:
- 推断的类型,如果无法推断则为null
-
listQualifiedNames
返回给定代码中给定光标位置左侧的简单名称的已知限定名称列表。通过检查eval使用的类路径来收集限定名称(请参见JShell.addToClasspath(java.lang.String)
)。- 参数:
-
code
- 应计算候选限定名称的表达式 -
cursor
- 给定代码中的当前光标位置 - 返回:
- 已知的限定名称
-
wrapper
返回Snippet
的包装信息。随着环境的变化,包装也会发生变化,因此在不同时间调用此方法可能会产生不同的结果。- 参数:
-
snippet
- 要检索包装的Snippet
- 返回:
- 包装信息
-
wrappers
返回输入源字符串中代码片段的包装信息。对于格式不正确和不完整的代码片段,也会生成包装。列表按照片段遇到的顺序排列。包装随着环境的变化而变化,因此在不同时间调用此方法可能会产生不同的结果。
输入应该正好是一个完整的源代码片段,即一个表达式、语句、变量声明、方法声明、类声明或导入。要将任意输入拆分为单个完整片段,请使用
analyzeCompletion(String)
。包装可能与通过
wrapper(Snippet)
返回的包装不匹配,如果源代码转换为Snippet
。- 参数:
-
input
- 生成包装的源输入 - 返回:
- 包装信息列表
-
sourceToSnippets
将代码片段的源代码转换为Snippet
对象(或在某些var声明的情况下为Snippet
对象列表,例如:int x, y, z;)。不安装代码片段:声明对其他代码片段不可访问;不添加导入。不执行代码片段。可以在
Snippet
对象上执行查询。Snippet.id()
将是"*UNASSOCIATED*"
。返回的代码片段与JShell
实例不相关联,因此尝试将它们传递给JShell
方法将引发IllegalArgumentException
。它们不会出现在代码片段的查询中 - 例如,JShell.snippets()
。输入的限制与
JShell.eval
中的限制相同。仅执行初步编译,足以构建
Snippet
。已知有错误的代码片段将作为ErroneousSnippet
返回,其他代码片段可能有错误,也可能没有错误。- 参数:
-
input
- 要转换的输入字符串 - 返回:
-
通常是
Snippet
的单例列表,但可能为空或多个 - 抛出:
-
IllegalStateException
- 如果JShell
实例已关闭。
-
dependents
返回可能需要更新的Snippet
集合,如果给定的Snippet
被更新。返回的集合设计为包容性的,可能包含许多误报。- 参数:
-
snippet
- 请求其依赖项的Snippet
- 返回:
- 依赖项的集合
-
highlights
返回可用于着色给定代码片段的Highlight
集合。返回的
Highlight
不重叠,并按其起始位置排序。- 参数:
-
snippet
- 应计算Highlight
的代码片段 - 返回:
-
计算的
Highlight
。 - 自:
- 19
-