Coder Social home page Coder Social logo

rain's Introduction

IceCream

Hello.

⭐ Github Stats

rain's People

Contributors

coide-saltedfish avatar ddreame avatar icecream-qaq avatar lovesasuna avatar xiaomaomogu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

rain's Issues

对 GraalVM Native-Image 进行支持。

提供一个启动项,使其在启动后可以生成为 GraalVM Native-Image 优化的 jar。

将需要反射扫描的内容,扫描收集整理,生成 MateDataClass。
将需要对类进行增强的内容,或是通过 YuHook 添加的钩子,直接写入源 Class。
将需要反射操作的内容,通过 ASM 向源 Class 直接生成操作方法。
举例:
当依赖注入需要使用反射写值的时候,对源 Class 添加一个 YuCoreInjectSetXXX 的方法,以便运行时可以脱离反射。

路由改造计划。

本 issue 梳理所有有关路由改造的 issue 工作顺序,以及记录工作进度。

  1. 对 DefaultControllerLoader 进行改动,将 ActionInvoker 由路由最后节点转为 Action 路由声明节点。(#12
  2. 对 DefaultControllerLoader 进行改动,使其能对 Action 类别进行区分。(#11
  3. 将下级路由匹配由本级调整到下级判断,以便支持更复杂的路由匹配方式。(#19
  4. 将路由 Path 部分由数组转换为链表。(#17

额外:

  1. 对 DefaultControllerLoader 进行改动,使其支持通过 Kotlin DSL 方式编写 Controller。(#15

对 DefaultControllerLoader 进行改动,使其能对 Action 类别进行区分。

原方案:
扫描被 Action 注解标注的方法。
新方案:
扫描所有注解,并对判断注解是否具有 Action 注解,如果注解具有 Action 注解,则根据注解上标注的 Named 注解确定注解类别。

将 Action 加以分类,以便一个 Controller 内的 Action 可以通过不同注解确定其工作范围。
举例:
在 QQ Robot 上,我们可以通过 @PrivateAction 和 @GroupAction 直接确定 Action 是为群聊还是私聊工作的。
在 Web MVC 上,我们可以通过 @GetAction,@PostAction 等,确定 Action 是为什么请求方法工作的。

为依赖注入提供严格模式与非严格模式

依赖注入内容默认不可为空。

Java 用户可通过 Nullable 注解声明可空。

Kotlin 会直接根据类型声明判断可空。
在 Kotlin 的构造函数中,如 parameter 含有默认值,则在注入值为空时尝试使用默认值。

RainCode错误

发送图片之后,把Message转成RainCode,图片转换异常
)O0DK5X$ }I} F~1B@U8){T

classloader错误

java.lang.LinkageError: loader constraint violation: when resolving method 'void me.kuku.yuq.entity.MessageEntity.setArtGroupMessageSource(com.icecreamqaq.yuq.artqq.message.ArtGroupMessageSource)' the class loader com.IceCreamQAQ.Yu.loader.AppClassloader @2df3b89c of the current class, me/kuku/yuq/event/Save, and the class loader 'app' for the method's defining class, me/kuku/yuq/entity/MessageEntity, have different Class objects for the type com/icecreamqaq/yuq/artqq/message/ArtGroupMessageSource used in the signature (me.kuku.yuq.event.Save is in unnamed module of loader com.IceCreamQAQ.Yu.loader.AppClassloader @2df3b89c, parent loader 'app'; me.kuku.yuq.entity.MessageEntity is in unnamed module of loader 'app')

对 YuContext 进行改动,使其支持依赖注入写值时优先调用 Setter,并且支持 Setter 注入。

@Inject 注解标注于 field 且 存在 Java 标准的 Setter 时,依赖注入写值优先调用 Setter,失败后尝试反射写值。

@Inject 注解标注于 Setter 时,则直接通过 Setter 注入。(此时并不会判断是否有与之关联的 field。)
Named 参数可以直接标注于 Setter 上,也可以标注于方法内的参数上,但是 Setter 上的 Named 注解优先级更高。

对 DefaultControllerLoader 进行改动,将 ActionInvoker 由路由最后节点转为 Action 路由声明节点。

原方案:
当路由为:aaa/bbb
ActionInvoker 将位于 根路由/aaa/bbb。
新方案:
当路由为:aaa/bbb
ActionInvoker 将位于 根路由/aaa
后续/bbb 将转由 ActionInvoker 判断。

转换后,将能提供路由中值的智能 Default 填充,以及后续的可选路由参数。
举例:
路由为:aaa/[bbb]/[ccc]
原有路由方案当 bbb/ccc 为空时则无法触发路由。
新方案根据所选参数,可以在 bbb/ccc 为空时,自动根据 Default 声明自动添加默认值。

将路由 Path 部分由数组转换为链表

原有路由分词结构为数组,不够灵活且无法调整。
将路由分词修改为双向链表,方便路由处理过程中替换,修改,增加新的路由节点,以供完成更复杂的分词。

【YuHook】允许 YuHook 读写目标方法所属类 Field 的。

提供 InstanceField 注解,允许标记于 getter 与 setter,将根据名字映射为被 Hook 目标方法的所属类的目标 Field 的 getter 与 setter。

在 HookRunnable 被加载时,注入实现 getter 与 setter 的字节码。
如果必要,为目标 Field 在目标类生成 getter 与 setter 避免修改可见性。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.