feat(AnnoDoc): 2.23 kotlin anno doc | kotlin 注解注释 Fixed #78

This commit is contained in:
林万程
2025-04-20 22:42:09 +08:00
parent 156ed6f014
commit bc3e0c747f
8 changed files with 270 additions and 256 deletions

104
README.md
View File

@@ -123,109 +123,7 @@ Show doc comment in the Project view Tree, line End, json, other
## Change Notes 更新说明
<h2>English Change Notes:</h2>
<ul>
<li>2.22 Add project-view-tree ollama models blobs comment from manifests
<li>2.21 Add project-view-tree use JS/TS/Vue "export default" doc for tree doc
<li>2.20 Add External Comment support Vue src/router tree doc
<li>2.19 ★ line-end-comment support HTML(Vue) Tag/Attr doc since 2022.3.1
<li>2.18 Add line-end-comment support injected language like SQL
<li>2.17 Add External Comment support *.key.regexp and MyBatis xml demo in Git
<li>2.16 Add line-end-comment support Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 Add line-end-comment java anno doc
<li>2.14 Add line-end-comment java enum doc for Yes(1, "Yes")
<li>2.13 ★ Cache for 2023.3
<li>2.12 Add project-view-tree support Markdown and Asciidoc
<li>2.11 Add project-view-tree description from pom.xml and build.gradle
<li>2.10 Add line-end-comment not doc comment
<li>2.09 Add line-end-comment support Python doc strings
<li>2.08 Add i18n and chinese
<li>2.07 Add global-setting reset default
<li>2.06 Add project-view-tree xx-abc.xxx from Abc.java doc
<li>2.05 Add line-end-comment json doc from xxx.json.tsv
<li>2.04 Add line-end-comment json dict doc from (key).tsv
<li>2.03 Add live-templates input `doc` `docc` -> /** */
<li>2.02 Add line-end-comment show before doc for `isA(xxx)` and `a.set(b.get)`
<li>2.01 Add line-end-comment support SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ support all JetBrains IDE
<li>1.24 Add PopupMenu Copy FileName:LineNumber
<li>1.23 Add project-view-tree setting for show when compact middle packages
<li>1.22 Add PopupMenu Copy ClassName.MethodName
<li>1.21 Add line-end-comment default skip only English when system lang is not `en`
<li>1.20 Add line-end-comment get doc first sentence checkbox
<li>1.19 Add line-end-comment supper doc at @Override, support doc tag like @author
<li>1.18 Add External Comment effect at previous layer when folder named -1
<li>1.17 Add line-end-comment skip doc text or class/member name by regexp
<li>1.16 Add line-end-comment skip when comments have been added
<li>1.15 Add line-end-comment support COBOL ext '', 'cbl', 'cob', 'cobol'
<li>1.14 Add line-end-comment skip Annotation, skip only English (ASCII)
<li>1.13 Add line-end-comment Copy With Line Comment & Add Line Comment
<li>1.12 ★ External Comment for COBOL etc
<li>1.11 Add json key jump to field
<li>1.10 Add project-view-tree for package from parent or other project
<li>1.9 Add project-view-tree for "xx-ClassNameOrSimpleName.json" and SPI file
<li>1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
<li>1.7 Add line-end-comment setting for prefix and count
<li>1.6 Add line-end-comment independent switch for call, new, ref
<li>1.5 Add line-end-comment find next loop when none
<li>1.4 Add line-end-comment find element right to left
<li>1.3 ★ project-view-tree file and member comment
<li>1.2 Add line-end-comment settings for class prefix filter
<li>1.1 Add line-end-comment settings for text color
</ul>
<h2>中文更新说明:</h2>
<ul>
<li>2.22 增加 文件树注释 ollama models 文件夹从 manifests 获取 blobs 文件注释
<li>2.21 增加 文件树注释 用 JS/TS/Vue "export default" 注释当文件注释
<li>2.20 增加 外部注释 支持 Vue 路由标题文件树注释
<li>2.19 ★ 行末注释 支持 HTML(Vue) 标签/属性 注释从 2022.3.1 起
<li>2.18 增加 行末注释 支持注入语言如 SQL
<li>2.17 增加 tsv 注释 支持 *.key.regexp 与 Mybatis xml 示例在 Git
<li>2.16 增加 行末注释 支持 Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 增加 行末注释 java 注解注释
<li>2.14 增加 行末注释 java 枚举注释用于 Yes(1, "是")
<li>2.13 ★ 缓存用于支持 2023.3
<li>2.12 增加 文件树注释 支持 Markdown and Asciidoc
<li>2.11 增加 文件树注释 模块描述 来自 pom.xml 和 build.gradle
<li>2.10 增加 行末注释 非文档注释
<li>2.09 增加 行末注释 支持 Python 文档字符串
<li>2.08 增加 多语言与中文支持
<li>2.07 增加 全局设置 复位默认值
<li>2.06 增加 文件树注释 xx-abc.xxx 来自 Abc.java 的文档注释
<li>2.05 增加 行末注释 json 字段注释从 xxx.json.tsv 读取
<li>2.04 增加 行末注释 json 字典注释从 键名.tsv 读取
<li>2.03 增加 活动模板 输入 doc / docc 等生成 /** */
<li>2.02 增加 行末注释 `isA(xxx)``a.set(b.get)` 显示前一个注释
<li>2.01 增加 行末注释 支持 SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ 支持所有 JetBrains 软件
<li>1.24 增加 右键菜单 复制 文件名:行号
<li>1.23 增加 文件树注释 折叠中间包时显示中间包注释设置
<li>1.22 增加 右键菜单 复制 类名.方法名
<li>1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
<li>1.20 增加 行末注释 获取第一句注释选项
<li>1.19 增加 行末注释 @Override 显示父方法注释,支持 @author 等注释标签
<li>1.18 增加 tsv 注释 文件夹名为 -1 时配置在上一层文件夹生效
<li>1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
<li>1.16 增加 行末注释 已经添加行末注释时跳过
<li>1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
<li>1.14 增加 行末注释 忽略注解 与 忽略纯英文
<li>1.13 增加 行末注释 带注释复制 和 添加注释
<li>1.12 ★ tsv 注释 用于 COBOL 等
<li>1.11 增加 json 跳转到字段
<li>1.10 增加 文件树注释 在父包和其他项目的包中获取
<li>1.9 增加 文件树注释 "xx-类全名或简名.json" 和 SPI
<li>1.8 ★ 行末注释 "xx-类全名或简名.json"
<li>1.7 增加 行末注释 前缀和对象数设置
<li>1.6 增加 行末调用 new引用注释独立开关
<li>1.5 增加 行末注释 没有注释时循环查找下一个对象
<li>1.4 增加 行末注释 从右往左查找行末注释对象
<li>1.3 ★ 文件树注释 (左侧项目导航文件树)
<li>1.2 增加 行末注释 类前缀配置
<li>1.1 增加 行末注释 颜色配置
</ul>
[build.gradle](build.gradle)
### Demo 示例

