Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hello from Airbnb!
We're using javassist to generate a large number of classfiles. It's been a great fit for our needs so far, thanks for sharing this library!
I ran into an issue where creating a class with a large number of nested classes was generating enormous class files and would frequently run out of memory. I think the issue is in
CtClassType.makeNestedClass
, which copies the entireInnerClassesAttribute
from the outer class into inner classes.This has the result of taking n**2 space relative to the number of nested classes. This behavior is also not what javac does (see example, particularly the "InnerClasses" at the very bottom which does not include sibling classes).
This PR changes
makeNestedClass
to only copy the outer-nested relationship into the new nested class' InnerClassesAttribute. I wasn't sure where to add a test for this so I put one into JvstTest5 hoping that someone will tell me where this really belongs.