eclipse-jdt / eclipse-jdt/eclipse.jdt.core

Occasional NPE dereferencing variable bindings/element inside a lambda

Open
#2,269 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
237
Forks
195
Avg merge
1d 12h
Merged PRs (30d)
47

Description

Add this to ASTConverter18Tests, and watch it fail with a NPE
```java
// Inspired from ResolveTests18.test429934
public void test429934_DOM() throws CoreException {
this.workingCopy = getWorkingCopy("/Converter18/src/X.java", true/*resolve*/);
String contents = """
interface Function {
R apply(T t);
}
public class X {
public static void main(String[] args) {
Function f= (String s) -> s;
}
}
""";

String selection = "s";
int start = contents.lastIndexOf(selection);
int length = selection.length();

Name name = (Name)NodeFinder.perform(buildAST(contents, this.workingCopy, false), start, length);
IVariableBinding variableBinding = (IVariableBinding)name.resolveBinding();
assertTrue(variableBinding.getJavaElement() instanceof ILocalVariable);
}
```
throws
```
java.lang.NullPointerException: Cannot invoke "org.eclipse.jdt.internal.compiler.lookup.TypeBinding.original()" because "lambdaExpression.resolvedType" is null
at org.eclipse.jdt.internal.core.LambdaExpression.findLambdaSuperType(LambdaExpression.java:66)
at org.eclipse.jdt.internal.core.LambdaExpression.(LambdaExpression.java:57)
at org.eclipse.jdt.internal.core.LambdaFactory.createLambdaExpression(LambdaFactory.java:30)
at org.eclipse.jdt.core.dom.MethodBinding$LambdaMethod.getUnresolvedJavaElement(MethodBinding.java:629)
at org.eclipse.jdt.core.dom.MethodBinding.getJavaElement(MethodBinding.java:304)
at org.eclipse.jdt.core.dom.VariableBinding.getUnresolvedJavaElement(VariableBinding.java:296)
at org.eclipse.jdt.core.dom.VariableBinding.getJavaElement(VariableBinding.java:161)
at org.eclipse.jdt.core.tests.dom.ASTConverter18Test.test429934_DOM(ASTConverter18Test.java:5506)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.