Skip to content

Commit 15ddfd6

Browse files
committed
Attempt to add referenced InnerClasses to InnerClass table. Potential fix for scala compile issues.
1 parent 78da22c commit 15ddfd6

2 files changed

Lines changed: 41 additions & 29 deletions

File tree

src/main/java/de/oceanlabs/mcp/mcinjector/adaptors/JsonAttribute.java

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/main/java/de/oceanlabs/mcp/mcinjector/adaptors/LVTFernflower.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void visitEnd()
4545
{
4646
if (0x2603 != lvn.name.charAt(0)) // Snowmen, added in 1.8.2? rename them to FF names
4747
continue;
48-
log.info(" Renaming LVT: " + lvn.index + " " + lvn.name + " " +lvn.desc + " -> " + "var" + lvn.index);
48+
log.info(" Renaming LVT: " + lvn.index + " " + lvn.name + " " + lvn.desc + " -> " + "var" + lvn.index);
4949
lvn.name = "var" + lvn.index;
5050
}
5151
}

0 commit comments

Comments
 (0)