diff options
author | Roman Shevchenko <roman.shevchenko@jetbrains.com> | 2014-09-02 20:56:03 +0400 |
---|---|---|
committer | Roman Shevchenko <roman.shevchenko@jetbrains.com> | 2014-09-03 11:39:32 +0400 |
commit | 2df49d32a71818227e80a8628688906f2ede8a6a (patch) | |
tree | dced5f5ebf2f860d5683abf6910f180a67f9471d /src/org/jetbrains/java/decompiler/modules | |
parent | c0c83126a69a0c652f343e972f727ffd7f5f10af (diff) | |
download | fernflower-2df49d32a71818227e80a8628688906f2ede8a6a.tar fernflower-2df49d32a71818227e80a8628688906f2ede8a6a.tar.gz fernflower-2df49d32a71818227e80a8628688906f2ede8a6a.tar.lz fernflower-2df49d32a71818227e80a8628688906f2ede8a6a.tar.xz fernflower-2df49d32a71818227e80a8628688906f2ede8a6a.zip |
java-decompiler: fixes and cleanups
- unified attribute loading code
- common methods for checking member flags
- verifying skip()
- correct resource closing
- typos
Diffstat (limited to 'src/org/jetbrains/java/decompiler/modules')
9 files changed, 37 insertions, 45 deletions
diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/IdeaNotNullHelper.java b/src/org/jetbrains/java/decompiler/modules/decompiler/IdeaNotNullHelper.java index 9934298..0f5141a 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/IdeaNotNullHelper.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/IdeaNotNullHelper.java @@ -82,7 +82,7 @@ public class IdeaNotNullHelper { if (first_param.type == Exprent.EXPRENT_VAR) { VarExprent var = (VarExprent)first_param; - boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; + boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); VBStyleCollection<StructGeneralAttribute, String> attributes = mt.getAttributes(); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AssignmentExprent.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AssignmentExprent.java index 33d30e9..6c6b1f3 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AssignmentExprent.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/AssignmentExprent.java @@ -109,43 +109,40 @@ public class AssignmentExprent extends Exprent { VarType leftType = left.getExprType(); VarType rightType = right.getExprType(); - String res = right.toJava(indent); - - if (condtype == CONDITION_NONE && - !leftType.isSuperset(rightType) && - (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT)) { - if (right.getPrecedence() >= FunctionExprent.getPrecedence(FunctionExprent.FUNCTION_CAST)) { - res = "(" + res + ")"; - } - - res = "(" + ExprProcessor.getCastTypeName(leftType) + ")" + res; - } - - StringBuilder buffer = new StringBuilder(); - - boolean finstat_init = false; + boolean fieldInStatInit = false; if (left.type == Exprent.EXPRENT_FIELD) { // first assignment to a final field. Field name without "this" in front of it FieldExprent field = (FieldExprent)left; - if (field.isStatic()) { - ClassNode node = ((ClassNode)DecompilerContext.getProperty(DecompilerContext.CURRENT_CLASS_NODE)); - if (node != null) { - StructClass cl = node.classStruct; - StructField fd = cl.getField(field.getName(), field.getDescriptor().descriptorString); - - if (fd != null && (fd.access_flags & CodeConstants.ACC_FINAL) != 0) { - finstat_init = true; - } + ClassNode node = ((ClassNode)DecompilerContext.getProperty(DecompilerContext.CURRENT_CLASS_NODE)); + if (node != null) { + StructClass cl = node.classStruct; + StructField fd = cl.getField(field.getName(), field.getDescriptor().descriptorString); + if (fd != null && field.isStatic() && fd.hasModifier(CodeConstants.ACC_FINAL)) { + fieldInStatInit = true; } } } - if (finstat_init) { + StringBuilder buffer = new StringBuilder(); + + if (fieldInStatInit) { buffer.append(((FieldExprent)left).getName()); } else { buffer.append(left.toJava(indent)); } + String res = right.toJava(indent); + + if (condtype == CONDITION_NONE && + !leftType.isSuperset(rightType) && + (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT)) { + if (right.getPrecedence() >= FunctionExprent.getPrecedence(FunctionExprent.FUNCTION_CAST)) { + res = "(" + res + ")"; + } + + res = "(" + ExprProcessor.getCastTypeName(leftType) + ")" + res; + } + buffer.append(condtype == CONDITION_NONE ? " = " : funceq[condtype]).append(res); return buffer.toString(); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java index 1edebc9..04758dc 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java @@ -330,20 +330,19 @@ public class InvocationExprent extends Exprent { List<VarVersionPaar> sigFields = null; boolean isEnum = false; if (functype == TYP_INIT) { - ClassNode newnode = DecompilerContext.getClassProcessor().getMapRootClasses().get(classname); + ClassNode newNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(classname); - if (newnode != null) { // own class - if (newnode.wrapper != null) { - sigFields = newnode.wrapper.getMethodWrapper("<init>", stringDescriptor).signatureFields; + if (newNode != null) { // own class + if (newNode.wrapper != null) { + sigFields = newNode.wrapper.getMethodWrapper("<init>", stringDescriptor).signatureFields; } else { - if (newnode.type == ClassNode.CLASS_MEMBER && (newnode.access & CodeConstants.ACC_STATIC) == 0) { // non-static member class + if (newNode.type == ClassNode.CLASS_MEMBER && (newNode.access & CodeConstants.ACC_STATIC) == 0) { // non-static member class sigFields = new ArrayList<VarVersionPaar>(Collections.nCopies(lstParameters.size(), (VarVersionPaar)null)); sigFields.set(0, new VarVersionPaar(-1, 0)); } } - isEnum = (newnode.classStruct.access_flags & CodeConstants.ACC_ENUM) != 0 && - DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_ENUM); + isEnum = newNode.classStruct.hasModifier(CodeConstants.ACC_ENUM) && DecompilerContext.getOption(IFernflowerPreferences.DECOMPILE_ENUM); } } diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAConstructorSparseEx.java b/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAConstructorSparseEx.java index 2150f86..dbec793 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAConstructorSparseEx.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAConstructorSparseEx.java @@ -487,8 +487,7 @@ public class SSAConstructorSparseEx { } private SFormsFastMapDirect createFirstMap(StructMethod mt) { - - boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; + boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAUConstructorSparseEx.java b/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAUConstructorSparseEx.java index 97b6448..fbd652c 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAUConstructorSparseEx.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAUConstructorSparseEx.java @@ -756,8 +756,7 @@ public class SSAUConstructorSparseEx { } private SFormsFastMapDirect createFirstMap(StructMethod mt, RootStatement root) { - - boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; + boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java index 24207ef..fdd6cd5 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java @@ -53,7 +53,7 @@ public class VarDefinitionHelper { VarNamesCollector vc = DecompilerContext.getVarNamesCollector(); - boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; + boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarTypeProcessor.java b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarTypeProcessor.java index d7d3d2e..a21d71f 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarTypeProcessor.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarTypeProcessor.java @@ -49,7 +49,7 @@ public class VarTypeProcessor { StructMethod mt = (StructMethod)DecompilerContext.getProperty(DecompilerContext.CURRENT_METHOD); // method descriptor - boolean thisvar = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) == 0; + boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = (MethodDescriptor)DecompilerContext.getProperty(DecompilerContext.CURRENT_METHOD_DESCRIPTOR); diff --git a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionsProcessor.java b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionsProcessor.java index 09d8def..06b7216 100644 --- a/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionsProcessor.java +++ b/src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionsProcessor.java @@ -170,7 +170,7 @@ public class VarVersionsProcessor { } } - boolean is_method_static = (mt.getAccessFlags() & CodeConstants.ACC_STATIC) != 0; + boolean is_method_static = mt.hasModifier(CodeConstants.ACC_STATIC); final HashMap<VarVersionPaar, Integer> mapMergedVersions = new HashMap<VarVersionPaar, Integer>(); diff --git a/src/org/jetbrains/java/decompiler/modules/renamer/IdentifierConverter.java b/src/org/jetbrains/java/decompiler/modules/renamer/IdentifierConverter.java index 546ece3..adff502 100644 --- a/src/org/jetbrains/java/decompiler/modules/renamer/IdentifierConverter.java +++ b/src/org/jetbrains/java/decompiler/modules/renamer/IdentifierConverter.java @@ -232,11 +232,10 @@ public class IdentifierConverter { StructMethod mt = methods.get(i); String key = methods.getKey(i); - int access_flags = mt.getAccessFlags(); - boolean isPrivate = ((access_flags & CodeConstants.ACC_PRIVATE) != 0); + boolean isPrivate = mt.hasModifier(CodeConstants.ACC_PRIVATE); String name = mt.getName(); - if (!cl.isOwn() || (access_flags & CodeConstants.ACC_NATIVE) != 0) { + if (!cl.isOwn() || mt.hasModifier(CodeConstants.ACC_NATIVE)) { // external and native methods must not be renamed if (!isPrivate) { names.put(key, name); @@ -426,8 +425,7 @@ public class IdentifierConverter { break; } else { - - boolean isInterface = ((clstr.access_flags & CodeConstants.ACC_INTERFACE) != 0); + boolean isInterface = clstr.hasModifier(CodeConstants.ACC_INTERFACE); boolean found_parent = false; if (isInterface) { |