@@ -47,6 +47,26 @@ public int getPrecedence() {
4747 @ Override
4848 public TextBuffer toJava (int indent ) {
4949 ClassesProcessor .ClassNode node = DecompilerContext .getClassProcessor ().getMapRootClasses ().get (getNewType ().value );
50+ if (node != null && new KotlinChooser ().isLanguage (node .classStruct )) {
51+ KotlinMetadata ktData = node .classStruct .getAttribute (KotlinMetadata .KEY );
52+ if (ktData .metadata instanceof KotlinMetadata .FunctionReference ) {
53+ Exprent receiver = getConstructor ().getLstParameters ().get (0 );
54+ TextBuffer buf = KotlinWriter .stringifyReference (indent , node , bytecode , receiver );
55+ if (buf != null ) {
56+ return buf ;
57+ }
58+ }
59+
60+ if (node .type == ClassesProcessor .ClassNode .Type .LOCAL && ktData .metadata instanceof KotlinMetadata .Class ) {
61+ // Work around the Java-targeted anonymous class verification
62+ node .type = ClassesProcessor .ClassNode .Type .ANONYMOUS ;
63+ TextBuffer buf = new TextBuffer ();
64+ buf .addBytecodeMapping (bytecode );
65+ new KotlinWriter ().writeClass (node , buf , indent );
66+ return buf ;
67+ }
68+ }
69+
5070 if (isLambda ()) {
5171 MethodWrapper outerWrapper = DecompilerContext .getContextProperty (DecompilerContext .CURRENT_METHOD_WRAPPER );
5272 try {
@@ -148,19 +168,9 @@ public TextBuffer toJava(int indent) {
148168 }
149169 } else if (isAnonymous ()) {
150170 TextBuffer buf = new TextBuffer ();
171+ buf .addBytecodeMapping (bytecode );
151172 new KotlinWriter ().writeClass (node , buf , indent );
152173 return buf ;
153- } else if (node != null && new KotlinChooser ().isLanguage (node .classStruct )) {
154- KotlinMetadata ktData = node .classStruct .getAttribute (KotlinMetadata .KEY );
155- if (!(ktData .metadata instanceof KotlinMetadata .FunctionReference )) {
156- return super .toJava (indent );
157- }
158-
159- Exprent receiver = getConstructor ().getLstParameters ().get (0 );
160- TextBuffer buf = KotlinWriter .stringifyReference (indent , node , bytecode , receiver );
161- if (buf != null ) {
162- return buf ;
163- }
164174 }
165175
166176 return super .toJava (indent );
0 commit comments