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

metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.emf
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOAData.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOADataCollection.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/NumberOfAttributes.java
File was removed.
metric-providers/org.ossmeter.metricprovider.rascal.NOA/META-INF/MANIFEST.MF Diff Switch to side-by-side view

metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.ecore to metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/NOA.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.ecore +++ b/metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/NOA.rsc @@ -1,25 +1,46 @@ -<?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="NOA"> - <eAnnotations source="db"> - <details key="qualifiedCollectionNames" value="true"/> - </eAnnotations> - <eAnnotations source="customize"/> - <eStructuralFeatures xsi:type="ecore:EReference" name="numberOfAttributes" upperBound="-1" eType="//NOAData" containment="true"/> - </eClassifiers> - <eClassifiers xsi:type="ecore:EClass" name="NOAData"> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="className"> - <eAnnotations source="searchable"/> - <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> - </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="attributes"> - <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 NOA + +import lang::java::m3::Core; +import List; +import String; +import Map; +import org::ossmeter::metricprovider::Manager; +import org::ossmeter::metricprovider::ProjectDelta; +import IO; +import ValueIO; + +int numberOfAttributes(loc cl, M3 model) = size([ m | m <- model@containment[cl], isField(m)]); + +map[str class, int nom] getNOA(M3 fileM3) { + return (replaceAll(replaceFirst(cl.path, "/", ""), "/", "."):numberOfAttributes(cl, fileM3.model) | <cl,_> <- fileM3.model@containment, isClass(cl)); +} + +map[str class, int nom] getNOA(unknownFileType(int lines)) { + return ("": -1); +} + +@metric{NOA} +@doc{Compute your NOA} +@friendlyName{Number of attributes} +map[str class, int noa] NOA(ProjectDelta delta, map[str, loc] workingCopyFolders, map[str, loc] scratchFolders) { + map[str class, int noa] 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 += (replaceAll(replaceFirst(cl.path, "/", ""), "/", "."):numberOfAttributes(cl, itemM3.model) | <cl,_> <- itemM3.model@containment, isClass(cl)); + } + } + } + } + + return result; +}