src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java (11 lines): - line 85: // FIXME: used in FlattenStatementsHelper.flattenStatement()! check and remove - line 172: !stat.getNeighbours(EdgeType.EXCEPTION, EdgeDirection.FORWARD).contains(post)) { // TODO: second condition redundant? - line 276: if (edge == null) { // FIXME: redundant? - line 305: if (edge.getDestination() != null) { // TODO: redundant? - line 310: // TODO: make obsolete and remove - line 452: // TODO: make obsolete and remove - line 556: (edge.getType() == EdgeType.REGULAR || edge.getType() == EdgeType.EXCEPTION)) { // TODO: edge filter? - line 772: if (edge.labeled && edge.explicit) { // FIXME: consistent setting - line 781: // FIXME: default switch - line 806: public HashSet getLabelEdges() { // FIXME: why HashSet? - line 855: //TODO: Cleanup/cache? src/org/jetbrains/java/decompiler/modules/decompiler/IdeaNotNullHelper.java (10 lines): - line 68: // TODO: FUNCTION_NE also possible if reversed order (in theory) - line 84: second_param.getExprType().getType() == CodeConstants.TYPE_NULL) { // TODO: reversed parameter order - line 225: ((FunctionExprent)if_condition).getFuncType() == FunctionExprent.FUNCTION_EQ) { // TODO: reversed order possible (in theory) - line 238: second_param.getExprType().getType() == CodeConstants.TYPE_NULL) { // TODO: reversed parameter order - line 240: if (first_param.equals(exprent_value)) { // TODO: check for absence of side effects like method invocations etc. - line 243: // TODO: special check for IllegalStateException - line 293: ((FunctionExprent)if_condition).getFuncType() == FunctionExprent.FUNCTION_EQ) { // TODO: reversed order possible (in theory) - line 302: second_param.getExprType().getType() == CodeConstants.TYPE_NULL) { // TODO: reversed parameter order - line 303: if (first_param.equals(exprent_value)) { // TODO: check for absence of side effects like method invocations etc. - line 306: // TODO: special check for IllegalStateException src/org/jetbrains/java/decompiler/modules/decompiler/FinallyProcessor.java (7 lines): - line 328: // FIXME: special case synchronized - line 515: // TODO: correct handling (merging) of multiple paths - line 576: // FIXME: compare handlers if possible - line 614: if (graph.getLast() != successor) { // FIXME: why? - line 649: if (multiple) { // TODO: generic solution - line 684: // FIXME: exception edge possible? - line 797: if (first.group != CodeConstants.GROUP_JUMP) { // FIXME: switch comparison src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java (6 lines): - line 119: // FIXME: remove the first parameter completely from the list. It's the object type for a virtual lambda method. - line 200: if (ginstance.getArguments().get(x) != null) { //TODO: Wildcards are null arguments.. look into fixing things? - line 301: if (!className.equals(this_classname)) { // TODO: direct comparison to the super class? - line 440: // TODO: tap into IDEA indices to access libraries methods details - line 490: // TODO: move to CodeConstants ??? - line 572: GenericMethodDescriptor gen = mtt.getSignature(); //TODO: Find synthetic flags for params, as Enum generic signatures do no contain the String,int params src/org/jetbrains/java/decompiler/main/rels/NestedMemberAccess.java (6 lines): - line 84: if (fexpr.getClassname().equals(node.classStruct.qualifiedName)) { // FIXME: check for private flag of the field - line 117: if (fexpras.getClassname().equals(node.classStruct.qualifiedName)) { // FIXME: check for private flag of the field - line 130: if (type == MethodAccess.METHOD) { // FIXME: check for private flag of the method - line 174: if (fexpras.getClassname().equals(node.classStruct.qualifiedName)) { // FIXME: check for private flag of the field - line 224: while (!stack.isEmpty()) { // TODO: replace with interface iterator? - line 334: // // FIXME: impossible case. MethodAccess.NORMAL is not saved in the map src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java (5 lines): - line 220: // FIXME: Ugly code, to be rewritten. A tuple class is needed. - line 315: //TODO: for now treat Links as Strings - line 350: if (offsets != null) { //TODO: Figure out why this nulls in some cases - line 711: return UNDEFINED_TYPE_STRING; // FIXME: a warning should be logged - line 727: return typeAnnWriteHelpers.stream().filter(typeAnnWriteHelper -> { // TODO remove duplicate src/org/jetbrains/java/decompiler/main/rels/NestedClassProcessor.java (4 lines): - line 83: if(enclosingMethodWrapper != null) { // e.g. in case of switch-on-enum. FIXME: some proper handling of multiple enclosing classes - line 317: // FIXME: flags of variables are wrong! Correct the entire functionality. - line 589: child.superInvocation = invokeExpr; // FIXME: save original names of parameters - line 669: fields.add(keyField == null ? null : new VarFieldPair(keyField, new VarVersion(-1, 0))); // TODO: null? src/org/jetbrains/java/decompiler/modules/decompiler/MergeHelper.java (4 lines): - line 378: if (hasinit || issingle) { // FIXME: issingle sufficient? - line 508: //cleanEmptyStatements(stat, firstData); //TODO: Look into this and see what it does... - line 529: //TODO: Check inheritance for Iterable instead of just names? - line 605: //FunctionExprent funcCond = (FunctionExprent)drillNots(stat.getConditionExprent()); //TODO: Verify this is counter < copy.length src/org/jetbrains/java/decompiler/main/ClassWriter.java (4 lines): - line 290: fieldToJava(wrapper, cl, fd, buffer, indent + 1, dummy_tracer); // FIXME: insert real tracer - line 300: // FIXME: fields don't matter at the moment - line 637: // FIXME: special case field initializer. Can map to more than one method (constructor) and bytecode instruction. - line 1002: // TODO: optimize src/org/jetbrains/java/decompiler/modules/decompiler/exps/Exprent.java (4 lines): - line 248: //TODO: Check target output level and use <> operator? - line 278: //TODO: Loop enclosing classes? - line 286: //TODO: Loop enclosing method? - line 317: boolean anyMatch = false; //TODO: allMatch instead of anyMatch? src/org/jetbrains/java/decompiler/main/ClassesProcessor.java (4 lines): - line 261: // FIXME: check for consistent naming - line 342: // FIXME: check constructors - line 343: // FIXME: check enclosing class/method - line 578: (lambdaInformation.content_method_invocation_type == CodeConstants.CONSTANT_MethodHandle_REF_invokeStatic); // FIXME: redundant? src/org/jetbrains/java/decompiler/modules/decompiler/exps/FieldExprent.java (3 lines): - line 130: if (currentMethod != null) { // FIXME: remove - line 134: if (!classname.equals(this_classname)) { // TODO: direct comparison to the super class? - line 157: VarExprent.VAR_NAMELESS_ENCLOSURE)) { // FIXME: workaround for field access of an anonymous enclosing class. Find a better way. src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java (3 lines): - line 312: boolean anyMatch = false; //TODO: allMatch instead of anyMatch? - line 330: else { //TODO: Capture generics to make cast better? - line 461: Objects.equals(lstOperands, fe.lstOperands); // TODO: order of operands insignificant src/org/jetbrains/java/decompiler/main/InitializerProcessor.java (3 lines): - line 142: //TODO: Verify that the body is JUST a this([args]) call? - line 208: if (!isAnonymous) { // FIXME: doesn't make sense - line 296: if (!varName.equals("this") && !varName.endsWith(".this")) { // FIXME: remove direct comparison with strings src/org/jetbrains/java/decompiler/main/rels/MethodProcessorRunnable.java (3 lines): - line 102: // TODO: move to the start, before jsr inlining - line 231: // FIXME: !! - line 250: // FIXME: new edge type needed src/org/jetbrains/java/decompiler/util/VBStyleCollection.java (2 lines): - line 32: public boolean remove(Object element) { // TODO: error on void remove(E element) - line 61: // TODO: speed up the method src/org/jetbrains/java/decompiler/modules/decompiler/DomHelper.java (2 lines): - line 318: reducibility++) { // FIXME: implement proper node splitting. For now up to 5 nodes in sequence are splitted. - line 405: vbPost.addWithKey(new ArrayList<>(set), st.id); // FIXME: sort order!! src/org/jetbrains/java/decompiler/modules/code/DeadCodeHelper.java (2 lines): - line 88: // FIXME: flag in the basic block - line 490: // TODO: implement a dummy start block src/org/jetbrains/java/decompiler/modules/renamer/IdentifierConverter.java (2 lines): - line 149: // TODO: rename packages - line 220: // FIXME: should overloaded fields become the same name? src/org/jetbrains/java/decompiler/modules/decompiler/StrongConnectivityHelper.java (2 lines): - line 35: // should not find any more nodes! FIXME: ?? - line 61: List successors = statement.getNeighbours(EdgeType.REGULAR, EdgeDirection.FORWARD); // TODO: set? src/org/jetbrains/java/decompiler/modules/decompiler/LabelHelper.java (2 lines): - line 132: if (edge.getType() == EdgeType.BREAK) { // FIXME: ? - line 279: processEdgesWithNext(synstat.getFirst(), setExplicitEdges(stat.getFirst()), synstat.getBody()); // FIXME: basic block? src/org/jetbrains/java/decompiler/main/rels/LambdaProcessor.java (2 lines): - line 51: // FIXME: extend for Eclipse etc. at some point - line 126: // FIXME: mixed hierarchy? src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java (2 lines): - line 557: /* TODO: See if we can optimize and only go up till needed. - line 859: if (_new.isAnonymous()) { //TODO: Check for Lambda here? src/org/jetbrains/java/decompiler/modules/decompiler/deobfuscator/ExceptionDeobfuscator.java (2 lines): - line 240: if (rangeList.contains(handler)) { // TODO: better removing strategy - line 546: // TODO: more sanity checks? src/org/jetbrains/java/decompiler/struct/gen/VarType.java (2 lines): - line 10: public class VarType implements Type { // TODO: optimize switch - line 186: //throw new RuntimeException("array dimension equals 0!"); FIXME: investigate this case src/org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java (2 lines): - line 379: BasicBlock exit = blocks.getWithKey(enter.id + 1); // FIXME: find successor in a better way - line 440: // FIXME: better sort order src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statements.java (2 lines): - line 16: else if (stat.isLabeled()) { // FIXME: Why?? - line 31: if (className != null) { // any this instance. TODO: Restrict to current class? src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionEdge.java (1 line): - line 4: public class VarVersionEdge { // FIXME: can be removed? src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarVersionsProcessor.java (1 line): - line 48: // FIXME: advanced merging src/org/jetbrains/java/decompiler/modules/decompiler/InlineSingleBlockHelper.java (1 line): - line 136: // FIXME: count labels properly src/org/jetbrains/java/decompiler/code/cfg/BasicBlock.java (1 line): - line 74: // FIXME: unify block comparisons: id or direct equality src/org/jetbrains/java/decompiler/modules/decompiler/exps/VarExprent.java (1 line): - line 218: Objects.equals(getVarType(), ve.getVarType()); // FIXME: varType comparison redundant? src/org/jetbrains/java/decompiler/modules/decompiler/stats/CatchStatement.java (1 line): - line 56: // FIXME: for now simply the first type. Should get the first common superclass when possible. src/org/jetbrains/java/decompiler/modules/renamer/MemberConverterHelper.java (1 line): - line 75: // TODO: consider possible conflicts with not renamed classes, fields and methods! src/org/jetbrains/java/decompiler/struct/StructClass.java (1 line): - line 215: majorVersion == CodeConstants.BYTECODE_JAVA_LE_4 && minorVersion > 0; // FIXME: check second condition src/org/jetbrains/java/decompiler/modules/decompiler/sforms/SSAUConstructorSparseEx.java (1 line): - line 614: if (!mapTrueSource.isEmpty() && !mapNew.isEmpty()) { // FIXME: what for?? src/org/jetbrains/java/decompiler/modules/decompiler/decompose/SupportComponent.java (1 line): - line 54: // TODO: The algorithm isn't able to decompose nested loops, so we simply quit processing for now src/org/jetbrains/java/decompiler/main/ClassReference14Processor.java (1 line): - line 206: wrapper.getClassStruct().getField(field.getName(), field.getDescriptor().descriptorString); // FIXME: can be null! why?? src/org/jetbrains/java/decompiler/modules/decompiler/SimplifyExprentsHelper.java (1 line): - line 287: // TODO: check for a number type. Failure extremely improbable, but nevertheless... src/org/jetbrains/java/decompiler/modules/decompiler/decompose/FastExtendedPostdominanceHelper.java (1 line): - line 212: // TODO: replace with a standard set? src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarTypeProcessor.java (1 line): - line 139: case FunctionExprent.FUNCTION_IIF -> { // FIXME: src/org/jetbrains/java/decompiler/modules/decompiler/PPandMMHelper.java (1 line): - line 174: // TODO: Verify the types are in the same 'family' {byte->short->int} src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java (1 line): - line 11: private final List protectedRange; // FIXME: replace with set src/org/jetbrains/java/decompiler/modules/decompiler/StackVarsProcessor.java (1 line): - line 336: // FIXME: fix the entire method! src/org/jetbrains/java/decompiler/struct/consts/ConstantPool.java (1 line): - line 166: //TODO: Fix newElement being null caused by ln.classname being a leaf class instead of the class that declared the field/method. src/org/jetbrains/java/decompiler/modules/decompiler/TryHelper.java (1 line): - line 623: // TODO: how does this handle nested nullable try stats? src/org/jetbrains/java/decompiler/modules/decompiler/stats/DoStatement.java (1 line): - line 114: incFirstExprent.inferExprType(null); //TODO: Find a better then null? For now just calls it to clear casts if needed src/org/jetbrains/java/decompiler/modules/decompiler/IfHelper.java (1 line): - line 402: // FIXME: rewrite the entire method!!! keep in mind finally exits!!