模块  jdk.jshell
软件包  jdk.jshell

Class SourceCodeAnalysis


  • public abstract class SourceCodeAnalysis
    extends Object
    为源代码输入提供分析实用程序。 可选功能,提供更丰富的交互式体验。 包括完成分析:输入是完整的代码片段吗? 我需要提示更多输入吗? 添加分号会使它完整吗? 有不止一个片段吗? 还包括完成建议,可以在制表符完成中使用。
    从以下版本开始:
    9
    • 方法详细信息

      • 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文本 input当前位置
        anchor - 传出参数 - 当一个选项完成时,锚点和光标之间的文本将被删除并替换为给定选项
        结果
        给定输入的候选连续列表。
      • documentation

        public abstract List<SourceCodeAnalysis.Documentation> documentation​(String input,
                                                                             int cursor,
                                                                             boolean computeJavadoc)
        计算给定用户输入的文档。 当多个元素与用户的输入匹配时,可能会返回多个Documentation对象(如重载方法)。
        参数
        input - 迄今为止用户编写的代码段
        cursor - 给定 input文本 input当前位置
        computeJavadoc - 如果除了签名之外还应计算给定输入的javadoc, computeJavadoc 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检索包装器的 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在一些变种声明的情况下的物体,例如:整数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
        结果
        家属的集合