[Bug]: Calling `setSimpleName` on an anonymous class leads to broken code
- Dominant language
- Java
- Stars
- 2k
- Forks
- 392
- Avg merge
- 11h 24m
- Merged PRs (30d)
- 36
Description
### Describe the bug
A simple call to `setSimpleName` on an anonymous `CtClass` will lead to broken code output. It would be nice if this could be prohibited in the type system, but I guess there is a reason why anonymous classes are ordinary `CtClass`es that inherit from `CtNamedElement` and get a generated name (cf. https://github.com/INRIA/spoon/issues/6244). A more ugly fix would be to override `setSimpleName` within `CtClass` and throw an exception when `isAnonymous` is true.
I am currently handling this issue by checking `CtClass.isAnonymous` in client code and skipping those AST elements, if true.
### Source code you are trying to analyze/transform
```Java
public class SomeClass {
private SomeClass createAnonymous() {
return new SomeClass() {};
}
}
```
### Source code for your Spoon processing
```Java
var l = Launcher.parseClass("public class SomeClass { private SomeClass createAnonymous() { return new SomeClass() {}; } }");
var classes = l.getElements(new TypeFilter<>(CtClass.class));
var iter = classes.iterator();
iter.next(); iter.next().setSimpleName("Anonymous");
System.out.println(l.prettyprint());
```
### Actual output
```Java
public class SomeClass {
private SomeClass createAnonymous() {
return new SomeClass()class Anonymous extends {};
}
}
```
### Expected output
```Java
public class SomeClass {
private SomeClass createAnonymous() {
return new SomeClass() {};
}
}
```
### Spoon Version
11.2.0
### JVM Version
openjdk 24.0.1
### What operating system are you using?
Arch Linux
Contributor guide
Assessment
This issue has not been assessed yet.