Uploaded image for project: 'Commons OGNL (Dormant)'
  1. Commons OGNL (Dormant)
  2. OGNL-86

use of incorrect expression root object in some arithmetic expressions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.7
    • 2.7
    • ExpressionCompiler
    • None
    • Tapestry 4.1.2-SNAPSHOT

    Description

      The following Tapestry page works as expected:

      package test;

      import org.apache.tapestry.annotations.Component;

      import org.apache.tapestry.components.Insert;

      import org.apache.tapestry.html.BasePage;

      public abstract class Test extends BasePage

      {

      public static class A

      {

      public int methodOfA(B b)

      { return 0; }

      }



      public static class B

      {

      public int methodOfB(int i)

      { return 0; }

      }

      @Component(bindings = "value=b.methodOfB(a.methodOfA(b))")

      public abstract Insert getInsert();

      public A getA()

      { return new A(); }

      public B getB()

      { return new B(); }

      }

      After the following modification it stops working:

      @Component(bindings = "value=b.methodOfB(a.methodOfA(b)-1)")

      The exception:

      javassist.compiler.CompileError

      getA() not found in test.Test$B

      Stack Trace:

      javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716)

      javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)

      javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)

      javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)

      javassist.compiler.TypeChecker.atCastExpr(TypeChecker.java:546)

      javassist.compiler.JvstTypeChecker.atCastExpr(JvstTypeChecker.java:103)

      javassist.compiler.ast.CastExpr.accept(CastExpr.java:54)

      javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:653)

      javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)

      javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)

      javassist.compiler.TypeChecker.atBinExpr(TypeChecker.java:326)

      javassist.compiler.ast.BinExpr.accept(BinExpr.java:40)

      javassist.compiler.JvstTypeChecker.atMethodArgs(JvstTypeChecker.java:220)

      javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:702)

      javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)

      javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)

      javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)

      javassist.compiler.TypeChecker.atCastExpr(TypeChecker.java:546)

      javassist.compiler.JvstTypeChecker.atCastExpr(JvstTypeChecker.java:103)

      javassist.compiler.ast.CastExpr.accept(CastExpr.java:54)

      javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:653)

      javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)

      javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)

      javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:235)

      javassist.compiler.CodeGen.compileExpr(CodeGen.java:222)

      javassist.compiler.CodeGen.atReturnStmnt2(CodeGen.java:591)

      javassist.compiler.JvstCodeGen.atReturnStmnt(JvstCodeGen.java:424)

      javassist.compiler.CodeGen.atStmnt(CodeGen.java:356)

      javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)

      javassist.compiler.CodeGen.atStmnt(CodeGen.java:344)

      javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)

      javassist.compiler.CodeGen.atMethodBody(CodeGen.java:285)

      javassist.compiler.Javac.compileBody(Javac.java:212)

      javassist.CtBehavior.setBody(CtBehavior.java:341)

      javassist.CtBehavior.setBody(CtBehavior.java:316)

      org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:272)

      org.apache.tapestry.services.impl.HiveMindExpressionCompiler.createLocalReferences(HiveMindExpressionCompiler.java:379)

      org.apache.tapestry.services.impl.HiveMindExpressionCompiler.generateGetter(HiveMindExpressionCompiler.java:321)

      org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:152)

      ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:388)

      ognl.Ognl.compileExpression(Ognl.java:123)

      org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:129)

      org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:91)

      $ExpressionCache_112f6d6b500.getCompiledExpression($ExpressionCache_112f6d6b500.java)

      org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:141)

      org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:132)

      org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84)

      $Insert_1.getValue($Insert_1.java)

      If I change the - operator to + the expression compiles, but fails with -,*,/.

      Regards,

      Norbi

      Attachments

        Activity

          People

            jkuhnert Jesse Kuhnert
            snorbi Norbert Sándor
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: