ASTifyMethodsText

This is an autogenerated documentation file for the script: ASTifyMethodsText

Run it

$ ./androanalyze scripts_builtin/ASTifyMethodsText.py --package-names com.spotify.music

View the results

Non-Binary

$ ./androquery result -sn ASTifyMethodsText -pn com.spotify.music

 Empty

Binary

For the case that the result may exceed 16MB, it is stored in MongoDB’s gridFS. Therefore we need to use a different query syntax:

View the meta data:

$ ./androquery result -sn ASTifyMethodsText -pn com.spotify.music -nd

 {
     "chunkSize": 261120,
     "filename": "com.spotify.music_2.2.0.636_ASTifyMethodsText.json",
     "length": 108420752,
     "uploadDate": "2015-06-22T20:29:52.796000",
     "md5": "022fd074f370ef3b088a83e48b925079",
     "metadata": {
         "apk meta": {
             "package name": "com.spotify.music",
             "version name": "2.2.0.636",
             "sha256": "bbf2c7d7b8fbbce68a97a2f0fd7e854e29b1ea9e3836615e7e6a35095915a607",
             "import date": "2015-04-14T15:10:06.364000",
             "build_date": "2015-02-11T12:25:40",
             "path": "/mnt/stuff/btsync/apks_manual_downloads/02.03.2015_top_free_4/apps_topselling_free/MUSIC_AND_AUDIO/com.spotify.music.apk",
             "tag": null
         },
         "script meta": {
             "name": "ASTifyMethodsText",
             "sha256": "81fbe5fbb8c13435bc760d67b482defc467675f05214bba3b335a6b392f2dbaa",
             "analysis date": "2015-06-22T20:13:39.343000",
             "version": "0.3"
         }
     }
 }

View the raw data:

$ ./androquery result -sn ASTifyMethodsText -pn com.spotify.music -nd -r

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p1']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/Window$Callback', 0)],
              ['Local', 'p1']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             '<init>',
             '(Landroid/view/Window$Callback;)V')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchGenericMotionEvent',
               '(Landroid/view/MotionEvent;)Z'),
              'dispatchGenericMotionEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/MotionEvent', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchGenericMotionEvent',
             '(Landroid/view/MotionEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchKeyEvent',
               '(Landroid/view/KeyEvent;)Z'),
              'dispatchKeyEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/KeyEvent', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchKeyEvent',
             '(Landroid/view/KeyEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchKeyShortcutEvent',
               '(Landroid/view/KeyEvent;)Z'),
              'dispatchKeyShortcutEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/KeyEvent', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchKeyShortcutEvent',
             '(Landroid/view/KeyEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchPopulateAccessibilityEvent',
               '(Landroid/view/accessibility/AccessibilityEvent;)Z'),
              'dispatchPopulateAccessibilityEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName',
               ('android/view/accessibility/AccessibilityEvent', 0)],
              ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchPopulateAccessibilityEvent',
             '(Landroid/view/accessibility/AccessibilityEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchTouchEvent',
               '(Landroid/view/MotionEvent;)Z'),
              'dispatchTouchEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/MotionEvent', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchTouchEvent',
             '(Landroid/view/MotionEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'dispatchTrackballEvent',
               '(Landroid/view/MotionEvent;)Z'),
              'dispatchTrackballEvent',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/MotionEvent', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'dispatchTrackballEvent',
             '(Landroid/view/MotionEvent;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onActionModeFinished',
               '(Landroid/view/ActionMode;)V'),
              'onActionModeFinished',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/ActionMode', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onActionModeFinished',
             '(Landroid/view/ActionMode;)V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onActionModeStarted',
               '(Landroid/view/ActionMode;)V'),
              'onActionModeStarted',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/ActionMode', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onActionModeStarted',
             '(Landroid/view/ActionMode;)V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback', 'onAttachedToWindow', '()V'),
              'onAttachedToWindow',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']]]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onAttachedToWindow',
             '()V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback', 'onContentChanged', '()V'),
              'onContentChanged',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']]]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d', 'onContentChanged', '()V')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onCreatePanelMenu',
               '(ILandroid/view/Menu;)Z'),
              'onCreatePanelMenu',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2'],
               ['Local', 'p3']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']],
             [['TypeName', ('android/view/Menu', 0)], ['Local', 'p3']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onCreatePanelMenu',
             '(ILandroid/view/Menu;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onCreatePanelView',
               '(I)Landroid/view/View;'),
              'onCreatePanelView',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('android/view/View', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onCreatePanelView',
             '(I)Landroid/view/View;')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onDetachedFromWindow',
               '()V'),
              'onDetachedFromWindow',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']]]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onDetachedFromWindow',
             '()V')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onMenuItemSelected',
               '(ILandroid/view/MenuItem;)Z'),
              'onMenuItemSelected',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2'],
               ['Local', 'p3']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']],
             [['TypeName', ('android/view/MenuItem', 0)], ['Local', 'p3']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onMenuItemSelected',
             '(ILandroid/view/MenuItem;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onMenuOpened',
               '(ILandroid/view/Menu;)Z'),
              'onMenuOpened',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2'],
               ['Local', 'p3']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']],
             [['TypeName', ('android/view/Menu', 0)], ['Local', 'p3']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onMenuOpened',
             '(ILandroid/view/Menu;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onPanelClosed',
               '(ILandroid/view/Menu;)V'),
              'onPanelClosed',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2'],
               ['Local', 'p3']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']],
             [['TypeName', ('android/view/Menu', 0)], ['Local', 'p3']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onPanelClosed',
             '(ILandroid/view/Menu;)V')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onPreparePanel',
               '(ILandroid/view/View;Landroid/view/Menu;)Z'),
              'onPreparePanel',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2'],
               ['Local', 'p3'],
               ['Local', 'p4']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p2']],
             [['TypeName', ('android/view/View', 0)], ['Local', 'p3']],
             [['TypeName', ('android/view/Menu', 0)], ['Local', 'p4']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onPreparePanel',
             '(ILandroid/view/View;Landroid/view/Menu;)Z')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback', 'onSearchRequested', '()Z'),
              'onSearchRequested',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']]]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onSearchRequested',
             '()Z')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onWindowAttributesChanged',
               '(Landroid/view/WindowManager$LayoutParams;)V'),
              'onWindowAttributesChanged',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/WindowManager$LayoutParams', 0)],
              ['Local', 'p2']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onWindowAttributesChanged',
             '(Landroid/view/WindowManager$LayoutParams;)V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onWindowFocusChanged',
               '(Z)V'),
              'onWindowFocusChanged',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.boolean', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onWindowFocusChanged',
             '(Z)V')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('android/view/Window$Callback',
               'onWindowStartingActionMode',
               '(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;'),
              'onWindowStartingActionMode',
              True,
              [['FieldAccess',
                ('com/spotify/mobile/android/util/ui/d',
                 'a',
                 'Landroid/view/Window$Callback;'),
                ['Local', 'this']],
               ['Local', 'p2']]]]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('android/view/ActionMode$Callback', 0)],
              ['Local', 'p2']]],
  'ret': ['TypeName', ('android/view/ActionMode', 0)],
  'triple': ('com/spotify/mobile/android/util/ui/d',
             'onWindowStartingActionMode',
             '(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             None,
             [['TypeName', ('com/a/a/a/a', 0)], ['Local', 'v0_3']]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '!=',
              ['Local', 'p2'],
              ['Literal', 'null', ('.null', 0)]],
             [['BlockStatement',
               None,
               [['LocalDeclarationStatement',
                 ['MethodInvocation',
                  ('android/os/IBinder',
                   'queryLocalInterface',
                   '(Ljava/lang/String;)Landroid/os/IInterface;'),
                  'queryLocalInterface',
                  True,
                  [['Local', 'p2'],
                   ['Literal',
                    u'"com.android.vending.billing.IInAppBillingService"',
                    ('java/lang/String', 0)]]],
                 [['TypeName', ('com/a/a/a/a', 0)], ['Local', 'v0_1']]],
                ['IfStatement',
                 None,
                 ['BinaryInfix',
                  '||',
                  ['Parenthesis',
                   [['BinaryInfix',
                     '==',
                     ['Local', 'v0_1'],
                     ['Literal', 'null', ('.null', 0)]]]],
                  ['Parenthesis',
                   [['UnaryPrefix',
                     '!',
                     ['Parenthesis',
                      [['BinaryInfix',
                        'instanceof',
                        ['Local', 'v0_1'],
                        ['TypeName', ('com/a/a/a/a', 0)]]]]]]]],
                 [['BlockStatement',
                   None,
                   [['ExpressionStatement',
                     ['Assignment',
                      [['Local', 'v0_3'],
                       ['ClassInstanceCreation',
                        [['Local', 'p2']],
                        ['TypeName', ('com/a/a/a/c', 0)]]]]]]],
                  ['BlockStatement',
                   None,
                   [['ExpressionStatement',
                     ['Assignment',
                      [['Local', 'v0_3'],
                       ['Parenthesis',
                        [['Cast',
                          [['TypeName', ('com/a/a/a/a', 0)],
                           ['Local', 'v0_1']]]]]]]]]]]]]],
              ['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_3'], ['Literal', '0', ('.int', 0)]]]]]]]],
            ['ReturnStatement', ['Local', 'v0_3']]]],
  'comments': [],
  'flags': ['public', 'static'],
  'params': [[['TypeName', ('android/os/IBinder', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('com/a/a/a/a', 0)],
  'triple': ('com/a/a/a/b', 'a', '(Landroid/os/IBinder;)Lcom/a/a/a/a;')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             None,
             [['TypeName', ('.int', 0)], ['Local', 'v0_1']]],
            ['SwitchStatement',
             None,
             ['Local', 'p9'],
             [([1],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'enforceInterface',
                    '(Ljava/lang/String;)V'),
                   'enforceInterface',
                   True,
                   [['Local', 'p10'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('com/a/a/a/b',
                    'a',
                    '(ILjava/lang/String;Ljava/lang/String;)I'),
                   'a',
                   True,
                   [['Local', 'this'],
                    ['MethodInvocation',
                     ('android/os/Parcel', 'readInt', '()I'),
                     'readInt',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]]]],
                  [['TypeName', ('.int', 0)], ['Local', 'v0_19']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeNoException', '()V'),
                   'writeNoException',
                   True,
                   [['Local', 'p11']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeInt', '(I)V'),
                   'writeInt',
                   True,
                   [['Local', 'p11'], ['Local', 'v0_19']]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([2],
               ['BlockStatement',
                None,
                [['LocalDeclarationStatement',
                  None,
                  [['TypeName', ('.int', 0)], ['Local', 'v0_13']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'enforceInterface',
                    '(Ljava/lang/String;)V'),
                   'enforceInterface',
                   True,
                   [['Local', 'p10'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'readInt', '()I'),
                   'readInt',
                   True,
                   [['Local', 'p10']]],
                  [['TypeName', ('java/lang/String', 0)],
                   ['Local', 'v1_3']]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'readString',
                    '()Ljava/lang/String;'),
                   'readString',
                   True,
                   [['Local', 'p10']]],
                  [['TypeName', ('java/lang/String', 0)],
                   ['Local', 'v2_3']]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'readString',
                    '()Ljava/lang/String;'),
                   'readString',
                   True,
                   [['Local', 'p10']]],
                  [['TypeName', ('java/lang/String', 0)],
                   ['Local', 'v3_2']]],
                 ['IfStatement',
                  None,
                  ['BinaryInfix',
                   '==',
                   ['MethodInvocation',
                    ('android/os/Parcel', 'readInt', '()I'),
                    'readInt',
                    True,
                    [['Local', 'p10']]],
                   ['Literal', '0', ('.int', 0)]],
                  [['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['Assignment',
                       [['Local', 'v0_13'],
                        ['Literal', '0', ('.int', 0)]]]]]],
                   ['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['Assignment',
                       [['Local', 'v0_13'],
                        ['Parenthesis',
                         [['Cast',
                           [['TypeName',
                             ('android/os/Bundle', 0)],
                            ['MethodInvocation',
                             ('android/os/Parcelable$Creator',
                              'createFromParcel',
                              '(Landroid/os/Parcel;)Ljava/lang/Object;'),
                             'createFromParcel',
                             True,
                             [['FieldAccess',
                               ('android/os/Bundle',
                                'CREATOR',
                                'Landroid/os/Parcelable$Creator;'),
                               ['TypeName',
                                ('android/os/Bundle', 0)]],
                              ['Local', 'p10']]]]]]]]]]]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('com/a/a/a/b',
                    'a',
                    '(ILjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;'),
                   'a',
                   True,
                   [['Local', 'this'],
                    ['Local', 'v1_3'],
                    ['Local', 'v2_3'],
                    ['Local', 'v3_2'],
                    ['Local', 'v0_13']]],
                  [['TypeName', ('.int', 0)], ['Local', 'v0_16']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeNoException', '()V'),
                   'writeNoException',
                   True,
                   [['Local', 'p11']]]],
                 ['IfStatement',
                  None,
                  ['BinaryInfix',
                   '==',
                   ['Local', 'v0_16'],
                   ['Literal', '0', ('.int', 0)]],
                  [['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '0', ('.int', 0)]]]]]],
                   ['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]],
                     ['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Bundle',
                        'writeToParcel',
                        '(Landroid/os/Parcel;I)V'),
                       'writeToParcel',
                       True,
                       [['Local', 'v0_16'],
                        ['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]]]]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([3],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'enforceInterface',
                    '(Ljava/lang/String;)V'),
                   'enforceInterface',
                   True,
                   [['Local', 'p10'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('com/a/a/a/b',
                    'a',
                    '(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;'),
                   'a',
                   True,
                   [['Local', 'this'],
                    ['MethodInvocation',
                     ('android/os/Parcel', 'readInt', '()I'),
                     'readInt',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]]]],
                  [['TypeName', ('.int', 0)], ['Local', 'v0_10']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeNoException', '()V'),
                   'writeNoException',
                   True,
                   [['Local', 'p11']]]],
                 ['IfStatement',
                  None,
                  ['BinaryInfix',
                   '==',
                   ['Local', 'v0_10'],
                   ['Literal', '0', ('.int', 0)]],
                  [['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '0', ('.int', 0)]]]]]],
                   ['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]],
                     ['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Bundle',
                        'writeToParcel',
                        '(Landroid/os/Parcel;I)V'),
                       'writeToParcel',
                       True,
                       [['Local', 'v0_10'],
                        ['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]]]]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([4],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'enforceInterface',
                    '(Ljava/lang/String;)V'),
                   'enforceInterface',
                   True,
                   [['Local', 'p10'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('com/a/a/a/b',
                    'a',
                    '(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;'),
                   'a',
                   True,
                   [['Local', 'this'],
                    ['MethodInvocation',
                     ('android/os/Parcel', 'readInt', '()I'),
                     'readInt',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]]]],
                  [['TypeName', ('.int', 0)], ['Local', 'v0_7']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeNoException', '()V'),
                   'writeNoException',
                   True,
                   [['Local', 'p11']]]],
                 ['IfStatement',
                  None,
                  ['BinaryInfix',
                   '==',
                   ['Local', 'v0_7'],
                   ['Literal', '0', ('.int', 0)]],
                  [['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '0', ('.int', 0)]]]]]],
                   ['BlockStatement',
                    None,
                    [['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Parcel', 'writeInt', '(I)V'),
                       'writeInt',
                       True,
                       [['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]],
                     ['ExpressionStatement',
                      ['MethodInvocation',
                       ('android/os/Bundle',
                        'writeToParcel',
                        '(Landroid/os/Parcel;I)V'),
                       'writeToParcel',
                       True,
                       [['Local', 'v0_7'],
                        ['Local', 'p11'],
                        ['Literal', '1', ('.int', 0)]]]]]]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([5],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'enforceInterface',
                    '(Ljava/lang/String;)V'),
                   'enforceInterface',
                   True,
                   [['Local', 'p10'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['LocalDeclarationStatement',
                  ['MethodInvocation',
                   ('com/a/a/a/b',
                    'b',
                    '(ILjava/lang/String;Ljava/lang/String;)I'),
                   'b',
                   True,
                   [['Local', 'this'],
                    ['MethodInvocation',
                     ('android/os/Parcel', 'readInt', '()I'),
                     'readInt',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]],
                    ['MethodInvocation',
                     ('android/os/Parcel',
                      'readString',
                      '()Ljava/lang/String;'),
                     'readString',
                     True,
                     [['Local', 'p10']]]]],
                  [['TypeName', ('.int', 0)], ['Local', 'v0_4']]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeNoException', '()V'),
                   'writeNoException',
                   True,
                   [['Local', 'p11']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'writeInt', '(I)V'),
                   'writeInt',
                   True,
                   [['Local', 'p11'], ['Local', 'v0_4']]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([1598968902],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel',
                    'writeString',
                    '(Ljava/lang/String;)V'),
                   'writeString',
                   True,
                   [['Local', 'p11'],
                    ['Literal',
                     u'"com.android.vending.billing.IInAppBillingService"',
                     ('java/lang/String', 0)]]]],
                 ['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'], ['Literal', '1', ('.int', 0)]]]],
                 ['JumpStatement', 'break', None]]]),
              ([None],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['Assignment',
                   [['Local', 'v0_1'],
                    ['MethodInvocation',
                     ('android/os/Binder',
                      'onTransact',
                      '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
                     'onTransact',
                     True,
                     [['Local', 'super'],
                      ['Local', 'p9'],
                      ['Local', 'p10'],
                      ['Local', 'p11'],
                      ['Local', 'p12']]]]]]]])]],
            ['ReturnStatement', ['Local', 'v0_1']]]],
  'comments': [],
  'flags': ['public'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p9']],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'p10']],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'p11']],
             [['TypeName', ('.int', 0)], ['Local', 'p12']]],
  'ret': ['TypeName', ('.boolean', 0)],
  'triple': ('com/a/a/a/b',
             'onTransact',
             '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                ['Local', 'this']],
               ['Local', 'p1']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': [],
  'params': [[['TypeName', ('android/os/IBinder', 0)], ['Local', 'p1']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/a/a/a/c', '<init>', '(Landroid/os/IBinder;)V')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v1']]],
            ['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v2']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeInterfaceToken',
                  '(Ljava/lang/String;)V'),
                 'writeInterfaceToken',
                 True,
                 [['Local', 'v1'],
                  ['Literal',
                   u'"com.android.vending.billing.IInAppBillingService"',
                   ('java/lang/String', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'writeInt', '(I)V'),
                 'writeInt',
                 True,
                 [['Local', 'v1'], ['Local', 'p6']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p7']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p8']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/IBinder',
                  'transact',
                  '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
                 'transact',
                 True,
                 [['FieldAccess',
                   ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                   ['Local', 'this']],
                  ['Literal', '1', ('.int', 0)],
                  ['Local', 'v1'],
                  ['Local', 'v2'],
                  ['Literal', '0', ('.int', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readException', '()V'),
                 'readException',
                 True,
                 [['Local', 'v2']]]],
               ['LocalDeclarationStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readInt', '()I'),
                 'readInt',
                 True,
                 [['Local', 'v2']]],
                [['TypeName', ('java/lang/Throwable', 0)],
                 ['Local', 'v0_2']]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'recycle', '()V'),
                 'recycle',
                 True,
                 [['Local', 'v2']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'recycle', '()V'),
                 'recycle',
                 True,
                 [['Local', 'v1']]]],
               ['ReturnStatement', ['Local', 'v0_2']]]],
             [([['TypeName', ('java/lang/Throwable', 0)],
                ['Local', 'v0_3']],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v2']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v1']]]],
                 ['ThrowStatement', ['Local', 'v0_3']]]])]]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p6']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p7']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p8']]],
  'ret': ['TypeName', ('.int', 0)],
  'triple': ('com/a/a/a/c', 'a', '(ILjava/lang/String;Ljava/lang/String;)I')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v1']]],
            ['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v2']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeInterfaceToken',
                  '(Ljava/lang/String;)V'),
                 'writeInterfaceToken',
                 True,
                 [['Local', 'v1'],
                  ['Literal',
                   u'"com.android.vending.billing.IInAppBillingService"',
                   ('java/lang/String', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'writeInt', '(I)V'),
                 'writeInt',
                 True,
                 [['Local', 'v1'], ['Local', 'p6']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p7']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p8']]]]]],
             [([['TypeName', ('.int', 0)], ['Local', 'v0_9']],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v2']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v1']]]],
                 ['ThrowStatement', ['Local', 'v0_9']]]])]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '==',
              ['Local', 'p9'],
              ['Literal', 'null', ('.null', 0)]],
             [['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['MethodInvocation',
                  ('android/os/Parcel', 'writeInt', '(I)V'),
                  'writeInt',
                  True,
                  [['Local', 'v1'], ['Literal', '0', ('.int', 0)]]]]]],
              ['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['MethodInvocation',
                  ('android/os/Parcel', 'writeInt', '(I)V'),
                  'writeInt',
                  True,
                  [['Local', 'v1'], ['Literal', '1', ('.int', 0)]]]],
                ['ExpressionStatement',
                 ['MethodInvocation',
                  ('android/os/Bundle',
                   'writeToParcel',
                   '(Landroid/os/Parcel;I)V'),
                  'writeToParcel',
                  True,
                  [['Local', 'p9'],
                   ['Local', 'v1'],
                   ['Literal', '0', ('.int', 0)]]]]]]]],
            ['LocalDeclarationStatement',
             None,
             [['TypeName', ('.int', 0)], ['Local', 'v0_6']]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/IBinder',
               'transact',
               '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
              'transact',
              True,
              [['FieldAccess',
                ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                ['Local', 'this']],
               ['Literal', '2', ('.int', 0)],
               ['Local', 'v1'],
               ['Local', 'v2'],
               ['Literal', '0', ('.int', 0)]]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'readException', '()V'),
              'readException',
              True,
              [['Local', 'v2']]]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '==',
              ['MethodInvocation',
               ('android/os/Parcel', 'readInt', '()I'),
               'readInt',
               True,
               [['Local', 'v2']]],
              ['Literal', '0', ('.int', 0)]],
             [['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_6'], ['Literal', '0', ('.int', 0)]]]]]],
              ['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_6'],
                   ['Parenthesis',
                    [['Cast',
                      [['TypeName', ('android/os/Bundle', 0)],
                       ['MethodInvocation',
                        ('android/os/Parcelable$Creator',
                         'createFromParcel',
                         '(Landroid/os/Parcel;)Ljava/lang/Object;'),
                        'createFromParcel',
                        True,
                        [['FieldAccess',
                          ('android/os/Bundle',
                           'CREATOR',
                           'Landroid/os/Parcelable$Creator;'),
                          ['TypeName',
                           ('android/os/Bundle', 0)]],
                         ['Local', 'v2']]]]]]]]]]]]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v2']]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v1']]]],
            ['ReturnStatement', ['Local', 'v0_6']]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p6']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p7']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p8']],
             [['TypeName', ('android/os/Bundle', 0)], ['Local', 'p9']]],
  'ret': ['TypeName', ('android/os/Bundle', 0)],
  'triple': ('com/a/a/a/c',
             'a',
             '(ILjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v1']]],
            ['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v2']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['LocalDeclarationStatement',
                None,
                [['TypeName', ('.int', 0)], ['Local', 'v0_3']]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeInterfaceToken',
                  '(Ljava/lang/String;)V'),
                 'writeInterfaceToken',
                 True,
                 [['Local', 'v1'],
                  ['Literal',
                   u'"com.android.vending.billing.IInAppBillingService"',
                   ('java/lang/String', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'writeInt', '(I)V'),
                 'writeInt',
                 True,
                 [['Local', 'v1'], ['Local', 'p6']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p7']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p8']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p9']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/IBinder',
                  'transact',
                  '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
                 'transact',
                 True,
                 [['FieldAccess',
                   ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                   ['Local', 'this']],
                  ['Literal', '4', ('.int', 0)],
                  ['Local', 'v1'],
                  ['Local', 'v2'],
                  ['Literal', '0', ('.int', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readException', '()V'),
                 'readException',
                 True,
                 [['Local', 'v2']]]]]],
             [([['TypeName', ('.int', 0)], ['Local', 'v0_6']],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v2']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v1']]]],
                 ['ThrowStatement', ['Local', 'v0_6']]]])]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '==',
              ['MethodInvocation',
               ('android/os/Parcel', 'readInt', '()I'),
               'readInt',
               True,
               [['Local', 'v2']]],
              ['Literal', '0', ('.int', 0)]],
             [['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_3'], ['Literal', '0', ('.int', 0)]]]]]],
              ['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_3'],
                   ['Parenthesis',
                    [['Cast',
                      [['TypeName', ('android/os/Bundle', 0)],
                       ['MethodInvocation',
                        ('android/os/Parcelable$Creator',
                         'createFromParcel',
                         '(Landroid/os/Parcel;)Ljava/lang/Object;'),
                        'createFromParcel',
                        True,
                        [['FieldAccess',
                          ('android/os/Bundle',
                           'CREATOR',
                           'Landroid/os/Parcelable$Creator;'),
                          ['TypeName',
                           ('android/os/Bundle', 0)]],
                         ['Local', 'v2']]]]]]]]]]]]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v2']]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v1']]]],
            ['ReturnStatement', ['Local', 'v0_3']]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p6']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p7']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p8']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p9']]],
  'ret': ['TypeName', ('android/os/Bundle', 0)],
  'triple': ('com/a/a/a/c',
             'a',
             '(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v1']]],
            ['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v2']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['LocalDeclarationStatement',
                None,
                [['TypeName', ('.int', 0)], ['Local', 'v0_3']]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeInterfaceToken',
                  '(Ljava/lang/String;)V'),
                 'writeInterfaceToken',
                 True,
                 [['Local', 'v1'],
                  ['Literal',
                   u'"com.android.vending.billing.IInAppBillingService"',
                   ('java/lang/String', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'writeInt', '(I)V'),
                 'writeInt',
                 True,
                 [['Local', 'v1'], ['Local', 'p6']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p7']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p8']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p9']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p10']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/IBinder',
                  'transact',
                  '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
                 'transact',
                 True,
                 [['FieldAccess',
                   ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                   ['Local', 'this']],
                  ['Literal', '3', ('.int', 0)],
                  ['Local', 'v1'],
                  ['Local', 'v2'],
                  ['Literal', '0', ('.int', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readException', '()V'),
                 'readException',
                 True,
                 [['Local', 'v2']]]]]],
             [([['TypeName', ('.int', 0)], ['Local', 'v0_6']],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v2']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v1']]]],
                 ['ThrowStatement', ['Local', 'v0_6']]]])]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '==',
              ['MethodInvocation',
               ('android/os/Parcel', 'readInt', '()I'),
               'readInt',
               True,
               [['Local', 'v2']]],
              ['Literal', '0', ('.int', 0)]],
             [['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_3'], ['Literal', '0', ('.int', 0)]]]]]],
              ['BlockStatement',
               None,
               [['ExpressionStatement',
                 ['Assignment',
                  [['Local', 'v0_3'],
                   ['Parenthesis',
                    [['Cast',
                      [['TypeName', ('android/os/Bundle', 0)],
                       ['MethodInvocation',
                        ('android/os/Parcelable$Creator',
                         'createFromParcel',
                         '(Landroid/os/Parcel;)Ljava/lang/Object;'),
                        'createFromParcel',
                        True,
                        [['FieldAccess',
                          ('android/os/Bundle',
                           'CREATOR',
                           'Landroid/os/Parcelable$Creator;'),
                          ['TypeName',
                           ('android/os/Bundle', 0)]],
                         ['Local', 'v2']]]]]]]]]]]]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v2']]]],
            ['ExpressionStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'recycle', '()V'),
              'recycle',
              True,
              [['Local', 'v1']]]],
            ['ReturnStatement', ['Local', 'v0_3']]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p6']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p7']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p8']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p9']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p10']]],
  'ret': ['TypeName', ('android/os/Bundle', 0)],
  'triple': ('com/a/a/a/c',
             'a',
             '(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['FieldAccess',
              ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
              ['Local', 'this']]]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [],
  'ret': ['TypeName', ('android/os/IBinder', 0)],
  'triple': ('com/a/a/a/c', 'asBinder', '()Landroid/os/IBinder;')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v1']]],
            ['LocalDeclarationStatement',
             ['MethodInvocation',
              ('android/os/Parcel', 'obtain', '()Landroid/os/Parcel;'),
              'obtain',
              True,
              [['TypeName', ('android/os/Parcel', 0)]]],
             [['TypeName', ('android/os/Parcel', 0)], ['Local', 'v2']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeInterfaceToken',
                  '(Ljava/lang/String;)V'),
                 'writeInterfaceToken',
                 True,
                 [['Local', 'v1'],
                  ['Literal',
                   u'"com.android.vending.billing.IInAppBillingService"',
                   ('java/lang/String', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'writeInt', '(I)V'),
                 'writeInt',
                 True,
                 [['Local', 'v1'], ['Local', 'p6']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p7']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel',
                  'writeString',
                  '(Ljava/lang/String;)V'),
                 'writeString',
                 True,
                 [['Local', 'v1'], ['Local', 'p8']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/IBinder',
                  'transact',
                  '(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z'),
                 'transact',
                 True,
                 [['FieldAccess',
                   ('com/a/a/a/c', 'a', 'Landroid/os/IBinder;'),
                   ['Local', 'this']],
                  ['Literal', '5', ('.int', 0)],
                  ['Local', 'v1'],
                  ['Local', 'v2'],
                  ['Literal', '0', ('.int', 0)]]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readException', '()V'),
                 'readException',
                 True,
                 [['Local', 'v2']]]],
               ['LocalDeclarationStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'readInt', '()I'),
                 'readInt',
                 True,
                 [['Local', 'v2']]],
                [['TypeName', ('java/lang/Throwable', 0)],
                 ['Local', 'v0_2']]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'recycle', '()V'),
                 'recycle',
                 True,
                 [['Local', 'v2']]]],
               ['ExpressionStatement',
                ['MethodInvocation',
                 ('android/os/Parcel', 'recycle', '()V'),
                 'recycle',
                 True,
                 [['Local', 'v1']]]],
               ['ReturnStatement', ['Local', 'v0_2']]]],
             [([['TypeName', ('java/lang/Throwable', 0)],
                ['Local', 'v0_3']],
               ['BlockStatement',
                None,
                [['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v2']]]],
                 ['ExpressionStatement',
                  ['MethodInvocation',
                   ('android/os/Parcel', 'recycle', '()V'),
                   'recycle',
                   True,
                   [['Local', 'v1']]]],
                 ['ThrowStatement', ['Local', 'v0_3']]]])]]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p6']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p7']],
             [['TypeName', ('java/lang/String', 0)], ['Local', 'p8']]],
  'ret': ['TypeName', ('.int', 0)],
  'triple': ('com/a/a/a/c', 'b', '(ILjava/lang/String;Ljava/lang/String;)I')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                ['Local', 'this']],
               ['Local', 'p1']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': [],
  'params': [[['TypeName', ('com/b/a/a', 0)], ['Local', 'p1']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a$1', '<init>', '(Lcom/b/a/a;)V')}

 {'body': ['BlockStatement',
           None,
           [['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['IfStatement',
                None,
                ['BinaryInfix',
                 '!=',
                 ['MethodInvocation',
                  ('com/b/a/a', 'a', '(Lcom/b/a/a;)Ljava/io/Writer;'),
                  'a',
                  True,
                  [['TypeName', ('com/b/a/a', 0)],
                   ['FieldAccess',
                    ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                    ['Local', 'this']]]],
                 ['Literal', 'null', ('.null', 0)]],
                [['BlockStatement',
                  None,
                  [['ExpressionStatement',
                    ['MethodInvocation',
                     ('com/b/a/a', 'b', '(Lcom/b/a/a;)V'),
                     'b',
                     True,
                     [['TypeName', ('com/b/a/a', 0)],
                      ['FieldAccess',
                       ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                       ['Local', 'this']]]]],
                   ['IfStatement',
                    None,
                    ['MethodInvocation',
                     ('com/b/a/a', 'c', '(Lcom/b/a/a;)Z'),
                     'c',
                     True,
                     [['TypeName', ('com/b/a/a', 0)],
                      ['FieldAccess',
                       ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                       ['Local', 'this']]]],
                    [['BlockStatement',
                      None,
                      [['ExpressionStatement',
                        ['MethodInvocation',
                         ('com/b/a/a', 'd', '(Lcom/b/a/a;)V'),
                         'd',
                         True,
                         [['TypeName', ('com/b/a/a', 0)],
                          ['FieldAccess',
                           ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                           ['Local', 'this']]]]],
                       ['ExpressionStatement',
                        ['MethodInvocation',
                         ('com/b/a/a', 'e', '(Lcom/b/a/a;)I'),
                         'e',
                         True,
                         [['TypeName', ('com/b/a/a', 0)],
                          ['FieldAccess',
                           ('com/b/a/a$1', 'a', 'Lcom/b/a/a;'),
                           ['Local', 'this']]]]]]]]]]],
                 ['BlockStatement', None, []]]]]],
             [([['TypeName', ('com/b/a/a', 0)], ['Local', 'v0_7']],
               ['BlockStatement',
                None,
                [['ThrowStatement', ['Local', 'v0_7']]]])]],
            ['ReturnStatement', ['Literal', '0', ('.int', 0)]]]],
  'comments': [],
  'flags': ['private'],
  'params': [],
  'ret': ['TypeName', ('java/lang/Void', 0)],
  'triple': ('com/b/a/a$1', 'a', '()Ljava/lang/Void;')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['MethodInvocation',
              ('com/b/a/a$1', 'a', '()Ljava/lang/Void;'),
              'a',
              True,
              [['Local', 'this']]]]]],
  'comments': [],
  'flags': ['public', 'final', 'synthetic'],
  'params': [],
  'ret': ['TypeName', ('java/lang/Object', 0)],
  'triple': ('com/b/a/a$1', 'call', '()Ljava/lang/Object;')}

 {'body': ['BlockStatement', None, [['ReturnStatement', None]]],
  'comments': [],
  'flags': [],
  'params': [],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a$2', '<init>', '()V')}

 {'body': ['BlockStatement', None, [['ReturnStatement', None]]],
  'comments': [],
  'flags': ['public', 'final'],
  'params': [[['TypeName', ('.int', 0)], ['Local', 'p1']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a$2', 'write', '(I)V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'a', 'Ljava/util/regex/Pattern;'),
                ['TypeName', ('com/b/a/a', 0)]],
               ['MethodInvocation',
                ('java/util/regex/Pattern',
                 'compile',
                 '(Ljava/lang/String;)Ljava/util/regex/Pattern;'),
                'compile',
                True,
                [['TypeName', ('java/util/regex/Pattern', 0)],
                 ['Literal',
                  u'"[a-z0-9_-]{1,64}"',
                  ('java/lang/String', 0)]]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'p', 'Ljava/io/OutputStream;'),
                ['TypeName', ('com/b/a/a', 0)]],
               ['ClassInstanceCreation',
                [],
                ['TypeName', ('com/b/a/a$2', 0)]]]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['static'],
  'params': [],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a', '<clinit>', '()V')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['Assignment',
              [['FieldAccess', ('com/b/a/a', 'j', 'J'), ['Local', 'this']],
               ['Literal', '0L', ('.long', 0)]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'l', 'Ljava/util/LinkedHashMap;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Literal', '0', ('.int', 0)],
                 ['Literal', '1061158912', ('.int', 0)],
                 ['Literal', '1', ('.int', 0)]],
                ['TypeName', ('java/util/LinkedHashMap', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess', ('com/b/a/a', 'n', 'J'), ['Local', 'this']],
               ['Literal', '0L', ('.long', 0)]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a',
                 'b',
                 'Ljava/util/concurrent/ThreadPoolExecutor;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Literal', '0', ('.int', 0)],
                 ['Literal', '1', ('.int', 0)],
                 ['Literal', '60L', ('.long', 0)],
                 ['FieldAccess',
                  ('java/util/concurrent/TimeUnit',
                   'SECONDS',
                   'Ljava/util/concurrent/TimeUnit;'),
                  ['TypeName', ('java/util/concurrent/TimeUnit', 0)]],
                 ['ClassInstanceCreation',
                  [],
                  ['TypeName',
                   ('java/util/concurrent/LinkedBlockingQueue', 0)]]],
                ['TypeName',
                 ('java/util/concurrent/ThreadPoolExecutor', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'o', 'Ljava/util/concurrent/Callable;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Local', 'this']],
                ['TypeName', ('com/b/a/a$1', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'c', 'Ljava/io/File;'),
                ['Local', 'this']],
               ['Local', 'p9']]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess', ('com/b/a/a', 'g', 'I'), ['Local', 'this']],
               ['Literal', '1', ('.int', 0)]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'd', 'Ljava/io/File;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Local', 'p9'],
                 ['Literal', u'"journal"', ('java/lang/String', 0)]],
                ['TypeName', ('java/io/File', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'e', 'Ljava/io/File;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Local', 'p9'],
                 ['Literal', u'"journal.tmp"', ('java/lang/String', 0)]],
                ['TypeName', ('java/io/File', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess',
                ('com/b/a/a', 'f', 'Ljava/io/File;'),
                ['Local', 'this']],
               ['ClassInstanceCreation',
                [['Local', 'p9'],
                 ['Literal', u'"journal.bkp"', ('java/lang/String', 0)]],
                ['TypeName', ('java/io/File', 0)]]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess', ('com/b/a/a', 'i', 'I'), ['Local', 'this']],
               ['Literal', '1', ('.int', 0)]]]],
            ['ExpressionStatement',
             ['Assignment',
              [['FieldAccess', ('com/b/a/a', 'h', 'J'), ['Local', 'this']],
               ['Literal', '10485760L', ('.long', 0)]]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['private'],
  'params': [[['TypeName', ('java/io/File', 0)], ['Local', 'p9']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a', '<init>', '(Ljava/io/File;)V')}

 {'body': ['BlockStatement',
           None,
           [['IfStatement',
             None,
             ['BinaryInfix',
              '>',
              ['Literal', '10485760L', ('.long', 0)],
              ['Literal', '0L', ('.long', 0)]],
             [['BlockStatement',
               None,
               [['LocalDeclarationStatement',
                 ['ClassInstanceCreation',
                  [['Local', 'p6'],
                   ['Literal',
                    u'"journal.bkp"',
                    ('java/lang/String', 0)]],
                  ['TypeName', ('java/io/File', 0)]],
                 [['TypeName', ('.void', 0)], ['Local', 'v0_3']]],
                ['IfStatement',
                 None,
                 ['MethodInvocation',
                  ('java/io/File', 'exists', '()Z'),
                  'exists',
                  True,
                  [['Local', 'v0_3']]],
                 [['BlockStatement',
                   None,
                   [['LocalDeclarationStatement',
                     ['ClassInstanceCreation',
                      [['Local', 'p6'],
                       ['Literal',
                        u'"journal"',
                        ('java/lang/String', 0)]],
                      ['TypeName', ('java/io/File', 0)]],
                     [['TypeName', ('java/lang/String', 0)],
                      ['Local', 'v1_3']]],
                    ['IfStatement',
                     None,
                     ['UnaryPrefix',
                      '!',
                      ['MethodInvocation',
                       ('java/io/File', 'exists', '()Z'),
                       'exists',
                       True,
                       [['Local', 'v1_3']]]],
                     [['BlockStatement',
                       None,
                       [['ExpressionStatement',
                         ['MethodInvocation',
                          ('com/b/a/a',
                           'a',
                           '(Ljava/io/File;Ljava/io/File;Z)V'),
                          'a',
                          True,
                          [['TypeName', ('com/b/a/a', 0)],
                           ['Local', 'v0_3'],
                           ['Local', 'v1_3'],
                           ['Literal', '0', ('.int', 0)]]]]]],
                      ['BlockStatement',
                       None,
                       [['ExpressionStatement',
                         ['MethodInvocation',
                          ('java/io/File', 'delete', '()Z'),
                          'delete',
                          True,
                          [['Local', 'v0_3']]]]]]]]]]]],
                ['LocalDeclarationStatement',
                 None,
                 [['TypeName', ('.void', 0)], ['Local', 'v0_7']]],
                ['LocalDeclarationStatement',
                 ['ClassInstanceCreation',
                  [['Local', 'p6']],
                  ['TypeName', ('com/b/a/a', 0)]],
                 [['TypeName', ('.void', 0)], ['Local', 'v0_5']]],
                ['IfStatement',
                 None,
                 ['UnaryPrefix',
                  '!',
                  ['MethodInvocation',
                   ('java/io/File', 'exists', '()Z'),
                   'exists',
                   True,
                   [['FieldAccess',
                     ('com/b/a/a', 'd', 'Ljava/io/File;'),
                     ['Local', 'v0_5']]]]],
                 [['BlockStatement',
                   None,
                   [['ExpressionStatement',
                     ['MethodInvocation',
                      ('java/io/File', 'mkdirs', '()Z'),
                      'mkdirs',
                      True,
                      [['Local', 'p6']]]],
                    ['ExpressionStatement',
                     ['Assignment',
                      [['Local', 'v0_7'],
                       ['MethodInvocation',
                        ('com/b/a/a', 'e', '()V'),
                        'e',
                        True,
                        [['ClassInstanceCreation',
                          [['Local', 'p6']],
                          ['TypeName', ('com/b/a/a', 0)]]]]]]]]],
                  ['BlockStatement',
                   None,
                   [['TryStatement',
                     None,
                     ['BlockStatement',
                      None,
                      [['ExpressionStatement',
                        ['Assignment',
                         [['Local', 'v0_7'],
                          ['MethodInvocation',
                           ('com/b/a/a', 'd', '()V'),
                           'd',
                           True,
                           [['MethodInvocation',
                             ('com/b/a/a', 'c', '()V'),
                             'c',
                             True,
                             [['Local', 'v0_5']]]]]]]],
                       ['ExpressionStatement',
                        ['Assignment',
                         [['FieldAccess',
                           ('com/b/a/a',
                            'k',
                            'Ljava/io/Writer;'),
                           ['Local', 'v0_7']],
                          ['ClassInstanceCreation',
                           [['ClassInstanceCreation',
                             [['ClassInstanceCreation',
                               [['FieldAccess',
                                 ('com/b/a/a',
                                  'd',
                                  'Ljava/io/File;'),
                                 ['Local', 'v0_7']],
                                ['Literal',
                                 '1',
                                 ('.int', 0)]],
                               ['TypeName',
                                ('java/io/FileOutputStream',
                                 0)]],
                              ['FieldAccess',
                               ('com/b/a/g',
                                'a',
                                'Ljava/nio/charset/Charset;'),
                               ['TypeName',
                                ('com/b/a/g', 0)]]],
                             ['TypeName',
                              ('java/io/OutputStreamWriter',
                               0)]]],
                           ['TypeName',
                            ('java/io/BufferedWriter', 0)]]]]]]],
                     [([['TypeName', ('java/lang/String', 0)],
                        ['Local', 'v1_8']],
                       ['BlockStatement',
                        None,
                        [['ExpressionStatement',
                          ['MethodInvocation',
                           ('java/io/PrintStream',
                            'println',
                            '(Ljava/lang/String;)V'),
                           'println',
                           True,
                           [['FieldAccess',
                             ('java/lang/System',
                              'out',
                              'Ljava/io/PrintStream;'),
                             ['TypeName',
                              ('java/lang/System', 0)]],
                            ['MethodInvocation',
                             ('java/lang/StringBuilder',
                              'toString',
                              '()Ljava/lang/String;'),
                             'toString',
                             True,
                             [['MethodInvocation',
                               ('java/lang/StringBuilder',
                                'append',
                                '(Ljava/lang/String;)Ljava/lang/StringBuilder;'),
                               'append',
                               True,
                               [['MethodInvocation',
                                 ('java/lang/StringBuilder',
                                  'append',
                                  '(Ljava/lang/String;)Ljava/lang/StringBuilder;'),
                                 'append',
                                 True,
                                 [['MethodInvocation',
                                   ('java/lang/StringBuilder',
                                    'append',
                                    '(Ljava/lang/String;)Ljava/lang/StringBuilder;'),
                                   'append',
                                   True,
                                   [['MethodInvocation',
                                     ('java/lang/StringBuilder',
                                      'append',
                                      '(Ljava/lang/Object;)Ljava/lang/StringBuilder;'),
                                     'append',
                                     True,
                                     [['ClassInstanceCreation',
                                       [['Literal',
                                         u'"DiskLruCache "',
                                         ('java/lang/String',
                                          0)]],
                                       ['TypeName',
                                        ('java/lang/StringBuilder',
                                         0)]],
                                      ['Local',
                                       'p6']]],
                                    ['Literal',
                                     u'" is corrupt: "',
                                     ('java/lang/String',
                                      0)]]],
                                  ['MethodInvocation',
                                   ('java/io/IOException',
                                    'getMessage',
                                    '()Ljava/lang/String;'),
                                   'getMessage',
                                   True,
                                   [['Local', 'v1_8']]]]],
                                ['Literal',
                                 u'", removing"',
                                 ('java/lang/String', 0)]]]]]]]],
                         ['ExpressionStatement',
                          ['MethodInvocation',
                           ('com/b/a/a', 'i', '()V'),
                           'i',
                           True,
                           [['Local', 'v0_7']]]]]])]]]]]],
                ['ReturnStatement', ['Local', 'v0_7']]]],
              ['BlockStatement',
               None,
               [['ThrowStatement',
                 ['ClassInstanceCreation',
                  [['Literal',
                    u'"maxSize <= 0"',
                    ('java/lang/String', 0)]],
                  ['TypeName',
                   ('java/lang/IllegalArgumentException', 0)]]]]]]]]],
  'comments': [],
  'flags': ['public', 'static'],
  'params': [[['TypeName', ('java/io/File', 0)], ['Local', 'p6']]],
  'ret': ['TypeName', ('com/b/a/a', 0)],
  'triple': ('com/b/a/a', 'a', '(Ljava/io/File;)Lcom/b/a/a;')}

 {'body': ['BlockStatement',
           None,
           [['ReturnStatement',
             ['FieldAccess',
              ('com/b/a/a', 'k', 'Ljava/io/Writer;'),
              ['Local', 'p1']]]]],
  'comments': [],
  'flags': ['static', 'synthetic'],
  'params': [[['TypeName', ('com/b/a/a', 0)], ['Local', 'p1']]],
  'ret': ['TypeName', ('java/io/Writer', 0)],
  'triple': ('com/b/a/a', 'a', '(Lcom/b/a/a;)Ljava/io/Writer;')}

 {'body': ['BlockStatement',
           None,
           [['ExpressionStatement',
             ['MethodInvocation',
              ('com/b/a/a', 'a', '(Lcom/b/a/b;Z)V'),
              'a',
              True,
              [['Local', 'p0'], ['Local', 'p1'], ['Local', 'p2']]]],
            ['ReturnStatement', None]]],
  'comments': [],
  'flags': ['static', 'synthetic'],
  'params': [[['TypeName', ('com/b/a/a', 0)], ['Local', 'p0']],
             [['TypeName', ('com/b/a/b', 0)], ['Local', 'p1']],
             [['TypeName', ('.boolean', 0)], ['Local', 'p2']]],
  'ret': ['TypeName', ('.void', 0)],
  'triple': ('com/b/a/a', 'a', '(Lcom/b/a/a;Lcom/b/a/b;Z)V')}

 {'body': ['BlockStatement',
           None,
           [['LocalDeclarationStatement',
             ['Literal', '0', ('.int', 0)],
             [['TypeName', ('java/util/concurrent/ThreadPoolExecutor', 0)],
              ['Local', 'v0_0']]],
            ['TryStatement',
             None,
             ['BlockStatement',
              None,
              [['LocalDeclarationStatement',
                ['FieldAccess',
                 ('com/b/a/b', 'a', 'Lcom/b/a/d;'),
                 ['Local', 'p11']],
                [['TypeName', ('java/lang/StringBuilder', 0)],
                 ['Local', 'v2_0']]]]],
             [([['TypeName',
                 ('java/util/concurrent/ThreadPoolExecutor', 0)],
                ['Local', 'v0_20']],
               ['BlockStatement',
                None,
                [['ThrowStatement', ['Local', 'v0_20']]]])]],
            ['IfStatement',
             None,
             ['BinaryInfix',
              '==',
              ['FieldAccess',
               ('com/b/a/d', 'd', 'Lcom/b/a/b;'),
               ['Local', 'v2_0']],
              ['Local', 'p11']],
             [['BlockStatement',
               None,
               [['IfStatement',
                 None,
                 ['BinaryInfix',
                  '||',
                  ['Parenthesis',
                   [['UnaryPrefix', '!', ['Local', 'p12']]]],
                  ['Parenthesis',
                   [['FieldAccess',
                     ('com/b/a/d', 'c', 'Z'),
                     ['Local', 'v2_0']]]]],
                 [['BlockStatement',
                   None,
                   [['WhileStatement',
                     None,
                     ['BinaryInfix',
                      '<',
                      ['Local', 'v0_0'],
                      ['FieldAccess',
                       ('com/b/a/a', 'i', 'I'),
                       ['Local', 'this']]],
                     ['BlockStatement',
                      None,
                      [['LocalDeclarationStatement',
                        ['MethodInvocation',
                         ('com/b/a/d', 'b', '(I)Ljava/io/File;'),
                         'b',
                         True,
                         [['Local', 'v2_0'], ['Local', 'v0_0']]],
                        [['TypeName', ('.int', 0)],
                         ['Local', 'v1_17']]],
                       ['IfStatement',
                        None,
                        ['UnaryPrefix', '!', ['Local', 'p12']],
                        [['BlockStatement',
                          None,
                          [['ExpressionStatement',
                            ['MethodInvocation',
                             ('com/b/a/a',
                              'b',
                              '(Ljava/io/File;)V'),
                             'b',
                             True,
                             [['TypeName',
                               ('com/b/a/a', 0)],
                              ['Local', 'v1_17']]]]]],
                         ['BlockStatement',
                          None,
                          [['IfStatement',
                            None,
                            ['MethodInvocation',
                             ('java/io/File',
                              'exists',
                              '()Z'),
                             'exists',
                             True,
                             [['Local', 'v1_17']]],
                            [['BlockStatement',
                              None,
                              [['LocalDeclarationStatement',
                                ['MethodInvocation',
                                 ('com/b/a/d',
                                  'a',
                                  '(I)Ljava/io/File;'),
                                 'a',
                                 True,
                                 [['Local', 'v2_0'],
                                  ['Local', 'v0_0']]],
                                [['TypeName',
                                  ('.boolean', 0)],
                                 ['Local', 'v3_7']]],
                               ['ExpressionStatement',
                                ['MethodInvocation',
                                 ('java/io/File',
                                  'renameTo',
                                  '(Ljava/io/File;)Z'),
                                 'renameTo',
                                 True,
                                 [['Local', 'v1_17'],
                                  ['Local', 'v3_7']]]],
                               ['LocalDeclarationStatement',
                                ['ArrayAccess',
                                 [['FieldAccess',
                                   ('com/b/a/d',
                                    'b',
                                    '[J'),
                                   ['Local', 'v2_0']],
                                  ['Local', 'v0_0']]],
                                [['TypeName',
                                  ('.long', 0)],
                                 ['Local', 'v4_2']]],
                               ['LocalDeclarationStatement',
                                ['MethodInvocation',
                                 ('java/io/File',
                                  'length',
                                  '()J'),
                                 'length',
                                 True,
                                 [['Local', 'v3_7']]],
                                [['TypeName',
                                  ('.long', 0)],
                                 ['Local', 'v6']]],
                               ['ExpressionStatement',
                                ['Assignment',
                                 [['ArrayAccess',
                                   [['FieldAccess',
                                     ('com/b/a/d',
                                      'b',
                                      '[J'),
                                     ['Local',
                                      'v2_0']],
                                    ['Local', 'v0_0']]],
                                  ['Local', 'v6']]]],
                               ['ExpressionStatement',
                                ['Assignment',
                                 [['FieldAccess',
                                   ('com/b/a/a',
                                    'j',
                                    'J'),
                                   ['Local', 'this']],
                                  ['Parenthesis',
                                   [['BinaryInfix',
                                     '+',
                                     ['Parenthesis',
                                      [['BinaryInfix',
                                        '-',
                                        ['FieldAccess',
                                         ('com/b/a/a',
                                          'j',
                                          'J'),
                                         ['Local',
                                          'this']],
                                        ['Local',
                                         'v4_2']]]],
                                     ['Local', 'v6']]]]]]]]]]]]]]],
                       ['ExpressionStatement',
                        ['Assignment',
                         [['Local', 'v0_0'],
                          ['Parenthesis',
                           [['BinaryInfix',
                             '+',

Source


# encoding: utf-8

__author__ = "Nils Tobias Schmidt"
__email__ = "schmidt89 at informatik.uni-marburg.de"

from pprint import pformat

from androlyze.log.Log import log
from androlyze.model.script.AndroScript import AndroScript
from androlyze.model.script.util import AnaUtil


class ASTifyMethodsText(AndroScript):
    ''' Get the AST (abstract syntax tree) for each method. '''
    
    VERSION = "0.3"
    
    def _analyze(self, apk, dalvik_vm_format, vm_analysis, gvm_analysis, *args, **kwargs):    
        
        # CFG
        for encoded_method in dalvik_vm_format.get_methods():
            try:
                method_analysis = vm_analysis.get_method(encoded_method)
            
                if encoded_method.get_code() == None:
                    continue
                
                classname = encoded_method.get_class_name()
                
                # skip android classes due to mongo db document limit
                if classname.find("Landroid") != -1:
                    continue
                
                ast = None
                if method_analysis is not None:
                    ast = AnaUtil.ast_for_method_analysis(method_analysis)
                
                if ast is not None:    
                    self.cres += '%s\n\n' % pformat(ast)
            except Exception as e:
                log.exception(e)

    def custom_result_object(self):
        return ("", "json")

    ############################################################
    #---Options
    ############################################################    

    def needs_dalvik_vm_format(self):
        return True
    
    def needs_vmanalysis(self):
        return True