View File

@@ -4,7 +4,120 @@ plugins {
}
group 'io.github.linwancen'
version '2.22.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
version '2.23.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
patchPluginXml {
// The performance of 2019.3 has been greatly improved.
// change plugins without restarting the IDE in 2020.1.
// 2020.2 JCEF, 2022.2 JDK17 java2d perf improved, 2023.3 AI
sinceBuild = '201.1'
untilBuild = ''
changeNotes = """
<h2>English Change Notes:</h2>
<ul>
<li>2.23 Add line-end-comment kotlin anno doc
<li>2.22 Add project-view-tree ollama models blobs comment from manifests
<li>2.21 Add project-view-tree use JS/TS/Vue "export default" doc for tree doc
<li>2.20 Add External Comment support Vue src/router tree doc
<li>2.19 ★ line-end-comment support HTML(Vue) Tag/Attr doc since 2022.3.1
<li>2.18 Add line-end-comment support injected language like SQL
<li>2.17 Add External Comment support *.key.regexp and MyBatis xml demo in Git
<li>2.16 Add line-end-comment support Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 Add line-end-comment java anno doc
<li>2.14 Add line-end-comment java enum doc for Yes(1, "Yes")
<li>2.13 ★ Cache for 2023.3
<li>2.12 Add project-view-tree support Markdown and Asciidoc
<li>2.11 Add project-view-tree description from pom.xml and build.gradle
<li>2.10 Add line-end-comment not doc comment
<li>2.09 Add line-end-comment support Python doc strings
<li>2.08 Add i18n and chinese
<li>2.07 Add global-setting reset default
<li>2.06 Add project-view-tree xx-abc.xxx from Abc.java doc
<li>2.05 Add line-end-comment json doc from xxx.json.tsv
<li>2.04 Add line-end-comment json dict doc from (key).tsv
<li>2.03 Add live-templates input `doc` `docc` -> /** */
<li>2.02 Add line-end-comment show before doc for `isA(xxx)` and `a.set(b.get)`
<li>2.01 Add line-end-comment support SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ support all JetBrains IDE
<li>1.24 Add PopupMenu Copy FileName:LineNumber
<li>1.23 Add project-view-tree setting for show when compact middle packages
<li>1.22 Add PopupMenu Copy ClassName.MethodName
<li>1.21 Add line-end-comment default skip only English when system lang is not `en`
<li>1.20 Add line-end-comment get doc first sentence checkbox
<li>1.19 Add line-end-comment supper doc at @Override, support doc tag like @author
<li>1.18 Add External Comment effect at previous layer when folder named -1
<li>1.17 Add line-end-comment skip doc text or class/member name by regexp
<li>1.16 Add line-end-comment skip when comments have been added
<li>1.15 Add line-end-comment support COBOL ext '', 'cbl', 'cob', 'cobol'
<li>1.14 Add line-end-comment skip Annotation, skip only English (ASCII)
<li>1.13 Add line-end-comment Copy With Line Comment & Add Line Comment
<li>1.12 ★ External Comment for COBOL etc
<li>1.11 Add json key jump to field
<li>1.10 Add project-view-tree for package from parent or other project
<li>1.9 Add project-view-tree for "xx-ClassNameOrSimpleName.json" and SPI file
<li>1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
<li>1.7 Add line-end-comment setting for prefix and count
<li>1.6 Add line-end-comment independent switch for call, new, ref
<li>1.5 Add line-end-comment find next loop when none
<li>1.4 Add line-end-comment find element right to left
<li>1.3 ★ project-view-tree file and member comment
<li>1.2 Add line-end-comment settings for class prefix filter
<li>1.1 Add line-end-comment settings for text color
</ul>
<h2>中文更新说明:</h2>
<ul>
<li>2.23 增加 行末注释 kotlin 注解注释
<li>2.22 增加 文件树注释 ollama models 文件夹从 manifests 获取 blobs 文件注释
<li>2.21 增加 文件树注释 用 JS/TS/Vue "export default" 注释当文件注释
<li>2.20 增加 外部注释 支持 Vue 路由标题文件树注释
<li>2.19 ★ 行末注释 支持 HTML(Vue) 标签/属性 注释从 2022.3.1 起
<li>2.18 增加 行末注释 支持注入语言如 SQL
<li>2.17 增加 tsv 注释 支持 *.key.regexp 与 Mybatis xml 示例在 Git
<li>2.16 增加 行末注释 支持 Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 增加 行末注释 java 注解注释
<li>2.14 增加 行末注释 java 枚举注释用于 Yes(1, "是")
<li>2.13 ★ 缓存用于支持 2023.3
<li>2.12 增加 文件树注释 支持 Markdown and Asciidoc
<li>2.11 增加 文件树注释 模块描述 来自 pom.xml 和 build.gradle
<li>2.10 增加 行末注释 非文档注释
<li>2.09 增加 行末注释 支持 Python 文档字符串
<li>2.08 增加 多语言与中文支持
<li>2.07 增加 全局设置 复位默认值
<li>2.06 增加 文件树注释 xx-abc.xxx 来自 Abc.java 的文档注释
<li>2.05 增加 行末注释 json 字段注释从 xxx.json.tsv 读取
<li>2.04 增加 行末注释 json 字典注释从 键名.tsv 读取
<li>2.03 增加 活动模板 输入 doc / docc 等生成 /** */
<li>2.02 增加 行末注释 `isA(xxx)` 和 `a.set(b.get)` 显示前一个注释
<li>2.01 增加 行末注释 支持 SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ 支持所有 JetBrains 软件
<li>1.24 增加 右键菜单 复制 文件名:行号
<li>1.23 增加 文件树注释 折叠中间包时显示中间包注释设置
<li>1.22 增加 右键菜单 复制 类名.方法名
<li>1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
<li>1.20 增加 行末注释 获取第一句注释选项
<li>1.19 增加 行末注释 @Override 显示父方法注释,支持 @author 等注释标签
<li>1.18 增加 tsv 注释 文件夹名为 -1 时配置在上一层文件夹生效
<li>1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
<li>1.16 增加 行末注释 已经添加行末注释时跳过
<li>1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
<li>1.14 增加 行末注释 忽略注解 与 忽略纯英文
<li>1.13 增加 行末注释 带注释复制 和 添加注释
<li>1.12 ★ tsv 注释 用于 COBOL 等
<li>1.11 增加 json 跳转到字段
<li>1.10 增加 文件树注释 在父包和其他项目的包中获取
<li>1.9 增加 文件树注释 "xx-类全名或简名.json" 和 SPI
<li>1.8 ★ 行末注释 "xx-类全名或简名.json"
<li>1.7 增加 行末注释 前缀和对象数设置
<li>1.6 增加 行末调用 new引用注释独立开关
<li>1.5 增加 行末注释 没有注释时循环查找下一个对象
<li>1.4 增加 行末注释 从右往左查找行末注释对象
<li>1.3 ★ 文件树注释 (左侧项目导航文件树)
<li>1.2 增加 行末注释 类前缀配置
<li>1.1 增加 行末注释 颜色配置
</ul>
"""
}
repositories {
mavenCentral()
@@ -86,117 +199,6 @@ tasks.withType(Javadoc) {
options.encoding = 'UTF-8'
}
patchPluginXml {
// The performance of 2019.3 has been greatly improved.
// change plugins without restarting the IDE in 2020.1.
// 2020.2 JCEF, 2022.2 JDK17 java2d perf improved, 2023.3 AI
sinceBuild = '201.1'
untilBuild = ''
changeNotes = """
<h2>English Change Notes:</h2>
<ul>
<li>2.22 Add project-view-tree ollama models blobs comment from manifests
<li>2.21 Add project-view-tree use JS/TS/Vue "export default" doc for tree doc
<li>2.20 Add External Comment support Vue src/router tree doc
<li>2.19 ★ line-end-comment support HTML(Vue) Tag/Attr doc since 2022.3.1
<li>2.18 Add line-end-comment support injected language like SQL
<li>2.17 Add External Comment support *.key.regexp and MyBatis xml demo in Git
<li>2.16 Add line-end-comment support Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 Add line-end-comment java anno doc
<li>2.14 Add line-end-comment java enum doc for Yes(1, "Yes")
<li>2.13 ★ Cache for 2023.3
<li>2.12 Add project-view-tree support Markdown and Asciidoc
<li>2.11 Add project-view-tree description from pom.xml and build.gradle
<li>2.10 Add line-end-comment not doc comment
<li>2.09 Add line-end-comment support Python doc strings
<li>2.08 Add i18n and chinese
<li>2.07 Add global-setting reset default
<li>2.06 Add project-view-tree xx-abc.xxx from Abc.java doc
<li>2.05 Add line-end-comment json doc from xxx.json.tsv
<li>2.04 Add line-end-comment json dict doc from (key).tsv
<li>2.03 Add live-templates input `doc` `docc` -> /** */
<li>2.02 Add line-end-comment show before doc for `isA(xxx)` and `a.set(b.get)`
<li>2.01 Add line-end-comment support SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ support all JetBrains IDE
<li>1.24 Add PopupMenu Copy FileName:LineNumber
<li>1.23 Add project-view-tree setting for show when compact middle packages
<li>1.22 Add PopupMenu Copy ClassName.MethodName
<li>1.21 Add line-end-comment default skip only English when system lang is not `en`
<li>1.20 Add line-end-comment get doc first sentence checkbox
<li>1.19 Add line-end-comment supper doc at @Override, support doc tag like @author
<li>1.18 Add External Comment effect at previous layer when folder named -1
<li>1.17 Add line-end-comment skip doc text or class/member name by regexp
<li>1.16 Add line-end-comment skip when comments have been added
<li>1.15 Add line-end-comment support COBOL ext '', 'cbl', 'cob', 'cobol'
<li>1.14 Add line-end-comment skip Annotation, skip only English (ASCII)
<li>1.13 Add line-end-comment Copy With Line Comment & Add Line Comment
<li>1.12 ★ External Comment for COBOL etc
<li>1.11 Add json key jump to field
<li>1.10 Add project-view-tree for package from parent or other project
<li>1.9 Add project-view-tree for "xx-ClassNameOrSimpleName.json" and SPI file
<li>1.8 ★ line-end-comment for "xx-ClassNameOrSimpleName.json"
<li>1.7 Add line-end-comment setting for prefix and count
<li>1.6 Add line-end-comment independent switch for call, new, ref
<li>1.5 Add line-end-comment find next loop when none
<li>1.4 Add line-end-comment find element right to left
<li>1.3 ★ project-view-tree file and member comment
<li>1.2 Add line-end-comment settings for class prefix filter
<li>1.1 Add line-end-comment settings for text color
</ul>
<h2>中文更新说明:</h2>
<ul>
<li>2.22 增加 文件树注释 ollama models 文件夹从 manifests 获取 blobs 文件注释
<li>2.21 增加 文件树注释 用 JS/TS/Vue "export default" 注释当文件注释
<li>2.20 增加 外部注释 支持 Vue 路由标题文件树注释
<li>2.19 ★ 行末注释 支持 HTML(Vue) 标签/属性 注释从 2022.3.1 起
<li>2.18 增加 行末注释 支持注入语言如 SQL
<li>2.17 增加 tsv 注释 支持 *.key.regexp 与 Mybatis xml 示例在 Git
<li>2.16 增加 行末注释 支持 Rust, Ruby, PHP, C/C++/Object C, Scala, Groovy
<li>2.15 增加 行末注释 java 注解注释
<li>2.14 增加 行末注释 java 枚举注释用于 Yes(1, "是")
<li>2.13 ★ 缓存用于支持 2023.3
<li>2.12 增加 文件树注释 支持 Markdown and Asciidoc
<li>2.11 增加 文件树注释 模块描述 来自 pom.xml 和 build.gradle
<li>2.10 增加 行末注释 非文档注释
<li>2.09 增加 行末注释 支持 Python 文档字符串
<li>2.08 增加 多语言与中文支持
<li>2.07 增加 全局设置 复位默认值
<li>2.06 增加 文件树注释 xx-abc.xxx 来自 Abc.java 的文档注释
<li>2.05 增加 行末注释 json 字段注释从 xxx.json.tsv 读取
<li>2.04 增加 行末注释 json 字典注释从 键名.tsv 读取
<li>2.03 增加 活动模板 输入 doc / docc 等生成 /** */
<li>2.02 增加 行末注释 `isA(xxx)` 和 `a.set(b.get)` 显示前一个注释
<li>2.01 增加 行末注释 支持 SQL, JavaScript, Python, Golang, Kotlin
<li>2.00 ★★ 支持所有 JetBrains 软件
<li>1.24 增加 右键菜单 复制 文件名:行号
<li>1.23 增加 文件树注释 折叠中间包时显示中间包注释设置
<li>1.22 增加 右键菜单 复制 类名.方法名
<li>1.21 增加 行末注释 系统语言非英文时 默认 忽略纯英文
<li>1.20 增加 行末注释 获取第一句注释选项
<li>1.19 增加 行末注释 @Override 显示父方法注释,支持 @author 等注释标签
<li>1.18 增加 tsv 注释 文件夹名为 -1 时配置在上一层文件夹生效
<li>1.17 增加 行末注释 根据正则表达式跳过指定注释文本或类成员名字的注释
<li>1.16 增加 行末注释 已经添加行末注释时跳过
<li>1.15 增加 行末注释 COBOL 拓展名支持 无拓展名、cbl、cob、cobol
<li>1.14 增加 行末注释 忽略注解 与 忽略纯英文
<li>1.13 增加 行末注释 带注释复制 和 添加注释
<li>1.12 ★ tsv 注释 用于 COBOL 等
<li>1.11 增加 json 跳转到字段
<li>1.10 增加 文件树注释 在父包和其他项目的包中获取
<li>1.9 增加 文件树注释 "xx-类全名或简名.json" 和 SPI
<li>1.8 ★ 行末注释 "xx-类全名或简名.json"
<li>1.7 增加 行末注释 前缀和对象数设置
<li>1.6 增加 行末调用 new引用注释独立开关
<li>1.5 增加 行末注释 没有注释时循环查找下一个对象
<li>1.4 增加 行末注释 从右往左查找行末注释对象
<li>1.3 ★ 文件树注释 (左侧项目导航文件树)
<li>1.2 增加 行末注释 类前缀配置
<li>1.1 增加 行末注释 颜色配置
</ul>
"""
}
test {
useJUnitPlatform()
}

View File

@@ -18,7 +18,7 @@ import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.util.PsiTreeUtil;
import io.github.linwancen.plugin.show.bean.LineInfo;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.java.doc.AnnoDoc;
import io.github.linwancen.plugin.show.java.doc.AnnoDocJava;
import io.github.linwancen.plugin.show.java.doc.EnumDoc;
import io.github.linwancen.plugin.show.java.doc.NewDoc;
import io.github.linwancen.plugin.show.java.doc.ParamDoc;
@@ -101,7 +101,7 @@ public class JavaLangDoc extends BaseTagLangDoc<PsiDocComment> {
return EnumDoc.enumDoc((PsiEnumConstant) resolve);
}
if (resolve instanceof PsiJvmModifiersOwner) {
return AnnoDoc.annoDoc(info, (PsiJvmModifiersOwner) resolve);
return AnnoDocJava.INSTANCE.annoDoc(info, (PsiJvmModifiersOwner) resolve);
}
return null;
}

