public List extractUnits()

in codeanalyzer/src/main/java/nl/obren/sokrates/sourcecode/lang/ruby/RubyHeuristicUnitsExtractor.java [16:51]


    public List<UnitInfo> extractUnits(SourceFile sourceFile, String cleanedContent) {
        List<UnitInfo> units = new ArrayList<>();

        List<String> lines = Arrays.asList(cleanedContent.split("\n"));

        for (int i = 0; i < lines.size(); i++) {
            String line = lines.get(i).replace("\t", "    ");
            String trimmedLine = line.trim();
            if (trimmedLine.startsWith("def ") && !trimmedLine.endsWith(" end") && !trimmedLine.endsWith(";end")) {
                UnitInfo unit = getUnitInfo(sourceFile, line, trimmedLine);
                unit.setStartLine(i);

                String unitEnd = line.substring(0, line.indexOf("def ")) + "end";
                int loc = 0;
                String bodyLine;
                StringBuilder body = new StringBuilder();
                StringBuilder cleanBody = new StringBuilder();
                do {
                    body.append(lines.get(i) + "\n");
                    bodyLine = lines.get(i).replace("\t", "   ");
                    if (!bodyLine.trim().isEmpty()) {
                        loc++;
                        cleanBody.append(lines.get(i) + "\n");
                    }
                    i++;
                } while (i < lines.size() && !bodyLine.equals(unitEnd));
                unit.setEndLine(i);
                unit.setLinesOfCode(loc);
                unit.setBody(body.toString());
                unit.setCleanedBody(cleanBody.toString());
                unit.setMcCabeIndex(getMcCabeIndex(body.toString()));
                units.add(unit);
            }
        }
        return units;
    }