Uploaded image for project: 'Javassist'
  1. Javassist
  2. JASSIST-228

Powermock / Javassist creates illegal constructors for JDK 1.7.0u65 and 1.8.0u11 with -target 7.

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 3.18.2-GA
    • Fix Version/s: None
    • Labels:
      None
    • Environment:

      JDK 1.7.0u65 and 1.8.0u11

    • Steps to Reproduce:
      Hide

      git clone https://github.com/burka/powermock-javassist-bug.git
      cd powermock-javassist-bug
      mvn clean install

      Show
      git clone https://github.com/burka/powermock-javassist-bug.git cd powermock-javassist-bug mvn clean install
    • Affects:
      Compatibility/Configuration
    • Workaround:
      Workaround Exists
    • Workaround Description:
      Hide

      Don't use -target 7 or use JDK1.7.0u60

      Show
      Don't use -target 7 or use JDK1.7.0u60

      Description

      Javassist creates illegal constructors for JDK 1.7.0u65 and 1.8.0u11 with -target 7, I have a test that reproduces it at https://github.com/burka/powermock-javassist-bug .

      Somewhere in MainMockTransformer.transform(clazz), I think inside the PowerMockExpressionEditor, the responsible action must have taken place.

      If you remove -target 7 it works for both JDK 1.7.0u65 and 1.8.0u11.

      Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE! - in ConstructorTest
      testConstructorManipulationFailure(ConstructorTest)  Time elapsed: 0.002 sec  <<< ERROR!
      java.lang.VerifyError: Bad <init> method call from inside of a branch
      Exception Details:
        Location:
          MockedClass.<init>()V @32: invokespecial
        Reason:
          Error exists in the bytecode
        Bytecode:
          0000000: 2a4c 120f b800 1503 bd00 0d12 16b8 001a
          0000010: b800 204e 2db2 0024 a500 0e2a 01c0 0026
          0000020: b700 29a7 0009 2bb7 002b 0157 b1       
        Stackmap Table:
          full_frame(@38,{UninitializedThis,UninitializedThis,Top,Object[#13]},{})
          full_frame(@44,{Object[#2],Object[#2],Top,Object[#13]},{})
      
      	at java.lang.Class.getDeclaredConstructors0(Native Method)
      	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2658)
      	at java.lang.Class.getDeclaredConstructors(Class.java:2007)
      	at ConstructorTest.testConstructorManipulationFailure(ConstructorTest.java:13)
      

      I created a powermock ticket at
      https://code.google.com/p/powermock/issues/detail?id=505

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                chiba Shigeru Chiba
                Reporter:
                flob Florian Burka
              • Votes:
                5 Vote for this issue
                Watchers:
                13 Start watching this issue

                Dates

                • Created:
                  Updated: