AssertionError when annotation is placed on Type element
Los mantenedores suelen responder en 1 día
@lahodaj ya está trabajando en esto.
Desde el 2/8/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Apache NetBeans version
Apache NetBeans 32 latest daily build
What happened
I invoked code completion on a variable that was declared as var and where the actual type of the variable was a CompletableFuture. On the generic type information a @NonNull annotation was used.
The result of that invocation is an AssertionError from inside javac:
java.lang.AssertionError
at com.sun.tools.javac.util.Assert.error(Assert.java:155)
at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:62)
at com.sun.tools.javac.comp.Annotate.fromAnnotations(Annotate.java:163)
at com.sun.tools.javac.comp.Annotate.lambda$annotateTypeSecondStage$0(Annotate.java:1057)
at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:194)
at com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:322)
at org.netbeans.lib.nbjavac.services.NBClassFinder.lambda$getCompleter$0(NBClassFinder.java:100)
at com.sun.tools.javac.code.Symbol.complete(Symbol.java:703)
at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1472)
at com.sun.tools.javac.code.Symbol.apiComplete(Symbol.java:709)
at com.sun.tools.javac.code.Symbol$ClassSymbol.getInterfaces(Symbol.java:1484)
at com.sun.tools.javac.code.Types$16.visitClassType(Types.java:2642)
at com.sun.tools.javac.code.Types$16.visitClassType(Types.java:2633)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1056)
at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:5058)
at com.sun.tools.javac.code.Types.interfaces(Types.java:2630)
at com.sun.tools.javac.code.Types$MembersClosureCache.visitClassType(Types.java:3115)
at com.sun.tools.javac.code.Types$MembersClosureCache.visitClassType(Types.java:3055)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1056)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4978)
at com.sun.tools.javac.code.Types$MembersClosureCache.visitClassType(Types.java:3116)
at com.sun.tools.javac.code.Types$MembersClosureCache.visitClassType(Types.java:3055)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1056)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4978)
at com.sun.tools.javac.code.Types.membersClosure(Types.java:3138)
at com.sun.tools.javac.code.Types$ImplementationCache.get(Types.java:3012)
at com.sun.tools.javac.code.Types.implementation(Types.java:3050)
at com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:2239)
at com.sun.tools.javac.code.Symbol$MethodSymbol.implementation(Symbol.java:2232)
at com.sun.tools.javac.comp.Resolve.notOverriddenIn(Resolve.java:483)
at com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1598)
at com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1814)
at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1889)
at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1858)
at com.sun.tools.javac.comp.Resolve$12.lookup(Resolve.java:2831)
at com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3793)
at com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2828)
at com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2818)
at com.sun.tools.javac.comp.Attr.selectSym(Attr.java:4561)
at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:4449)
at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2601)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2665)
at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1885)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.Attr.visitReturn(Attr.java:2525)
at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1797)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:757)
at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:776)
at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1466)
at org.netbeans.lib.nbjavac.services.NBAttr.visitBlock(NBAttr.java:94)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1161)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:757)
at com.sun.tools.javac.comp.Attr.visitIf(Attr.java:2297)
at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1641)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:757)
at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:776)
at com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1466)
at org.netbeans.lib.nbjavac.services.NBAttr.visitBlock(NBAttr.java:94)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1161)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:679)
at com.sun.tools.javac.comp.DeferredAttr.attribSpeculative(DeferredAttr.java:530)
at com.sun.tools.javac.comp.Attr.attribToTree(Attr.java:430)
at com.sun.tools.javac.comp.Attr.attribStatToTree(Attr.java:423)
at org.netbeans.lib.nbjavac.services.NBAttr.attribStatToTree(NBAttr.java:148)
at com.sun.tools.javac.api.JavacTrees.attribStatToTree(JavacTrees.java:910)
at com.sun.tools.javac.api.JavacTrees.getAttrContext(JavacTrees.java:885)
at com.sun.tools.javac.api.JavacTrees.getScope(JavacTrees.java:751)
at org.netbeans.lib.nbjavac.services.NBJavacTrees.getScope(NBJavacTrees.java:110)
at org.netbeans.lib.nbjavac.services.NBJavacTrees.getScope(NBJavacTrees.java:48)
at org.netbeans.modules.java.completion.BaseTask.getEnvImpl(BaseTask.java:359)
at org.netbeans.modules.java.completion.BaseTask.getCompletionEnvironment(BaseTask.java:279)
at org.netbeans.modules.java.completion.JavaCompletionTask.resolve(JavaCompletionTask.java:302)
at org.netbeans.modules.java.completion.BaseTask.run(BaseTask.java:96)
at org.netbeans.modules.java.completion.JavaCompletionTask.run(JavaCompletionTask.java:67)
at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:341)
at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
at org.netbeans.modules.editor.java.JavaCompletionProvider$JavaCompletionQuery.query(JavaCompletionProvider.java:193)
at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:198)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1370)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1981)
Language / Project Type / NetBeans Component
Java Maven Application
How to reproduce
The original problem was observed in the OpenHAB Add-Ons repository:
After the if-Block insert a new line, enter future., the exception triggers immediately.
I tried to create a minimal reproducer and a maven project with org.eclipse.jdt.annotation configured and this code shows a slightly different stack trace, but judging from the end of the trace it looks like the same problem. Full project: hint_type_annotation.zip:
package eu.doppelhelix.test.hint_type_annotation;
import java.util.ArrayList;
import org.eclipse.jdt.annotation.NonNull;
public class HintTypeAnnotation {
public void main(String[] args) {
var future = new ArrayList<@NonNull String>();
}
}
create a new line in main and enter future. and you'll get this trace:
java.lang.AssertionError
at com.sun.tools.javac.util.Assert.error(Assert.java:155)
at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:62)
at com.sun.tools.javac.comp.Annotate.fromAnnotations(Annotate.java:163)
at com.sun.tools.javac.comp.Annotate.lambda$annotateTypeSecondStage$0(Annotate.java:1057)
at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:194)
at com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:322)
at org.netbeans.lib.nbjavac.services.NBClassFinder.lambda$getCompleter$0(NBClassFinder.java:100)
at com.sun.tools.javac.code.Symbol.complete(Symbol.java:703)
at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1472)
at com.sun.tools.javac.code.Symbol.apiComplete(Symbol.java:709)
at com.sun.tools.javac.jvm.ClassReader$1.getEnclosingType(ClassReader.java:616)
at com.sun.tools.javac.code.Type$StructuralTypeMapping.visitClassType(Type.java:243)
at com.sun.tools.javac.code.Types$Subst.visitClassType(Types.java:3404)
at com.sun.tools.javac.code.Types$Subst.visitClassType(Types.java:3370)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1056)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4978)
at com.sun.tools.javac.code.Types$TypeMapping.lambda$visit$0(Types.java:5086)
at com.sun.tools.javac.util.List.map(List.java:428)
at com.sun.tools.javac.code.Types$TypeMapping.visit(Types.java:5086)
at com.sun.tools.javac.code.Type$StructuralTypeMapping.visitMethodType(Type.java:290)
at com.sun.tools.javac.code.Type$StructuralTypeMapping.visitMethodType(Type.java:239)
at com.sun.tools.javac.code.Type$MethodType.accept(Type.java:1502)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4978)
at com.sun.tools.javac.code.Type.map(Type.java:319)
at com.sun.tools.javac.code.Types.subst(Types.java:3363)
at com.sun.tools.javac.code.Types$13.visitClassType(Types.java:2357)
at com.sun.tools.javac.code.Types$13.visitClassType(Types.java:2328)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1056)
at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4978)
at com.sun.tools.javac.code.Types.memberType(Types.java:2325)
at com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:2158)
at com.sun.tools.javac.code.Symbol$MethodSymbol.overrides(Symbol.java:2132)
at com.sun.tools.javac.model.JavacElements.overrides(JavacElements.java:698)
at com.sun.tools.javac.model.JavacElements.addMembers(JavacElements.java:571)
at com.sun.tools.javac.model.JavacElements.getAllMembers(JavacElements.java:561)
at com.sun.tools.javac.model.JavacElements.getAllMembers(JavacElements.java:90)
at org.netbeans.api.java.source.ElementUtilities.getMembers(ElementUtilities.java:241)
at org.netbeans.modules.java.completion.JavaCompletionTask.addMembers(JavaCompletionTask.java:4223)
at org.netbeans.modules.java.completion.JavaCompletionTask.insideMemberSelect(JavaCompletionTask.java:1936)
at org.netbeans.modules.java.completion.JavaCompletionTask.resolve(JavaCompletionTask.java:380)
at org.netbeans.modules.java.completion.BaseTask.run(BaseTask.java:96)
at org.netbeans.modules.java.completion.JavaCompletionTask.run(JavaCompletionTask.java:67)
at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:341)
at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
at org.netbeans.modules.editor.java.JavaCompletionProvider$JavaCompletionQuery.query(JavaCompletionProvider.java:193)
at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:198)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1370)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1981)
Did this work correctly in an earlier version?
No / Don't know
Operating System
Linux
JDK
OpenJDK 25
Apache NetBeans packaging
Own source build
Anything else
No response
Are you willing to submit a pull request?
No
- Lenguaje dominante
- Java
- Estrellas
- 3.1k
- Forks
- 939
- Merge medio
- 5 d 3 h
- PR fusionados (30 d)
- 22
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/netbeans
-
Contribution welcome kind:feature Platform
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/netbeans#9614 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
kind:bug LSP needs:triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
apache/netbeans#9548 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Editor Java kind:feature needs:triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
The main Options dialog window has buttons with OK on the left instead of on the right on LinuxAbiertokind:bug needs:triage os:linux os:macos Platform UI
Dificultad 1/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Incorrect DTD for wstcref-FilesAbiertokind:bug needs:triage
Dificultad 1/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
Todos los issues de apache/netbeans
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
NationalSecurityAgency/ghidra#9748 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
spring-mcp-tools
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
explyt/spring-plugin#591 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
jenkinsci/build-monitor-plugin#1367 ·
Los mantenedores suelen responder en 1 día
-
waiting-for-triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
spring-cloud/spring-cloud-openfeign#1443 ·
Los mantenedores suelen responder en 1 día