-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
avoiding unnecessary second Cast in instanceof patterns #2992
Comments
My original question was: "was any such optimization intended at some point?" Meaning: did recent feature work break existing optimization? |
There was no optimization intended earlier - the recent work did not break any existing optimization. This issue is to check whether such an optimization can be done without too much hassle. btw, I would rate this a lower prio issue for now |
I can investigate this one. |
In that case I suspect the following: prior to JEP 455 the LHS of With JEP 455 I recall situations like this requiring indeed one more cast: List<Integer> ints = ...;
if (ints.get(0) instanceof int i) ... At bytecode level, From the p.o.v. of the pattern, this checkcast is not part of the testing conversion, so this is indeed a part of translating So the question could be rephrased: can we (without undue complexity) recognize whether or not the unerased type is actually needed / used? With only two hits in the entire SDK, the possible gain will probably not be huge ... |
yes, it is not part of testing conversion
Agree on this part - I did some initial investigation on this whether to club it together but it was not straightforward. @srikanth-sankaran please take this only as low priority if you ever get to this. |
refer @stephan-herrmann 's comment at:
eclipse-platform/eclipse.platform.releng.aggregator#2358 (comment)
"
oking at AnnotationCodeMiningProvider we are talking about this code:
Here getAdapter(Class) is declared to return . With T=IAnnotationAccess a checkcast to the statically known type is correct. I only wonder, if previously implementation of instanceof patterns took care to avoid unnecessary casts, when the only use of that value would undergo a second checkcast immediately after. -.. was any such optimization intended at some point?
"
Also
ref the comment below as well:
public T getAdapter(Class adapter) {
if (adapter == X509Certificate.class && !certificates.isEmpty()) {
if (certificates.get(0) instanceof X509Certificate certificate) {
return adapter.cast(certificate);
}
}
The result of certificates.get(0) gets casted twice.
To check if such an optimization can be implemented
The text was updated successfully, but these errors were encountered: