jol
jol copied to clipboard
7903778: JOL: Add utility for creating objects via factory method when unable to create via constructor
Adds CLI option to provide a factory FQCN which can create objects that you want to analyze. This is useful in situations where you have dependency classes or JDK classes that require non-null objects or have other validation in the constructor. These kinds of classes can't easily be modified, so it's nice to provide an alternative option for creating them.
For example:
public static final class RequiresFactory {
public RequiresFactory(final String string) {
Objects.requireNonNull(string);
if (string.isEmpty()) {
throw new IllegalArgumentException("string must not be empty");
}
}
}
Usage:
java -jar jol-cli.jar internals --classpath my-classes.jar --factory my.Factory my.RequiresFactory
Where my.Factory is:
public class Factory {
public static <T> T newInstance(Class<T> aClass) {
if (aClass.equals(RequiresFactory.class)) {
return aClass.cast(new RequiresFactory("test"));
}
throw new UnsupportedOperationException(aClass.getTypeName());
}
}
Progress
- [x] Change must not contain extraneous whitespace
- [ ] Change must be properly reviewed (1 review required, with at least 1 Committer)
Issue
- CODETOOLS-7903778: JOL: Add utility for creating objects via factory method when unable to create via constructor (Enhancement - P4)
Reviewing
Using git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jol.git pull/58/head:pull/58
$ git checkout pull/58
Update a local copy of the PR:
$ git checkout pull/58
$ git pull https://git.openjdk.org/jol.git pull/58/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 58
View PR using the GUI difftool:
$ git pr show -t 58
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jol/pull/58.diff
Webrev
Hi @stiemannkj1, welcome to this OpenJDK project and thanks for contributing!
We do not recognize you as Contributor and need to ensure you have signed the Oracle Contributor Agreement (OCA). If you have not signed the OCA, please follow the instructions. Please fill in your GitHub username in the "Username" field of the application. Once you have signed the OCA, please let us know by writing /signed in a comment in this pull request.
If you already are an OpenJDK Author, Committer or Reviewer, please click here to open a new issue so that we can record that fact. Please use "Add GitHub user stiemannkj1" as summary for the issue.
If you are contributing this work on behalf of your employer and your employer has signed the OCA, please let us know by writing /covered in a comment in this pull request.
❗ This change is not yet ready to be integrated. See the Progress checklist in the description for automated requirements.
/covered
Thank you! Please allow for a few business days to verify that your employer has signed the OCA. Also, please note that pull requests that are pending an OCA check will not usually be evaluated, so your patience is appreciated!
/signed
Thank you! Please allow for up to two weeks to process your OCA, although it is usually done within one to two business days. Also, please note that pull requests that are pending an OCA check will not usually be evaluated, so your patience is appreciated!
@stiemannkj1 This pull request has been inactive for more than 4 weeks and will be automatically closed if another 4 weeks passes without any activity. To avoid this, simply add a new comment to the pull request. Feel free to ask for assistance if you need help with progressing this pull request towards integration!
@stiemannkj1 This pull request has been inactive for more than 4 weeks and will be automatically closed if another 4 weeks passes without any activity. To avoid this, simply add a new comment to the pull request. Feel free to ask for assistance if you need help with progressing this pull request towards integration!
@stiemannkj1 This pull request has been inactive for more than 8 weeks and will now be automatically closed. If you would like to continue working on this pull request in the future, feel free to reopen it! This can be done using the /open pull request command.
Sorry, it slipped off my radar.
/open
@shipilev Only the pull request author can set the pull request state to "open"
/open
@stiemannkj1 This pull request is now open
@stiemannkj1 This pull request has been inactive for more than 4 weeks and will be automatically closed if another 4 weeks passes without any activity. To avoid this, simply add a new comment to the pull request. Feel free to ask for assistance if you need help with progressing this pull request towards integration!
@stiemannkj1 This pull request has been inactive for more than 8 weeks and will now be automatically closed. If you would like to continue working on this pull request in the future, feel free to reopen it! This can be done using the /open pull request command.