Skip to content

Commit 16b4557

Browse files
authored
Fix Painless method lookup over unknown super interfaces (elastic#97062)
In Java 21 List now extends SequencedCollection, instead of Collection directly. When resolving methods Painless starts at the defined type, and iterates up through super classes and interfaces. Unfortunately if a superinterface was not known, as it is for SequencedCollection since it is not in the allowed list of classes, method resolution would give up. This commit adjusts the superinterface interation to continue traversing until the method is found or no more superinterfaces are found. fixes elastic#97022
1 parent 6e6fd92 commit 16b4557

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

docs/changelog/97062.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 97062
2+
summary: Fix Painless method lookup over unknown super interfaces
3+
area: Infra/Scripting
4+
type: bug
5+
issues:
6+
- 97022

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ systemProp.jdk.tls.client.protocols=TLSv1.2
1212

1313
# java homes resolved by environment variables
1414
org.gradle.java.installations.auto-detect=false
15-
org.gradle.java.installations.fromEnv=JAVA_TOOLCHAIN_HOME,JAVA_HOME,RUNTIME_JAVA_HOME,JAVA20_HOME,JAVA19_HOME,JAVA18_HOME,JAVA17_HOME,JAVA16_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME
15+
org.gradle.java.installations.fromEnv=JAVA_TOOLCHAIN_HOME,JAVA_HOME,RUNTIME_JAVA_HOME,JAVA21_HOME,JAVA20_HOME,JAVA19_HOME,JAVA18_HOME,JAVA17_HOME,JAVA16_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME
1616

1717
# log some dependency verification info to console
1818
org.gradle.dependency.verification.console=verbose

modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookup.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,8 @@ private <T> T lookupPainlessObject(Class<?> originalTargetClass, Function<Painle
360360
if (painlessObject != null) {
361361
return painlessObject;
362362
}
363-
364-
targetInterfaces.addAll(Arrays.asList(targetInterface.getInterfaces()));
365363
}
364+
targetInterfaces.addAll(Arrays.asList(targetInterface.getInterfaces()));
366365
}
367366
}
368367

0 commit comments

Comments
 (0)