View File

@@ -5,6 +5,7 @@ import com.intellij.psi.impl.file.PsiPackageBase;
import com.intellij.psi.util.PsiTreeUtil;
import io.github.linwancen.plugin.show.bean.LineInfo;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.java.kt.AnnoDocKt;
import io.github.linwancen.plugin.show.lang.base.BaseTagLangDoc;
import io.github.linwancen.plugin.show.lang.base.DocFilter;
import org.jetbrains.annotations.NotNull;
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.kdoc.psi.api.KDoc;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocName;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection;
import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag;
import org.jetbrains.kotlin.psi.KtAnnotated;
import org.jetbrains.kotlin.psi.KtNameReferenceExpression;
import java.util.List;
@@ -29,6 +31,18 @@ public class KotlinLangDoc extends BaseTagLangDoc<KDocSection> {
return info.appSettings.showLineEndCommentKotlin;
}
@Override
public @Nullable <T extends SettingsInfo> String resolveDocPrint(@NotNull T info, @NotNull PsiElement resolve) {
@Nullable String resolveDocPrint = super.resolveDocPrint(info, resolve);
if (resolveDocPrint != null) {
return resolveDocPrint;
}
if (resolve instanceof KtAnnotated) {
return AnnoDocKt.INSTANCE.annoDoc(info, (KtAnnotated) resolve);
}
return null;
}
@Override
protected <T extends SettingsInfo> boolean parseBaseComment(@NotNull T info) {
return info.appSettings.showLineEndCommentKotlinBase;

View File

@@ -10,50 +10,18 @@ import com.intellij.psi.PsiDocCommentOwner;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiJvmModifiersOwner;
import com.intellij.psi.PsiMethod;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.settings.GlobalSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.apache.commons.lang3.StringUtils;
import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class AnnoDoc {
public class AnnoDocJava extends BaseAnnoDoc<PsiJvmModifiersOwner> {
private AnnoDoc() {}
public static AnnoDocJava INSTANCE = new AnnoDocJava();
private AnnoDocJava() {}
@Nullable
public static <T extends SettingsInfo> String annoDoc(@NotNull T info, @NotNull PsiJvmModifiersOwner owner) {
@NotNull ProjectSettingsState projectSettings = info.projectSettings;
@NotNull GlobalSettingsState globalSettings = info.globalSettings;
// annoDocEffect first because default false
if (projectSettings.annoDocEffect && projectSettings.projectFilterEffective) {
@Nullable String doc = annoDocArr(owner, projectSettings.annoDoc);
if (StringUtils.isNotBlank(doc)) {
return doc;
}
}
if (globalSettings.annoDocEffect && projectSettings.globalFilterEffective) {
return annoDocArr(owner, globalSettings.annoDoc);
}
return null;
}
@Nullable
private static String annoDocArr(@NotNull PsiJvmModifiersOwner owner, @NotNull String[][] lines) {
for (@NotNull String[] arr : lines) {
if (arr.length < 3) {
continue;
}
@Nullable String s = annoDocMatch(owner, arr);
if (s != null) {
return s;
}
}
return null;
}
@Nullable
private static String annoDocMatch(@NotNull PsiJvmModifiersOwner owner, @NotNull String[] arr) {
protected String annoDocMatch(@NotNull PsiJvmModifiersOwner owner, @NotNull String[] arr) {
if (typeMatch(owner, arr[0])) {
return annoDocName(owner, arr);
}

View File

@@ -0,0 +1,85 @@
package io.github.linwancen.plugin.show.java.kt;
import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.KtAnnotated;
import org.jetbrains.kotlin.psi.KtAnnotationEntry;
import org.jetbrains.kotlin.psi.KtExpression;
import org.jetbrains.kotlin.psi.KtFunction;
import org.jetbrains.kotlin.psi.KtProperty;
import org.jetbrains.kotlin.psi.KtPureClassOrObject;
import org.jetbrains.kotlin.psi.KtStringTemplateExpression;
import org.jetbrains.kotlin.psi.ValueArgument;
import org.jetbrains.kotlin.psi.ValueArgumentName;
public class AnnoDocKt extends BaseAnnoDoc<KtAnnotated> {
public static AnnoDocKt INSTANCE = new AnnoDocKt();
private AnnoDocKt() {}
@Nullable
protected String annoDocMatch(@NotNull KtAnnotated owner, @NotNull String[] arr) {
if (typeMatch(owner, arr[0])) {
for (KtAnnotationEntry entry : owner.getAnnotationEntries()) {
String s = annoDocName(entry, arr);
if (s != null) {
return s;
}
}
}
return null;
}
private static boolean typeMatch(KtAnnotated owner, @NotNull String type) {
switch (type) {
case "field":
return owner instanceof KtProperty;
case "method":
return owner instanceof KtFunction;
case "class":
return owner instanceof KtPureClassOrObject;
case "!doc":
case "all":
return true;
default:
return false;
}
}
@Nullable
private static String annoDocName(@NotNull KtAnnotationEntry entry, @NotNull String[] arr) {
Name shortName = entry.getShortName();
if (shortName == null) {
return null;
}
String name = shortName.asString();
String annoName = arr[1];
int i = annoName.lastIndexOf('.');
if (i > 0) {
annoName = annoName.substring(i + 1);
}
if (!annoName.equals(name)) {
return null;
}
for (ValueArgument argument : entry.getValueArguments()) {
ValueArgumentName argumentName = argument.getArgumentName();
String method = argumentName == null ? "value" : argumentName.getAsName().asString();
if (arr[2].equals(method)) {
KtExpression expression = argument.getArgumentExpression();
if (expression instanceof KtStringTemplateExpression) {
String text = expression.getText();
if (text.length() >= 2) {
String s = text.substring(1, text.length() - 1);
if (!s.isEmpty()) {
return s;
}
}
}
}
}
return null;
}
}

View File

@@ -0,0 +1,47 @@
package io.github.linwancen.plugin.show.lang.base;
import io.github.linwancen.plugin.show.bean.SettingsInfo;
import io.github.linwancen.plugin.show.settings.GlobalSettingsState;
import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class BaseAnnoDoc<O> {
@Nullable
public <T extends SettingsInfo> String annoDoc(@NotNull T info, @NotNull O owner) {
@NotNull ProjectSettingsState projectSettings = info.projectSettings;
@NotNull GlobalSettingsState globalSettings = info.globalSettings;
// annoDocEffect first because default false
if (projectSettings.annoDocEffect && projectSettings.projectFilterEffective) {
@Nullable String doc = annoDocArr(owner, projectSettings.annoDoc);
if (StringUtils.isNotBlank(doc)) {
return doc;
}
}
if (globalSettings.annoDocEffect && projectSettings.globalFilterEffective) {
return annoDocArr(owner, globalSettings.annoDoc);
}
return null;
}
@Nullable
protected String annoDocArr(@NotNull O owner, @NotNull String[][] lines) {
for (@NotNull String[] arr : lines) {
if (arr.length < 3) {
continue;
}
@Nullable String s = annoDocMatch(owner, arr);
if (s != null) {
return s;
}
}
return null;
}
@Nullable
protected String annoDocMatch(@NotNull O owner, @NotNull String[] arr) {
return null;
}
}

View File

@@ -161,7 +161,7 @@ public abstract class BaseLangDoc extends EditorLinePainter {
return null;
}
if (resolve == null) {
return null;
continue;
}
@Nullable String resolveDoc = resolveDoc(info, resolve);
if (resolveDoc != null) {