瀏覽代碼

Fix painless return type cast for list shortcut (#126724)

This fixes an issue where if a Painless getter method return type
 didn't match a Java getter method return type we add a cast. 
Currentlythis is adding an extraneous cast.

Closes: #70682
Jack Conradson 6 月之前
父節點
當前提交
c1ecafad6a

+ 5 - 0
docs/changelog/126724.yaml

@@ -0,0 +1,5 @@
+pr: 126724
+summary: Fix painless return type cast for list shortcut
+area: Infra/Scripting
+type: bug
+issues: []

+ 2 - 2
modules/lang-painless/src/main/java/org/elasticsearch/painless/phase/DefaultIRTreeToASMBytesPhase.java

@@ -1465,7 +1465,7 @@ public class DefaultIRTreeToASMBytesPhase implements IRTreeVisitor<WriteScope> {
         PainlessMethod getterPainlessMethod = irDotSubShortcutNode.getDecorationValue(IRDMethod.class);
         methodWriter.invokeMethodCall(getterPainlessMethod);
 
-        if (getterPainlessMethod.returnType().equals(getterPainlessMethod.javaMethod().getReturnType()) == false) {
+        if (getterPainlessMethod.returnType() != getterPainlessMethod.javaMethod().getReturnType()) {
             methodWriter.checkCast(MethodWriter.getType(getterPainlessMethod.returnType()));
         }
     }
@@ -1478,7 +1478,7 @@ public class DefaultIRTreeToASMBytesPhase implements IRTreeVisitor<WriteScope> {
         PainlessMethod getterPainlessMethod = irLoadListShortcutNode.getDecorationValue(IRDMethod.class);
         methodWriter.invokeMethodCall(getterPainlessMethod);
 
-        if (getterPainlessMethod.returnType() == getterPainlessMethod.javaMethod().getReturnType()) {
+        if (getterPainlessMethod.returnType() != getterPainlessMethod.javaMethod().getReturnType()) {
             methodWriter.checkCast(MethodWriter.getType(getterPainlessMethod.returnType()));
         }
     }