首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当方法具有泛型类型时,Eclipse JDT AST分析返回null

是指在使用Eclipse JDT(Java Development Tools)AST(Abstract Syntax Tree)分析工具时,当方法的返回类型是泛型类型时,AST分析可能会返回null。

泛型是Java语言中的一种特性,它允许在定义类、接口或方法时使用类型参数,以在使用时指定具体的类型。在方法具有泛型类型时,返回类型可能是一个泛型类型,例如List<T>、Map<K, V>等。

Eclipse JDT AST是Eclipse提供的一个用于分析和操作Java源代码的工具。它可以将Java源代码解析为一个抽象语法树(AST),并提供了API来访问和修改这棵树。然而,由于泛型类型的灵活性和复杂性,AST分析在某些情况下可能无法正确地解析泛型类型,导致返回null。

解决这个问题的方法可以是使用更高版本的Eclipse JDT AST工具,因为新版本通常会修复一些已知的问题和bug。另外,可以尝试使用其他的Java源代码分析工具,如JavaParser、ANTLR等。

总结起来,当方法具有泛型类型时,Eclipse JDT AST分析返回null可能是由于AST工具本身的bug或限制导致的。为了解决这个问题,可以尝试使用更高版本的AST工具或使用其他的Java源代码分析工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android自定义Lint实践2——改进原生Detector

完善JDK 7新写法下的HashMap检测 上一篇博客中我们提到了对于HashMap检测的改进,但当时我们也在文章中提到: 代码很简单,总体就是获取变量定义的地方,将值传入原先的检测逻辑。...即只分析到了map所属的对象,而无法拿到map的类型。 显然,这个解析出来的节点不仅没有帮助我们,反而让我们偏离了我们要分析的节点。...通过gradle debug,我们发现ToastDetector在寻找包围Toast方法出现了问题。...; } 到这里总结一下: ToastDetector找到Toast的时候,它会寻找外围的方法,如果是匿名内部类的方法或者其他方法,他能够判断到并返回这个节点。...参考文献 Writing a Lint Check. eclipse.jdt.core.

89340

JVM性能优化系列-(5) 早期编译优化

在语义分析中,符号表所登记的内容将用于语义检查和产生中间代码。在目标代码生成阶段,对符号名进行地址分配,符号表是地址分配的依据 2....类型擦除 Java中的参数化类型只在源码中存在,在编译后的字节码中,已经被替换为原来的原生类型了,并且在相应的地方插入了强制转换代码。...所以说技术实际上就是 Java语言的一颗语法糖,Java语言中的实现方法称为类型擦除,基于这种方法实现的称为伪。...以下两个方法,在编译,由于类型擦除,变成了一样的原生类型List,因此方法的特征签名变得一致,导致无法编译。...只是因为加入返回值后,两个方法的字节码特征签名不一样了,所以可以共存。但是在JDK1.7和1.8中,依然无法通过,会报两个方法类型擦除后具有相同的特征签名。

