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;
}