Skip to content

2.4 template/context/domain/ 子包

2.4.1 Type(核心域对象,1807 行)

public class Type {
  private final String canonicalName;        // 全限定名
  private final String name;                 // 简名
  private final boolean isPrimitive;         // 基本类型
  private final String packageName;          // 包名
  private final List<Type> composedTypes;    // 组合类型(泛型参数)
  private final boolean array;               // 数组
  private final int arrayDimensions;         // 数组维度
  private final boolean varargs;             // 可变参数
  private final boolean isEnum;              // 枚举
  private final List<String> enumValues;     // 枚举值
  private final boolean isInterface;         // 接口
  private final boolean isAbstract;          // 抽象
  private final boolean isStatic;            // 静态
  private final boolean isFinal;             // final
  private final Type parentContainerClass;   // 父容器类
  private final String superClass;           // 父类
  private boolean dependenciesResolved;      // 依赖是否已解析
  private boolean hasDefaultConstructor;     // 有默认构造函数
  private final List<Method> methods;        // 方法列表
  private final Set<String> staticClassNames;// 静态类名
  private final Set<Field> fields;           // 字段列表
  private final List<Type> implementedInterfaces;  // 实现的接口
  private final boolean isAnnotatedByDI;     // DI 注解标记
  private boolean resolved;                  // 是否已解析

  // 构造函数
  public Type(PsiType, Object, TypeDictionary, int, boolean);
  public Type(PsiClass, TypeDictionary, int, boolean);

  // 依赖解析
  public void resolveDependencies(TypeDictionary, int, PsiType, boolean);
    // 解析类型的所有依赖:方法、字段、接口

  private void resolveFields(PsiClass, TypeDictionary, int);
    // 解析字段:过滤测试注解字段

  private void resolveImplementedInterfaces(PsiClass, TypeDictionary, boolean, int);
    // 解析实现的接口

  public List<Method> findConstructors();
    // 查找构造函数,按参数数量排序

  private boolean buildAnnotatedByDi(PsiClass, TypeDictionary);
    // 检查 DI 注解(@Service/@Component/@Repository 等)

  private boolean buildAnnotatedBySpringConfig(PsiClass, TypeDictionary);
    // 检查 Spring 配置注解

  // 工具方法
  public boolean isArray(), isCollection(), isEnum(), isInterface();
  public String renderArray();  // 渲染数组声明
}

2.4.2 Method

public class Method {
  private final String methodId;               // 方法唯一标识
  private final String name;                   // 方法名
  private final Type returnType;               // 返回类型
  private final String ownerClassCanonicalType;// 所属类全限定名
  private final List<Param> methodParams;      // 参数列表
  private final List<String> callParams;       // 调用参数
  private Set<String> exceptions;              // 异常列表
  private String methodExceptionTypes;         // 异常类型字符串
  // 访问修饰符
  private final boolean isPrivate, isProtected, isDefault, isPublic;
  private final boolean isAbstract, isNative, isStatic;
  private final boolean isSetter, isGetter, constructor;
  private final boolean overridden, inherited, isInInterface, isSynthetic;
  private final String propertyName;           // 属性名(getter/setter)
  private final boolean accessible, primaryConstructor, testable;
  private final Integer startOffset, endOffset; // 源码偏移量
  // 调用关系
  private final Set<MethodCall> directMethodCalls;     // 直接方法调用
  private final Set<MethodCall> methodCalls;           // 所有方法调用
  private final ResolveComponents resolveComponents;   // 解析组件
  private final Set<StaticMethodCall> staticMethodCalls; // 静态方法调用
  private final Set<Method> methodReferences;          // 方法引用
  private final Set<MethodCall> calledFamilyMembers;   // 家族方法调用
  private ResolvedBranch caseBranchSet;                // 用例分支集
  private final Set<Reference> internalReferences;     // 内部引用
  private final Set<Field> indirectlyAffectedFields;   // 间接影响字段
  private final List<CaseResult> caseResults;          // AI 生成的用例结果
  private final CaseResult caseResult;                 // 单个用例结果
  private final Set<String> reflectionMethods;         // 反射方法

  public boolean hasReturn();   // 是否有返回值
  public boolean hasParams();   // 是否有参数
  public void resolveExceptions();  // 从方法调用链解析异常
}

2.4.3 Field

public class Field {
  private final Type type;                       // 字段类型
  private final boolean overridden;              // 是否被覆盖
  private final boolean isFinal, isStatic;       // 修饰符
  private final String ownerClassCanonicalName;  // 所属类
  private final boolean isAnnotatedByDI;         // DI 注解
  private final boolean hasSetter;               // 有 setter
  private final boolean getProperty, setProperty;// Groovy 属性
  private final boolean isInitializedInline;     // 内联初始化
  private final boolean isAnnotatedBySpringValue;// @Value 注解
  private String name;                           // 字段名
  private boolean isNotInBuilder;                // 不在 builder 中

  // 构造时自动检测
  private boolean buildAnnotatedByDI(PsiField, PsiClass, TypeDictionary);
    // 检查 @Inject/@Autowired/@Resource 等 DI 注解
  private boolean buildAnnotatedBySpringConfig(PsiField, PsiClass, TypeDictionary);
    // 检查 @Value 注解
  private boolean buildHasSetter(PsiClass, String, TypeDictionary);
    // 检查是否有 setter 方法
}

2.4.4 Param, MethodCall, MethodCallArgument, StaticMethodCall, Reference, Node, SyntheticParam

// Param - 方法参数
public class Param {
  final Type type;
  private String name;
  private final ArrayList<Field> assignedToFields;  // 赋值给的字段
}

// MethodCall - 方法调用
public class MethodCall {
  private final String variableName;        // 调用变量名
  private final Method method;              // 被调方法
  private final List<MethodCallArgument> methodCallArguments;  // 调用参数
}

// MethodCallArgument - 方法调用参数
public class MethodCallArgument {
  private final String text;  // 参数文本
}

// StaticMethodCall - 静态方法调用(继承 MethodCall)
public class StaticMethodCall extends MethodCall {
  private String ownerClass;  // 静态方法所属类
}

// Reference - 引用
public class Reference {
  private final String referenceName;
  private final Type referenceType;
  private final Type ownerType;
  private final String referenceId;
}

// Node<T> - 递归树节点
public class Node<T> {
  private final T data;
  private final Node<T> parent;
  private final int depth;
  private Object needData;
  public boolean hasSameAncestor();  // 是否有相同祖先
}

// SyntheticParam - 合成参数(继承 Param)
public class SyntheticParam extends Param {
  private final UsageContext usageContext;  // Property/Generic
}

2.4.5 annotion 枚举

// DiClassAnnotationEnum - DI 类注解
SINGLETON("javax.inject.Singleton")
SERVICE("org.springframework.stereotype.Service")
COMPONENT("org.springframework.stereotype.Component")
REPOSITORY("org.springframework.stereotype.Repository")
CONTROLLER("org.springframework.stereotype.Controller")
REST_CONTROLLER("org.springframework.web.bind.annotation.RestController")
CONFIGURATION("org.springframework.context.annotation.Configuration")

// DiFieldAnnotationEnum - DI 字段注解
INJECT("javax.inject.Inject")
NAMED("javax.inject.Named")
QUALIFIER("javax.inject.Qualifier")
QUALIFIER_SPRING("org.springframework.beans.factory.annotation.Qualifier")
AUTOWIRED("org.springframework.beans.factory.annotation.Autowired")
RESOURCE("javax.annotation.Resource")

// SpringFieldAnnotationEnum - Spring 字段注解
VALUE("org.springframework.beans.factory.annotation.Value")

本项目仅供学习研究,逆向分析内容归原厂商所有。