metric-providers/org.ossmeter.metricprovider.rascal.LOC/META-INF/RASCAL.MF Diff Switch to side-by-side view

metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LOCs.emf
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LinesOfCodeData.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LinesOfCodeDataCollection.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/Loc.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LocViz.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/LinesOfCode.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.LOC/META-INF/MANIFEST.MF Diff Switch to side-by-side view

metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LOCs.ecore to metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/LOC.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/org/ossmeter/metricprovider/rascal/metric/trans/model/LOCs.ecore +++ b/metric-providers/org.ossmeter.metricprovider.rascal.LOC/src/LOC.rsc @@ -1,34 +1,82 @@ -<?xml version="1.0" encoding="ASCII"?> -<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="org.ossmeter.metricprovider.rascal.metric.trans.model"> - <eClassifiers xsi:type="ecore:EClass" name="Loc"> - <eAnnotations source="db"> - <details key="qualifiedCollectionNames" value="true"/> - </eAnnotations> - <eAnnotations source="customize"/> - <eStructuralFeatures xsi:type="ecore:EReference" name="linesOfCode" upperBound="-1" eType="//LinesOfCodeData" containment="true"/> - </eClassifiers> - <eClassifiers xsi:type="ecore:EClass" name="LinesOfCodeData"> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="file"> - <eAnnotations source="searchable"/> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="totalLines"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="commentedLines"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="emptyLines"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceLines"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="revisionNumber"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="date"> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> - </eStructuralFeatures> - </eClassifiers> -</ecore:EPackage> +module LOC + +import lang::java::m3::Core; +import analysis::graphs::Graph; +import IO; +import List; +import String; +import Set; +import ValueIO; +import org::ossmeter::metricprovider::Manager; +import org::ossmeter::metricprovider::ProjectDelta; + +import analysis::statistics::Frequency; +import analysis::statistics::Inference; + +alias locResult = tuple[int total, int comment, int empty, int source]; + +@metric{loc} +@doc{loc} +@friendlyName{loc} +map[str, int] countLoc(ProjectDelta delta, map[str, loc] workingCopyFolders, map[str, loc] scratchFolders) { + map[str file, int lines] result = (); + map[str, list[str]] changedItemsPerRepo = getChangedItemsPerRepository(delta); + + for (str repo <- changedItemsPerRepo) { + list[str] changedItems = changedItemsPerRepo[repo]; + loc workingCopyFolder = workingCopyFolders[repo]; + loc scratchFolder = scratchFolders[repo]; + + for (str changedItem <- changedItems) { + if (exists(workingCopyFolder+changedItem)) { + loc scratchFile = scratchFolder+changedItem; + M3 itemM3 = readBinaryValueFile(#M3, scratchFile[extension = scratchFile.extension+".m3"]); + if ((unknownFileType(int i) := itemM3)) { + result[changedItem] = i; + } else { + result[changedItem] = itemM3.total; + } + } + } + } + + return result; +} + +@metric{locoverfiles} +@doc{locoverfiles} +@friendlyName{locoverfiles} +real giniLOCOverFiles(ProjectDelta delta, map[str, loc] workingCopyFolders, map[str, loc] scratchFolders) { + map[str, int] locMap = countLoc(delta, workingCopyFolders, scratchFolders); + + distLOCOverMethods = distribution(locMap); + + return gini([<0,0>]+[<x, distLOCOverMethods[x]> | x <- distLOCOverMethods]); +} + +@metric{locoverclass} +@doc{locoverclass} +@friendlyName{locoverclass} +real giniLOCOverClass(ProjectDelta delta, map[str, loc] workingCopyFolders, map[str, loc] scratchFolders) { + map[str class, int lines] result = (); + map[str, list[str]] changedItemsPerRepo = getChangedItemsPerRepository(delta); + + for (str repo <- changedItemsPerRepo) { + list[str] changedItems = changedItemsPerRepo[repo]; + loc workingCopyFolder = workingCopyFolders[repo]; + loc scratchFolder = scratchFolders[repo]; + + for (str changedItem <- changedItems) { + if (exists(workingCopyFolder+changedItem)) { + loc scratchFile = scratchFolder+changedItem; + M3 itemM3 = readBinaryValueFile(#M3, scratchFile[extension = scratchFile.extension+".m3"]); + if (!(unknownFileType(_) := itemM3)) { + result += (lc.path : sc.end.line - sc.begin.line + 1 | <lc, sc> <- itemM3.model@declarations, isInterface(lc) || isClass(lc) || lc.scheme == "java+enum"); + } + } + } + } + + distLOCOverClass = distribution(result); + return gini([<0,0>]+[<x, distLOCOverClass[x]> | x <- distLOCOverClass]); +}