首页 > 编程语言 >解决java注解处理器生成的方法,在编译时报错“找不到符号”

解决java注解处理器生成的方法,在编译时报错“找不到符号”

时间:2023-04-03 17:01:24浏览次数:38  
标签:java fromString util names 注解 null maker 处理器

我的注解处理器,添加的其中一个方法中有一段AST代码如下:

JCTree.JCFieldAccess objectsIsNull = maker.Select(maker.Ident(names.fromString("java.util.Objects")),  names.fromString("isNull"));
JCTree.JCIf ifExpr1 = maker.If(
        maker.Apply(List.nil(), objectsIsNull, List.of(maker.Ident(param_code))),
        maker.Return(maker.Literal(TypeTag.BOT, null)), 
        null);

生成的java代码是: if (java.util.Objects.isNull(code)) return null; 

 

IDEA在build项目时,报错↓↓↓

Error:(3, 13) java: 找不到符号
符号: 变量 java.util.Objects
位置: 类 com.example.sbootjsp.enumtest.WeekdayEnum


而我在其他地方引用的java.lang.String是不会报错的。经查,java.util.Objects在jdk\src.zip包下,而java.lang.String在jdk\jre\lib\rt.jar中。
我试图在Project Structure中将src.zip加到项目的SDK里,但并未解决我的问题。

 

最后的解决方案见如下AST代码变动,IDEA不报这个“找不到符号”错误了。变更前后生成的java代码是一样的。

JCTree.JCFieldAccess objects = maker.Select(maker.Ident(names.fromString("java.util")), names.fromString("Objects"));
JCTree.JCFieldAccess objectIsNull = maker.Select(objects, names.fromString("isNull"));
JCTree.JCIf ifExpr1 = maker.If(
        maker.Apply(List.nil(), objectIsNull, List.of(maker.Ident(param_code))),
        maker.Return(maker.Literal(TypeTag.BOT, null)), null);

 

附:idea→Project Structure 配置SDK

 

标签:java,fromString,util,names,注解,null,maker,处理器
From: https://www.cnblogs.com/buguge/p/17283608.html

相关文章

  • 【Java 并发】【七】【Unsafe】什么是Unsafe及其作用
    1 前言这节我们来看看JDK底层的unsafe,因为很多的操作都是依赖于unsafe提供的功能的。2  unsafe是什么?unsafe是JDK提供的一个工具类,里面的方法大多是native方法,unsafe类是JDK给你提供的一个直接调用操作系统底层功能的一个工具类,unsafe提供了非常多操作系统级别的方法。(1)比......
  • PaddleOCR服务部署-并通过Java进行调用
    文章转载自: https://blog.csdn.net/f2315895270/article/details/128150679选择部署方式  官方推荐有以下几种:  Python推理  C++推理  Serving服务化部署(Python/C++)  Paddle-Lite端侧部署(ARM CPU/OpenCLARMGPU)  Paddle.js部署     由于我......
  • 【Java虚拟机探究】10.类装载器(下)
    上一篇我们总结了类加载器的基本原理和与应用程序相关的ClassLoader,并提到了双亲委派模式。本篇继续探讨类加载器的双亲委派模式,以及如何破坏双亲委派模式达到加载底层类的目的。1.双亲委派模式的问题我们回顾一下原来的应用程序的ClassLoader的加载模式:除了顶层的ClassLoader,每......
  • 【Java虚拟机探究】9.类装载器(上)
    在JVM类要通过类装载器(ClassLoader)进行装载后,才能进行执行。本篇总结了类装载器的一些知识。一、class装载验证流程在第一篇总结中介绍了JVM的内存结构:可以看到class文件首先要通过“类加载器子系统”,才能被加载到内存中处理。那么class文件是怎么通过类加载器加载至内存中的呢......
  • 【FastDFS分布式文件系统】6.FastDFS客户端启动与Java连接
    上一篇我们讲解了如何配置和启动FastDFS客户端,以及客户端上传下载的一些常用命令。那么,在许多需要进行分布式文件上传与下载的系统中,就不能像执行Linux命令一样去上传和下载文件,它们需要使用开发系统的语言去操作客户端使用其命令与服务端进行交互,此时FastDFS......
  • 为什么是至强Xeon处理器当做服务器CPU?他和普通台式CPU的区别
    为什么是至强Xeon处理器当做服务器CPU?他和普通台式CPU的区别相同的普通台式机CPU架构,Xeon处理器是高度受欢迎由于一些高级特性,比如更高的核心价值,支持更多的RAM,大的缓存内存和机器检查体系结构能够提供企业级的可靠性,可用性和可服务性特征负责处理硬件异常。现在,我们将回答......
  • 性能工具之JMeter两个Java API Demo
    概述本文演示两个通过JavaAPI执行JMeter脚本的示例主要功能在线生成jmx脚本(demo1)加载本地已有jmx脚本(demo2)运行多个Sampler将生成的TestPlan存储为.jmx文件执行单机压测将测试执行结果存储为.jtlor.csv文件示例Maven配置为了开始使用JMeterAPI,我们首先需要将它添加到......
  • java稀疏数组实现实例
    没有原理讲解,仅记录一个实现代码,作为参考和笔记使用如题,稀疏数组仅在原始数组有效数据较少的情况下起压缩空间的作用实现过程:首先为了方便查看和确认,封装一个打印二维数组的方法publicstaticvoidprintArray(int[][]arrays){for(int[]array:arrays){......
  • 114.二叉树展开为链表 Java
    114.二叉树展开为链表给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。示例1:输入:root=[1,2,5,3,4,null,6]输出......
  • 详细解析Java异步线程处理队列任务工具类以及实战
    场景待入快速理解小场景描述:【一群人】来到【一个大厅】办理业务,大厅中有【多个窗口】给我们办理业务。每个人都有自己要办事情,处理过程需要消耗时间。大厅根据人群多少,开始窗口梳理。如果把“一群人”理解成一群待处理的n个【任务】,把这群人排成一个长队就形成了一个【任......