Skip to content

it

当前上下文对象。这是最重要的工具,它提供对正在处理元素的访问。it 的类型取决于规则上下文。

上下文类型

it 的类型取决于规则上下文:

规则上下文it 类型说明
类规则ScriptPsiClassContext类级别操作
方法规则ScriptPsiMethodContext方法级别操作
字段规则ScriptPsiFieldContext字段级别操作
参数规则ScriptPsiParameterContext参数级别操作
类型规则ScriptTypeContext类型信息

通用方法(所有上下文)

这些方法在所有上下文类型中都可用:

名称和文档

方法返回类型说明
it.name()String获取元素名称
it.getName()String?获取元素名称(可空)
it.doc()String?获取 Javadoc/KDoc 注释文本
it.doc(tag)String?获取特定文档标签值
it.docs(tag)List<String>?获取文档标签的所有值
it.hasDoc(tag)Boolean检查文档标签是否存在
it.doc(tag, subTag)String?获取带子标签的文档标签(如 @param name desc

注解

方法返回类型说明
it.hasAnn(name)Boolean检查注解是否存在
it.ann(name)String?获取注解属性值(默认为 "value")
it.ann(name, attr)String?获取特定注解属性作为字符串
it.annValue(name)Any?获取注解属性值作为 Any
it.annValue(name, attr)Any?获取特定注解属性作为 Any
it.annMap(name)Map<String, Any?>?获取所有注解属性作为 Map
it.annMaps(name)List<Map<String, Any?>>?获取所有可重复注解

修饰符

方法返回类型说明
it.hasModifier(modifier)Boolean检查修饰符是否存在(如 "static"、"final")
it.modifiers()List<String>获取所有修饰符

源代码

方法返回类型说明
it.sourceCode()String?获取完整源代码
it.defineCode()String?获取不带方法体的声明
it.psi()PsiElement?获取底层 PSI 元素

扩展数据

方法返回类型说明
it.getExt(name)Any?从上下文获取扩展值
it.setExt(name, value)void在上下文设置扩展值

上下文信息

方法返回类型说明
it.contextType()String获取上下文类型("class"、"method"、"field"、"param")

类上下文方法

itScriptPsiClassContext(类规则)时可用:

基本信息

方法返回类型说明
it.qualifiedName()String?获取完全限定类名
it.packageName()String?获取包名
it.type()ScriptTypeContext获取类型信息

成员

方法返回类型说明
it.methods()Array<ScriptPsiMethodContext>获取所有方法
it.methodCnt()Int获取方法数量
it.fields()Array<ScriptPsiFieldContext>获取所有字段
it.fieldCnt()Int获取字段数量

类型检查

方法返回类型说明
it.isExtend(superClass)Boolean检查是否继承/实现某个类
it.isMap()Boolean检查是否是 Map 类型
it.isCollection()Boolean检查是否是 Collection 类型
it.isArray()Boolean检查是否是数组类型
it.isInterface()Boolean检查是否是接口
it.isAnnotationType()Boolean检查是否是注解类型
it.isEnum()Boolean检查是否是枚举
it.isPrimitive()Boolean检查是否是基本类型
it.isPrimitiveWrapper()Boolean检查是否是基本类型包装类
it.isNormalType()Boolean检查是否是普通类型(基本类型、包装类、String、Object)

可见性

方法返回类型说明
it.isPublic()Boolean检查是否是 public
it.isProtected()Boolean检查是否是 protected
it.isPrivate()Boolean检查是否是 private
it.isPackagePrivate()Boolean检查是否是包私有

类层次结构

方法返回类型说明
it.isInnerClass()Boolean检查是否是内部类
it.isStatic()Boolean检查是否是 static(对于内部类)
it.outerClass()ScriptPsiClassContext?获取内部类的外部类
it.superClass()ScriptPsiClassContext?获取父类
it.extends()Array<ScriptPsiClassContext>?获取继承的类
it.implements()Array<ScriptPsiClassContext>?获取实现的接口

方法上下文方法

itScriptPsiMethodContext(方法规则)时可用:

返回类型

方法返回类型说明
it.returnType()ScriptTypeContext?获取返回类型
it.type()ScriptTypeContext?returnType() 的别名

参数

方法返回类型说明
it.args()Array<ScriptPsiParameterContext>获取所有参数
it.params()Array<ScriptPsiParameterContext>args() 的别名
it.parameters()Array<ScriptPsiParameterContext>args() 的别名
it.argTypes()Array<ScriptTypeContext>获取参数类型
it.argCnt()Int获取参数数量
it.paramCnt()IntargCnt() 的别名
it.isVarArgs()Boolean检查是否有可变参数

所属类

方法返回类型说明
it.containingClass()ScriptPsiClassContext?获取所属类
it.defineClass()ScriptPsiClassContext?containingClass() 的别名

方法属性

方法返回类型说明
it.isConstructor()Boolean检查是否是构造函数
it.isOverride()Boolean检查是否重写父类方法
it.isDefault()Boolean检查是否是默认方法(接口)
it.isAbstract()Boolean检查是否是抽象方法
it.isSynchronized()Boolean检查是否是同步方法
it.isNative()Boolean检查是否是本地方法
it.throwsExceptions()Array<String>获取抛出的异常

字段上下文方法

itScriptPsiFieldContext(字段规则)时可用:

类型

方法返回类型说明
it.type()ScriptTypeContext获取字段类型
it.jsonType()ScriptTypeContexttype() 的别名

所属类

方法返回类型说明
it.containingClass()ScriptPsiClassContext?获取所属类
it.defineClass()ScriptPsiClassContext?containingClass() 的别名

字段属性

方法返回类型说明
it.isEnumField()Boolean检查是否是枚举常量
it.asEnumField()ScriptPsiEnumConstantContext?获取枚举常量上下文
it.isStatic()Boolean检查是否是 static
it.isFinal()Boolean检查是否是 final
it.isTransient()Boolean检查是否是 transient
it.isVolatile()Boolean检查是否是 volatile
it.constantValue()Any?获取编译时常量值

参数上下文方法

itScriptPsiParameterContext(参数规则)时可用:

类型

方法返回类型说明
it.type()ScriptTypeContext获取参数类型
it.jsonType()ScriptTypeContexttype() 的别名

参数属性

方法返回类型说明
it.isVarArgs()Boolean检查是否是可变参数
it.isFinal()Boolean检查是否是 final

声明

方法返回类型说明
it.method()ScriptPsiMethodContext?获取声明该参数的方法
it.declaration()ScriptItContext?获取声明该参数的元素

类型上下文方法

itScriptTypeContext 时可用:

名称

方法返回类型说明
it.name()String获取完整类型名(如 "java.util.List<java.lang.String>")
it.getName()Stringname() 的别名
it.simpleName()String获取简单类型名(如 "List")
it.getSimpleName()StringsimpleName() 的别名

类型检查

方法返回类型说明
it.isExtend(superClass)Boolean检查是否继承某个类
it.isMap()Boolean检查是否是 Map 类型
it.isCollection()Boolean检查是否是 Collection 类型
it.isArray()Boolean检查是否是数组类型
it.isPrimitive()Boolean检查是否是基本类型
it.isPrimitiveWrapper()Boolean检查是否是基本类型包装类
it.isNormalType()Boolean检查是否是普通类型
it.isInterface()Boolean检查是否是接口
it.isAnnotationType()Boolean检查是否是注解类型
it.isEnum()Boolean检查是否是枚举

成员

方法返回类型说明
it.methods()Array<ScriptPsiMethodContext>获取所有方法
it.fields()Array<ScriptPsiFieldContext>获取所有字段

示例

类规则示例

properties
class.name=groovy:'''
if (it.isExtend("java.lang.Exception")) {
    return it.simpleName() + "Exception"
}
return it.name()
'''

方法规则示例

properties
method.name=groovy:'''
def name = it.name()
if (it.hasAnn("org.springframework.web.bind.annotation.GetMapping")) {
    def path = it.ann("GetMapping", "value")
    return path ?: name
}
return name
'''

字段规则示例

properties
field.mock=groovy:'''
def type = it.type()
if (type.isExtend("java.lang.Number")) {
    return "0"
}
if (type.name() == "java.lang.String") {
    return "mock_" + it.name()
}
if (type.isCollection()) {
    return "[]"
}
return null
'''

参数规则示例

properties
param.name=groovy:'''
def name = it.name()
if (it.hasAnn("org.springframework.web.bind.annotation.RequestParam")) {
    return it.ann("RequestParam", "value") ?: name
}
return name
'''

相关链接

  • api - 用于修改端点元数据的 API 工具
  • fieldContext - 字段上下文工具

基于 Apache-2.0 许可发布