26620
  • 如何编写一个面试能拿的出手的开源项目?

    我打算开发一个类似Eclipse AST View的插件,用来显示Javac编译器的抽象语法树。...Eclipse JDT中的增量式编译器ECJ的抽象语法树可以通过博文Eclipse AST抽象语法树API来了解,没有相关的书籍。...所以Eclipse AST View整个项目的实现也相对简单。...把Eclipse AST View项目的源代码导入到Eclipse中,这样就可以通过阅读、调试的方式来学习这个插件了,然后参考这个插件来写我自己的Javac AST View插件。...在查看器框架中,将模型称为输入,查看器本身充当控制器的角色,而树控件本身作为视图,输入改变,查看器负责相应地改变控件的内容。 查看器框架主要由以下几部分构成。

    87821

    java空指针报错_空指针异常是什么意思

    Java 中任何对象都有可能为空,当我们调用空对象的方法就会抛出 NullPointerException 空指针异常,这是一种非常常见的错误类型。...当你检测到 null,可以选择抛出更具针对性的异常类型,如 IllegalArgumentException,并添加消息内容。...check } 如果函数的返回值是集合类型结果为空,不要返回 null 值,而是返回一个空的集合;如果返回类型是对象,则可以选择抛出异常。...Spring JdbcTemplate 正是使用了这种处理方式: // 查询结果为空返回 new ArrayList() jdbcTemplate.queryForList("SELECT *...EmptyResultDataAccessException jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class); // 支持集合

    2.2K30

    @SuppressWarnings的常见用法

    Idea 设置检查,变量、方法未使用检查 从 eclipse 转换到idea 发现有很多不习惯的地方,比如说 String s; List list = new ArrayList(); 没有未使用的变量...,未检查,未使用的方法提示,特意查找了一下相关资料 设置检查 我使用的是mac电脑,windows电脑应该类似 打开如图 ?...3.为单行添加SuppressWarning 跳过检查 在单个代码上添加@SuppressWarning("rawtypes")可以跳过检查,但是需要注意: 还需要在方法上添加 @SuppressWarning...如上图所示,可以对单个设置@SuppressWarning 跳过类型检查 4....,抑制与空值分析相关的警告 rawtypes,抑制与使用raw类型相关的警告 resource,抑制与使用Closeable类型的资源相关的警告 restriction,抑制与使用不建议或禁止参照相关的警告

    2.4K50

    Java中的字符串的最大长度

    所以CONSTANT_Utf8_info常量对应的最大长度也就是java中UTF-8编码的字符串的长度,顺便提一下Class文件中的方法和字段也是引用CONSTANT_Utf8_info常量来描述名称的...String为变量 String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE了。...总结 首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer...Eclise编译超过65534长度的字符串不报错,是Eclipse有自己的Java编译器。JDT优化为了StringBuilder的append。 Eclise使用自己的编译器。...主要原因是JDT核心具有渐进式编译的能力,这意味着它会逐步编译代码中的更改(这也是Eclipse不需要编译按钮的原因,因为它会在检测到更改时自动编译)。但Oracle的JDK不支持增量编译。

    3.7K20

    Flutter之Json数据解析

    ,首先判断了传入的数据是否为 null ,为 null 则直接返回 null , 不为空则调用 asT 方法。...} } 代码也很简单,首先也是判断了传入的数据是否为 null ,为 null 则直接返回 null , 不为空则遍历 value 使用 map 调用 asT 方法进行转换,最终还是调用的 asT 方法...: 定义 List 为非空类型,且 List 里元素的类型也为非空类型,使用 convertListNotNull asT convert 、convertList 、 convertListNotNull...; } 首先通过 M.toString() 方法获取类型名称,然后与生成的实体类型进行比较,相同则调用对应实体类的 fromJson 方法。...、fromJsonAsT 的区别在于前者的为 List Item元素的类型,后者则直接为对应 List 的类型

    12.1K30

    JVM之早期(编译器)优化

    如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2. JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3....Java语法糖 类型擦除 与C#的不一样的是,Java的只存在于程序源码中,在编译后的字节码文件中,就已经替换成原来的原生类型,也称为裸类型,并且在相应的地方插入了强制转型代码。...对于运行期的Java语言来说,ArrayList与ArrayList就是同一个类,所以技术实际上是Java语言的一颗语法糖,Java语言中的实现方法称为类型擦除...,基于这种方法实现的称为伪。...故方法名一样,List和List作为参数,擦除使得两者的特征签名变得一样,导致拥有这两个方法无法重载。

    40230

    Kotlin与Java互操作

    把一个平台值赋给一个Kotlin变量,可以依赖类型推断(该变量会具有所推断出的平台类型,如上例中item所具有类型),或者选择我们所期望的类型(可空的或非空类型均可)。...把平台值传递给期待非空值等的Kotlin函数,也会触发一个断言。总的来说,编译器尽力阻止空值的传播(由于的原因,有时这不可能完全消除)。...:org.eclipse.jdt.annotation; Lombok:lombok.NonNull; JSR-305 支持 在JSR-305中,定义的 @Nonnull 注解来表示 Java 类型的可空性...这使得执行is检查不可能照顾到,Kotlin只允许is检查星投影的类型。...变的 Kotlin 的类使用了声明处,可以通过两种方式从Java代码中看到它们的用法。

    3.5K30

    听GPT 讲Rust源代码--srctools(2)

    AstPtrPolicy是一个结构体,用于表达AST节点之间的关系。它定义了一个策略,用于确定两个AST节点是否相等或相似。这个策略是根据节点的指针进行判断的。...AstPtrPolicy结构体具有两个类型参数:AST和CTX。其中,AST表示AST节点的类型,CTX表示全局上下文的类型。...例如,一个类型或函数使用了参数,这些参数和对应的类型信息就会保存在GenericArgs结构体中。...GenericArg: 这是一个枚举类型,表示Rust中参数的具体类型。它可以是一个具体的类型、一个抽象的类型关联或者其他形式的参数。...它们允许解析引擎分析和操作参数、参数列表、参数的来源以及约束等信息,从而提供更准确的代码分析和编辑体验。

    22210

    听GPT 讲Rust源代码--compiler(39)

    它会验证约束是否满足,并推导出符合约束的类型参数的上下文:参数在不同的上下文中可能具有不同的行为。...OutputTypeParameterConstraint trait: 这个trait定义了用于处理输出类型参数约束的方法参数作为输出,需要检查其约束条件是否满足。...InputTypeParameterConstraint trait: 这个trait定义了用于处理输入类型参数约束的方法参数作为输入时,需要检查其约束条件是否满足。...它通过遍历抽象语法树(AST)来识别和分析内置函数的调用,并检查它们的参数类型返回类型是否符合规定。...它具有以下几个主要作用: 收集使用的可变变量:GatherUsedMutsVisitor会遍历AST发现变量被使用时,会将该变量标记为已使用的可变变量。

    10210

    听GPT 讲Rust源代码--compiler(13)

    该文件中的 FindAmbiguousParameter 结构体用于查找类型推导中的模糊参数。类型系统无法自动地解析出正确的参数,会发生模糊参数错误。...该结构体的主要作用是为类型的构造函数创建替代品,并记录下来。...这两个参数在实现中被用来提供给其他方法使用,以便进行类型检查和转换等操作。...它们会分析结构体字段和枚举成员的类型,并检查模块间的引用关系是否正确。这些检查可以包括检查字段的可变性、类型的协变性和逆变性等。 此外,check.rs文件还包含了处理类型、边界和类型推导的函数。...这些函数会对参数进行推导,并检查类型参数是否满足所声明的边界条件。类型推导无法唯一确定类型,它们会生成错误或警告信息,帮助开发者修复代码中的类型问题。

    9310

    Flink 类型和序列化机制简介 转

    因而一些情况下(例如通过 URLClassLoader 动态加载的类),仍需手动处理;例如下图中对 DataSet 变换,使用 .returns() 方法声明返回类型。...图 3:使用 .returns 方法声明返回类型 下面是 ExecutionEnvironment 类的 registerType 方法,它可以向 Flink 注册子类信息(Flink 认识父类,但不一定认识子类的一些独特特性...对于类,需要借助 TypeHint 来保存类型信息 TypeHint 的原理是创建匿名子类,运行时 TypeExtractor 可以通过 getGenericSuperclass(). getActualTypeArguments...图 7:TypeHint 作为参数,保存信息 3....EclipseJDT 编译器会把 lambda 函数的签名等信息写入编译后的字节码中,而对于 javac 等常见的其他编译器,则不会这样做,因而 Flink 就无法获取具体类型信息了。

    1.2K30

    听GPT 讲Rust源代码--compiler(38)

    该文件的作用是为进一步的类型检查和静态分析提供基础。约束参数对于类型系统的约束和推导都非常重要,因此该文件的功能是不可或缺的。...类型参数的变异指的是一个类型参数被用作另一个类型参数,它在这个上下文中是如何变化的。这对于类型系统的正确性和的安全性是非常重要的。...一个类型参数被用作其他类型参数,涉及到该类型参数的生命周期约束也需要被考虑。这个结构体用于表示这些待检查的生命周期约束,并对其进行处理。...最小特化是指存在多个trait实现时,编译器会选择最具体的实现。这样可以确保在使用代码,正确地匹配实现。...Normalize trait是用来标记具有参数的类型,并提供了一个normalize方法来规范化该类型。 Test trait是一个简单的标记trait,没有任何方法

    7910

    深入浅出 TypeScript

    需要注意的是,number是类型,而Number是构造函数。 函数没有返回返回类型就是void。只有null和undefined可以赋给void 。...」给予开发者创造灵活、可重用代码的能力。 设计的关键目的是「在成员之间提供有意义的约束」,这些成员可以是:类的实例成员、类的方法、函数参数和函数返回值。...参数为可选,如果是严格检测模式,那么「可选类型无法兼容必选类型」,因为可选类型可能是undefined 。 枚举类型兼容性 枚举与数字类型相互兼容。...类型兼容性 本身就是不确定的类型,它的表现根据「是否被成员使用而不同」。...keyof,即索引类型查询操作符,我们可以用 keyof作用于 T 上来获取 T 上的所有 public属性名构成联合类型

    2.9K30

    eclipse3.7插件构建自定义右键菜单

    调用像getProject、getFolder 这样的方法,会将句柄返回给资源,即使指定的资源并不存在。因此在必要的时候要使用exists 方法来确定资源是否存在。...l  create:用数据流创建文件,方法中有一个参数是InputStream类型,要创建的文件的数据流就是在此流中。 l  getCharset:返回文件的编码。...l  setContents:用数据流设定文件的内容,方法中有一个参数是InputStream类型,要设定的文件的数据流就是在此流中。...因为这里用到了org.eclipse.jdt.core包所以添加。 点击添加: 然后点击Extensions出现扩展点的选择界面。 可以看到我们添加的菜单的内容。...选中objectContribution将其它objectClass设置成 org.eclipse.jdt.core.IJavaElement 表示在java工程上边能够看到提示菜单,设置完成后就可以运行一下示例看看效果了

    1.7K60

    听GPT 讲Rust源代码--srctools(8)

    在Rust中,一个所有权移动的值被传递给一个函数或方法,所有权就会转移给该函数或方法。然而,有时我们希望在转移所有权之前执行某些操作。...AstId:这是一个结构体,可能与语法分析树的节点相关联。它具有类型参数N,表示节点的类型。 Source:这是一个结构体,可能与源代码相关联。它具有类型参数T,表示源代码的类型。...某些模式是另一个模式的子集,可以将其合并为较广泛的模式。 collapse_match_guard 函数用于优化匹配表达式中的守卫条件。守卫条件是常量值,可以将其折叠为一个更简单的匹配分支。...BazBaz、Baz和Bof结构体:这些结构体没有明确的定义,在给定的上下文中可能是其他类型的结构体。 S(T):结构体,用于表示一个具有参数的结构体。...En:结构体En的作用是表示一个具有参数T的结构体。 Enum:枚举Enum的作用是表示一个具有不同的变体的枚举。

    27910

    Flink 类型和序列化机制简介

    因而一些情况下(例如通过 URLClassLoader 动态加载的类),仍需手动处理;例如下图中对 DataSet 变换,使用 .returns() 方法声明返回类型。...这里需要说明一下,returns() 接受三种类型的参数:字符串描述的类名(例如 "String")、TypeHint(接下来会讲到,用于类型参数)、Java 原生 Class(例如 String.class...对于非的类,直接传入 Class 对象即可 image.png 2....对于类,需要借助 TypeHint 来保存类型信息 TypeHint 的原理是创建匿名子类,运行时 TypeExtractor 可以通过 getGenericSuperclass(). getActualTypeArguments...EclipseJDT 编译器会把 lambda 函数的签名等信息写入编译后的字节码中,而对于 javac 等常见的其他编译器,则不会这样做,因而 Flink 就无法获取具体类型信息了。

    7.8K224

    听GPT 讲Rust源代码--compiler(30)

    BoundKind枚举类型表示了在访问绑定时的上下文,例如trait元素绑定(where语句中的约束)或者函数、方法、impl块中的类型参数约束。...LifetimeCtxt枚举类型表示了在处理生命周期的上下文,例如在函数、Trait对象或者约束中的生命周期参数。...这些结构体和枚举类型的定义提供了词法分析器模块在分析源代码所需的数据结构和类型定义,方便编译器进行语法分析和语义分析等后续步骤的处理。...WhereClause: 表示where字句,用于约束参数的类型或生命周期。 WhereBoundPredicate: 表示参数的约束。...例如,VisibilityNotPermitted结构体表示不允许的可见性错误,一个标识符具有不正确的可见性修饰,将使用该结构体记录错误信息。

    8110
    领券