@@ -96,7 +96,15 @@ public MethodVisitor visitMethod(int access, String name, String desc, String si
9696 for (Type t : Type .getArgumentTypes (desc ))
9797 referenced (t );
9898
99- return super .visitMethod (access , name , desc , signature , exceptions );
99+ return new MethodVisitor (api , super .visitMethod (access , name , desc , signature , exceptions ))
100+ {
101+ public void visitLdcInsn (final Object cst )
102+ {
103+ if (cst instanceof Type )
104+ referenced ((Type )cst );
105+ super .visitLdcInsn (cst );
106+ }
107+ };
100108 }
101109
102110 @ Override
@@ -116,36 +124,33 @@ public void visitOuterClass(String owner, String name, String desc)
116124 @ Override
117125 public void visitEnd ()
118126 {
119- if (json == null )
120- {
121- super .visitEnd ();
122- return ;
123- }
124-
125- JsonStruct .EnclosingMethod enc = json .enclosingMethod ;
126- if (enc != null && !visitedOuter && enc .name != null && enc .desc != null )
127+ if (json != null )
127128 {
128- log .fine (" Adding Outer Class:" );
129- log .fine (" Owner: " + enc .owner );
130- log .fine (" Method: " + enc .name + enc .desc );
131- super .visitOuterClass (enc .owner , enc .name , enc .desc );
132- }
129+ JsonStruct .EnclosingMethod enc = json .enclosingMethod ;
130+ if (enc != null && !visitedOuter && enc .name != null && enc .desc != null )
131+ {
132+ log .fine (" Adding Outer Class:" );
133+ log .fine (" Owner: " + enc .owner );
134+ log .fine (" Method: " + enc .name + enc .desc );
135+ super .visitOuterClass (enc .owner , enc .name , enc .desc );
136+ }
133137
134- if (json .innerClasses != null )
135- {
136- for (JsonStruct .InnerClass inner : json .innerClasses )
138+ if (json .innerClasses != null )
137139 {
138- if (! visitedInners . contains ( inner . inner_class ) )
140+ for ( JsonStruct . InnerClass inner : json . innerClasses )
139141 {
140- visitedInners .add (inner .inner_class );
141- log .fine (" Adding Inner Class:" );
142- log .fine (" Inner: " + inner .inner_class );
143- log .fine (" Access: " + getAccess (inner .getAccess ()));
144- if (inner .outer_class != null )
145- log .fine (" Outer: " + inner .outer_class );
146- if (inner .inner_name != null )
147- log .fine (" Name: " + inner .inner_name );
148- super .visitInnerClass (inner .inner_class , inner .outer_class , inner .inner_name , inner .getAccess ());
142+ if (!visitedInners .contains (inner .inner_class ))
143+ {
144+ visitedInners .add (inner .inner_class );
145+ log .fine (" Adding Inner Class:" );
146+ log .fine (" Inner: " + inner .inner_class );
147+ log .fine (" Access: " + getAccess (inner .getAccess ()));
148+ if (inner .outer_class != null )
149+ log .fine (" Outer: " + inner .outer_class );
150+ if (inner .inner_name != null )
151+ log .fine (" Name: " + inner .inner_name );
152+ super .visitInnerClass (inner .inner_class , inner .outer_class , inner .inner_name , inner .getAccess ());
153+ }
149154 }
150155 }
151156 }
@@ -156,7 +161,11 @@ public void visitEnd()
156161 JsonStruct .InnerClass ic = mci .inners .get (inner );
157162 if (ic == null )
158163 {
159- log .fine (" Referenced Inner Class: " + inner + " (missing)" );
164+ log .fine (" Referenced Inner Class: " + inner + " (missing) assuming defaults" );
165+ int idx = inner .lastIndexOf ('$' );
166+ String outer = inner .substring (0 , idx );
167+ String name = inner .substring (idx + 1 );
168+ super .visitInnerClass (inner , outer , name , Opcodes .ACC_PUBLIC ); //Hacky, but ASSUME public
160169 }
161170 else
162171 {
@@ -167,7 +176,10 @@ public void visitEnd()
167176 log .fine (" Outer: " + ic .outer_class );
168177 if (ic .inner_name != null )
169178 log .fine (" Name: " + ic .inner_name );
179+ super .visitInnerClass (ic .inner_class , ic .outer_class , ic .inner_name , ic .getAccess ());
170180 }
171181 }
182+
183+ super .visitEnd ();
172184 }
173185}
0 commit comments