Skip to content

Commit

Permalink
inherit
Browse files Browse the repository at this point in the history
  • Loading branch information
tanghanzheng committed Aug 31, 2022
1 parent 8bf12ab commit 2458d45
Show file tree
Hide file tree
Showing 17 changed files with 397 additions and 134 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

import java.lang.annotation.*;

/**
* 通过该注解来继承指定类的字段和方法
*/
@Repeatable(InheritClasses.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
Expand All @@ -15,20 +18,22 @@
Class<?>[] sources();

/**
* 是否继承父类属性
* 是否继承父类字段和方法
*/
boolean inheritSuper() default false;

/**
* 排除哪几个名称的属性
* 排除指定名称的字段
*/
String[] excludeFields() default {};

/**
* 排除哪几个名称的方法
* 排除指定名称的方法
*/
String[] excludeMethods() default {};


/**
* 继承标识
*/
InheritFlag[] flags() default {};
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* {@link InheritClass} 可重复添加
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritClasses {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

import java.lang.annotation.*;

/**
* 通过该注解来继承指定类的字段
*/
@Repeatable(InheritFields.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
Expand All @@ -15,14 +18,17 @@
Class<?>[] sources();

/**
* 是否继承父类属性
* 是否继承父类字段
*/
boolean inheritSuper() default false;

/**
* 排除哪几个名称的属性
* 排除指定名称的字段
*/
String[] excludeFields() default {};

/**
* 继承标识
*/
InheritFlag[] flags() default {};
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.github.linyuzai.inherit.core.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* {@link InheritField} 可重复添加
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritFields {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

import java.lang.annotation.*;

/**
* 通过该注解来继承指定类的方法
*/
@Repeatable(InheritMethods.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
Expand All @@ -15,14 +18,17 @@
Class<?>[] sources();

/**
* 是否继承父类属性
* 是否继承父类方法
*/
boolean inheritSuper() default false;

/**
* 排除哪几个名称的方法
* 排除指定名称的方法
*/
String[] excludeMethods() default {};

/**
* 继承标识
*/
InheritFlag[] flags() default {};
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* {@link InheritMethod} 可重复添加
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritMethods {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,37 @@
package com.github.linyuzai.inherit.core.flag;

/**
* 继承标识
* <p>
* 用于扩展额外功能
*/
public enum InheritFlag {

/**
* 继承字段时有效
* <p>
* 根据字段生成 builder 对应的方法
*/
BUILDER,

/**
* 继承字段时有效
* <p>
* 根据字段生成 getter 对应的方法
*/
GETTER,

/**
* 继承字段时有效
* <p>
* 根据字段生成 setter 对应的方法
*/
SETTER,

/**
* 表示同时处理自身字段和方法
* <p>
* 搭配其他标识使用
*/
OWN
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,21 @@
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.util.Names;

/**
* 继承处理器
* <p>
* 用于扩展基于标识的逻辑处理
*/
public interface InheritHandler {

/**
* 执行处理
*
* @param tree 字段或方法
* @param targetClass 所属的类
* @param treeMaker 节点工具
* @param names 名称工具
* @param level 层级
*/
void handle(JCTree tree, JCTree.JCClassDecl targetClass, TreeMaker treeMaker, Names names, int level);
}
Loading

0 comments on commit 2458d45

Please sign in to comment.