INRIA / INRIA/spoon

[Bug]: StackOverflowError occurred in CtExecutableReference.getExecutableDeclaration

Open
#5,584 5 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

StackOverflowError occurred in CtExecutableReference.getExecutableDeclaration

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

```Java
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Function;

class A {
public void checkDataValidDimension(String versionCode, List fcBasicDataList,
BiFunction isMatchFunc, Function msgFunc,
BiConsumer matchedFunc) {

// dimensionVo List
List dimensionVoList = getFcDimensionListByVersionCode(versionCode);
fcBasicDataList.stream().forEach(checkVo -> {
for (FcBasicDataFullVo dimensionVo : dimensionVoList) {
if (isMatchFunc.apply(checkVo, dimensionVo)) {
}
}
});
}
}
```

### 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(filteringFolder);
launcher.run();
List elements = model.getElements(
new spoon.reflect.visitor.filter.TypeFilter<>(CtExecutableReference.class));
for (CtExecutableReference element : elements) {
element.getExecutableDeclaration();
}
```

### Actual output

```Java
java.lang.StackOverflowError
at spoon.support.util.internal.ElementNameMap.get(ElementNameMap.java:169)
at spoon.support.reflect.declaration.CtPackageImpl.getPackage(CtPackageImpl.java:130)
at spoon.reflect.factory.PackageFactory.getPackageFromModule(PackageFactory.java:216)
at spoon.reflect.factory.PackageFactory.get(PackageFactory.java:176)
at spoon.reflect.factory.TypeFactory.get(TypeFactory.java:434)
at spoon.reflect.factory.TypeFactory.get(TypeFactory.java:562)
at spoon.support.reflect.reference.CtTypeReferenceImpl.getTypeDeclaration(CtTypeReferenceImpl.java:245)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
at spoon.support.reflect.declaration.CtTypeImpl.isSameParameter(CtTypeImpl.java:767)
at spoon.support.reflect.declaration.CtTypeImpl.hasSameParameters(CtTypeImpl.java:759)
at spoon.support.reflect.declaration.CtTypeImpl.getMethod(CtTypeImpl.java:733)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getCtExecutable(CtExecutableReferenceImpl.java:121)
at spoon.support.reflect.reference.CtExecutableReferenceImpl.getExecutableDeclaration(CtExecutableReferenceImpl.java:113)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getDeclaration(CtTypeParameterReferenceImpl.java:134)
at spoon.support.reflect.reference.CtTypeParameterReferenceImpl.getTypeErasure(CtTypeParameterReferenceImpl.java:174)
```

### Expected output

```Java
.
```

### Spoon Version

10.4.3-beta-10

### JVM Version

11

### What operating system are you using?

windows 11

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.