|
|
@ -747,32 +747,34 @@ public class ClassWriter { |
|
|
|
bufstrwriter.write("default "); |
|
|
|
bufstrwriter.write("default "); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String name = mt.getName(); |
|
|
|
|
|
|
|
if("<init>".equals(name)) { |
|
|
|
|
|
|
|
if(node.type == ClassNode.CLASS_ANONYMOUS) { |
|
|
|
|
|
|
|
name = ""; |
|
|
|
|
|
|
|
dinit = true; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
name = node.simpleName; |
|
|
|
|
|
|
|
init = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else if("<clinit>".equals(name)) { |
|
|
|
|
|
|
|
name = ""; |
|
|
|
|
|
|
|
clinit = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GenericMethodDescriptor descriptor = null; |
|
|
|
GenericMethodDescriptor descriptor = null; |
|
|
|
if(DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES)) { |
|
|
|
if(DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES)) { |
|
|
|
StructGenericSignatureAttribute attr = (StructGenericSignatureAttribute)mt.getAttributes().getWithKey("Signature"); |
|
|
|
StructGenericSignatureAttribute attr = (StructGenericSignatureAttribute)mt.getAttributes().getWithKey("Signature"); |
|
|
|
if(attr != null) { |
|
|
|
if(attr != null) { |
|
|
|
descriptor = GenericMain.parseMethodSignature(attr.getSignature()); |
|
|
|
descriptor = GenericMain.parseMethodSignature(attr.getSignature()); |
|
|
|
if(md.params.length != descriptor.params.size()) { |
|
|
|
int actualParams = md.params.length; |
|
|
|
|
|
|
|
if(isEnum && init) actualParams -= 2; |
|
|
|
|
|
|
|
if(actualParams != descriptor.params.size()) { |
|
|
|
DecompilerContext.getLogger().writeMessage("Inconsistent generic signature in method "+mt.getName()+" "+mt.getDescriptor(), IFernflowerLogger.WARNING); |
|
|
|
DecompilerContext.getLogger().writeMessage("Inconsistent generic signature in method "+mt.getName()+" "+mt.getDescriptor(), IFernflowerLogger.WARNING); |
|
|
|
descriptor = null; |
|
|
|
descriptor = null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String name = mt.getName(); |
|
|
|
|
|
|
|
if("<init>".equals(name)) { |
|
|
|
|
|
|
|
if(node.type == ClassNode.CLASS_ANONYMOUS) { |
|
|
|
|
|
|
|
name = ""; |
|
|
|
|
|
|
|
dinit = true; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
name = node.simpleName; |
|
|
|
|
|
|
|
init = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else if("<clinit>".equals(name)) { |
|
|
|
|
|
|
|
name = ""; |
|
|
|
|
|
|
|
clinit = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean throwsExceptions = false; |
|
|
|
boolean throwsExceptions = false; |
|
|
|
|
|
|
|
|
|
|
|
int param_count_explicit = 0; |
|
|
|
int param_count_explicit = 0; |
|
|
@ -780,7 +782,7 @@ public class ClassWriter { |
|
|
|
if(!clinit && !dinit) { |
|
|
|
if(!clinit && !dinit) { |
|
|
|
|
|
|
|
|
|
|
|
boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; |
|
|
|
boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; |
|
|
|
|
|
|
|
|
|
|
|
// formal type parameters
|
|
|
|
// formal type parameters
|
|
|
|
if(descriptor != null && !descriptor.fparameters.isEmpty()) { |
|
|
|
if(descriptor != null && !descriptor.fparameters.isEmpty()) { |
|
|
|
bufstrwriter.write("<"); |
|
|
|
bufstrwriter.write("<"); |
|
|
@ -830,8 +832,9 @@ public class ClassWriter { |
|
|
|
|
|
|
|
|
|
|
|
boolean firstpar = true; |
|
|
|
boolean firstpar = true; |
|
|
|
int index = isEnum && init ? 3 : thisvar ? 1 : 0; |
|
|
|
int index = isEnum && init ? 3 : thisvar ? 1 : 0; |
|
|
|
int start = isEnum && init ? 2 : 0; |
|
|
|
int start = isEnum && init && descriptor == null ? 2 : 0; |
|
|
|
for(int i=start;i<md.params.length;i++) { |
|
|
|
int params = descriptor == null ? md.params.length : descriptor.params.size(); |
|
|
|
|
|
|
|
for(int i=start;i<params;i++) { |
|
|
|
if(signFields == null || signFields.get(i) == null) { |
|
|
|
if(signFields == null || signFields.get(i) == null) { |
|
|
|
|
|
|
|
|
|
|
|
if(!firstpar) { |
|
|
|
if(!firstpar) { |
|
|
|