From 6e303d859231a57051ffff8fc25be72e79ff0d26 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 25 Jun 2014 12:40:11 +0200 Subject: [PATCH] false signatures consistency warning on enums --- src/de/fernflower/main/ClassWriter.java | 39 +++++++++++++------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/de/fernflower/main/ClassWriter.java b/src/de/fernflower/main/ClassWriter.java index eec8611..72dcf97 100644 --- a/src/de/fernflower/main/ClassWriter.java +++ b/src/de/fernflower/main/ClassWriter.java @@ -747,32 +747,34 @@ public class ClassWriter { bufstrwriter.write("default "); } + String name = mt.getName(); + if("".equals(name)) { + if(node.type == ClassNode.CLASS_ANONYMOUS) { + name = ""; + dinit = true; + } else { + name = node.simpleName; + init = true; + } + } else if("".equals(name)) { + name = ""; + clinit = true; + } + GenericMethodDescriptor descriptor = null; if(DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES)) { StructGenericSignatureAttribute attr = (StructGenericSignatureAttribute)mt.getAttributes().getWithKey("Signature"); if(attr != null) { 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); descriptor = null; } } } - String name = mt.getName(); - if("".equals(name)) { - if(node.type == ClassNode.CLASS_ANONYMOUS) { - name = ""; - dinit = true; - } else { - name = node.simpleName; - init = true; - } - } else if("".equals(name)) { - name = ""; - clinit = true; - } - boolean throwsExceptions = false; int param_count_explicit = 0; @@ -780,7 +782,7 @@ public class ClassWriter { if(!clinit && !dinit) { boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; - + // formal type parameters if(descriptor != null && !descriptor.fparameters.isEmpty()) { bufstrwriter.write("<"); @@ -830,8 +832,9 @@ public class ClassWriter { boolean firstpar = true; int index = isEnum && init ? 3 : thisvar ? 1 : 0; - int start = isEnum && init ? 2 : 0; - for(int i=start;i