Module jdk.jshell
Package jdk.jshell

Class SourceCodeAnalysis

java.lang.Object
jdk.jshell.SourceCodeAnalysis

public abstract class SourceCodeAnalysis extends Object
提供源代码输入的分析工具。可选功能,提供更丰富的交互体验。包括完成分析:输入是否是完整的代码片段?是否需要提示输入更多内容?添加分号是否会使其完整?是否有多个片段?等等。还包括完成建议,如在制表完成中可能使用的建议。
自:
9
  • Method Details

    • 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)
      为给定用户输入的文档。
      参数:
      input - 用户迄今为止编写的代码片段
      cursor - 给定input文本中当前光标位置
      computeJavadoc - 如果应该计算给定输入的javadoc以及签名,则为true
      返回:
      给定用户输入的文档,如果有多个元素匹配输入,则返回多个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对象(或在某些var声明的情况下为Snippet对象列表,例如:int x, y, z;)。不安装代码片段:声明对其他代码片段不可访问;不添加导入。不执行代码片段。

      可以在Snippet对象上执行查询。 Snippet.id()将是"*UNASSOCIATED*"。返回的代码片段与JShell实例不相关联,因此尝试将它们传递给JShell方法将引发IllegalArgumentException。它们不会出现在代码片段的查询中 - 例如,JShell.snippets()

      输入的限制与JShell.eval中的限制相同。

      仅执行初步编译,足以构建Snippet。已知有错误的代码片段将作为ErroneousSnippet返回,其他代码片段可能有错误,也可能没有错误。

      参数:
      input - 要转换的输入字符串
      返回:
      通常是Snippet的单例列表,但可能为空或多个
      抛出:
      IllegalStateException - 如果JShell实例已关闭。
    • 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