INRIA / INRIA/spoon

[Bug]: CtComment getpath() throws a NullPointerException

Open
#5,522 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
2k
Forks
392
Avg merge
11h 24m
Merged PRs (30d)
36

Description

### Describe the bug

CtComment getpath() throws a NullPointerException, Observe that the error is caused by an unknown class(Test02) in the static code block

### Source code you are trying to analyze/transform

```Java
package org.example.module01;

import org.example.module02.Test02;

import java.util.HashMap;
import java.util.Map;

/**
* NumberCopier
*
* @since 2021-02-24
*/
public class NumberCopier {
private static Map, ConvertHandler> invokeMap = new HashMap<>(1);

static {
invokeMap.put(Test02.class, Test02::new);
}

/**
* ConvertHandler
*
* @since 2021-02-24
*/
@FunctionalInterface
private interface ConvertHandler {
/**
* doConvert
*
* @param dv dv
* @return Object
*/
Object doConvert(Double dv);
}
}
```

### Source code for your Spoon processing

```Java
Launcher launcher = new Launcher();
launcher.getEnvironment().setComplianceLevel(11);
launcher.getEnvironment().setAutoImports(true);
launcher.getEnvironment().setIgnoreDuplicateDeclarations(true);
launcher.addInputResource("the file path");
CtModel model = launcher.buildModel();
List elements = model.getElements(new TypeFilter<>(CtComment.class));
for (CtComment element : elements) {
element.getPath(); // throws NullPointerException
}
```

### Actual output

```Java
java.util.concurrent.CompletionException: java.lang.NullPointerException

at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1739)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1728)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.NullPointerException
at spoon.support.visitor.SignaturePrinter.writeNameAndParameters(SignaturePrinter.java:51)
at spoon.support.visitor.SignaturePrinter.visitCtExecutableReference(SignaturePrinter.java:45)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.accept(CtExecutableReferenceImpl.java:77)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.CtScanner.visitCtExecutableReferenceExpression(CtScanner.java:659)
at spoon.support.reflect.code.CtExecutableReferenceExpressionImpl.accept(CtExecutableReferenceExpressionImpl.java:24)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:149)
at spoon.reflect.visitor.CtScanner.visitCtInvocation(CtScanner.java:528)
at spoon.support.reflect.code.CtInvocationImpl.accept(CtInvocationImpl.java:46)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:149)
at spoon.reflect.visitor.CtScanner.visitCtBlock(CtScanner.java:321)
at spoon.support.reflect.code.CtBlockImpl.accept(CtBlockImpl.java:58)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.CtScanner.visitCtAnonymousExecutable(CtScanner.java:248)
at spoon.support.reflect.declaration.CtAnonymousExecutableImpl.accept(CtAnonymousExecutableImpl.java:37)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
at spoon.support.reflect.declaration.CtExecutableImpl.getSignature(CtExecutableImpl.java:182)
at spoon.reflect.path.CtElementPathBuilder.getSignature(CtElementPathBuilder.java:177)
at spoon.reflect.path.CtElementPathBuilder.getArg(CtElementPathBuilder.java:166)
at spoon.reflect.path.CtElementPathBuilder.fromElement(CtElementPathBuilder.java:93)
at spoon.reflect.path.CtElementPathBuilder.fromElement(CtElementPathBuilder.java:44)
at spoon.support.reflect.declaration.CtElementImpl.getPath(CtElementImpl.java:576)
```

### Expected output

_No response_

### Spoon Version

10.4.3-beta-2

### JVM Version

11

### What operating system are you using?

windows

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.