#2468·lombok

[BUG] 在调用父接口默认方法时,val 会抛出 AssertionError

作者: ZenLiuCN创建于 2020年5月18日更新于 2026年9月1日

Describe the bug val for hold retrun value on call default method on interface;

To Reproduce

java
import lombok.NonNull;
import lombok.val;

import java.util.HashSet;
import java.util.Set;

public interface LombokTest {
    @NonNull
    default Set<String> getSet(){
        return  new HashSet<>();
    }
    interface LombokMiddle extends LombokTest{

    }
    interface LombokThird extends LombokTest{

    }
    class LombokImpl implements LombokThird{
        @Override
        public @NonNull Set<String> getSet() {
         //got error on compile 
//Error:java: Lombok visitor handler class lombok.javac.handlers.HandleVal failed: java.lang.AssertionError
            val set=LombokThird.super.getSet();
            set.add("oh");
            return set;
        }
    }

    public static void main(String[] args) {
        val sets=new LombokImpl();
        System.out.println(sets.getSet().toString());
    }
}
here is the stack
```java
java.lang.AssertionError
	at com.sun.tools.javac.util.Assert.error(Assert.java:126)
	at com.sun.tools.javac.comp.Resolve.resolveSelf(Resolve.java:3404)
	at com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3399)
	at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3278)
	at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1897)
	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
	at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3250)
	at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1897)
	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
	at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1825)
	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1465)
	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
	at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:618)
	at com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1075)
	at com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:852)
	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
	at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:645)
	at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:661)
	at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1124)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:909)
	at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
	at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:645)
	at lombok.javac.JavacResolution.attrib(JavacResolution.java:235)
	at lombok.javac.JavacResolution.memberEnterAndAttribute(JavacResolution.java:203)
	at lombok.javac.JavacResolution.resolveMethodMember(JavacResolution.java:151)
	at lombok.javac.handlers.HandleVal.visitLocal(HandleVal.java:133)
	at lombok.javac.JavacNode.traverse(JavacNode.java:120)
	at lombok.javac.JavacAST.traverseChildren(JavacAST.java:133)
	at lombok.javac.JavacNode.traverse(JavacNode.java:105)
	at lombok.javac.JavacAST.traverseChildren(JavacAST.java:133)
	at lombok.javac.JavacNode.traverse(JavacNode.java:95)
	at
…

内容来源: projectlombok/lombok