CodeNavi自定义规则节点属性(类型节点)

举报
yd_296685231 发表于 2024/06/27 10:59:09 2024/06/27
【摘要】 CodeNavi自定义规则的类型节点

节点


描述


示例


属性

名称

描述

值类型

示例

 

type



类型节点,是AST节点的通用属性,表示一个变量、字段、方法返回值等的类型,变量声明的类型按=“左边的声明类型算类型



public static <R> List<R> list(List<R> list) {
    List<R> values = new ArrayList<>(list.size());
    values.addAll(list);

    return values;
}



name

类型的名称(包含包名的全类型)
int
String

字符串

public class Person {

}

public class MyClass {
    public void fun() {
        Person person = new Person();
        List<R> values = new ArrayList<>(list.size());
    }
}

variableDeclaration vd where
    vd.type.name == "java.util.List";

definition

类型的定义

recordDeclaration节点

public class Person {

}

public class MyClass {
    public void fun() {
        Person person = new Person();
    }
}

variableDeclaration vd where
    vd.type.definition.name
    == "com.huawei.secbrella.kirin.Persion";

superTypes

类型的父类型

type节点

List<R> values = new ArrayList<>(list.size());

variableDeclaration vd where
    vd.type.superTypes contain parentType where
    parentType.name == "java.util.Collection";

arrayType



数组类型,继承于type节点



int[] arr = new int[1];



name

数组类型的名称

字符串

int[] arr = new int[1];

variableDeclaration vd where and(
    vd.type is arrayType,
    vd.type.name == "int[]"
);

dimension

数组的维度大小

数字

int[][] arr = new int[1][1];

variableDeclaration vd where and(
    vd.type is arrayType,
    vd.type.dimension == 2
);

baseType

数组类型的基础类型

objectType节点

int[] arr = new int[1];

variableDeclaration vd where and(
    vd.type is arrayType,
    vd.type.baseType.name == "int"
);

objectType







对象类型,包括类、接口类、枚举类、泛型类,继承与objectType节点







Map<String, String> map = new HashMap<>();
Person person = new Person();







name

类型的名称(包含包名的全类型)

名称

Person person;
Map<Integer, List<List<List<String>>>>

variableDeclaration vd where
     vd.type.name == "java.util.Map";

isBounded

型类型是否 extends/super 了另一个类, 仅对泛型类型生效

布尔值

Map<String, ? extends List> // true

variableDeclaration vd where
vd.type isBounded;

boundedOperator

型类型绑定符号是"extends" "super", 仅对泛型类型生效

字符串

Map<String, ? extends List>

variableDeclaration vd where
     vd.type.boundedOperator == "extends";

genericBoundedType

型类型绑定的类型

type节点

Map<String, ? extends List>

variableDeclaration vd where
     vd.type.boundedType.name endWith "List";

generics

类型的直接泛型类

type节点集合

Map<Integer, List<List<List<String>>>>

variableDeclaration vd where vd.type vt where
vt.generics.size() == 2;

allGenerics

类型的所有直接+间接泛型类

type节点集合

Map<Integer, List<List<List<String>>>>

variableDeclaration vd where vd.type vt where
    vt.allGenerics.size() == 5;

terminalGenerics

类型的末端泛型类

node list

Map<Integer, List<List<List<String>>>>

variableDeclaration vd where vd.type vt where
    vt.terminalGenerics contain ty where ty.name == "java.lang.String";


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。