| -- ****************************************************************************** | |
| -- Copyright (c) 2012 INRIA & Ecole des Mines de Nantes. | |
| -- All rights reserved. This program and the accompanying materials | |
| -- are made available under the terms of the Eclipse Public License v2.0 | |
| -- which accompanies this distribution, and is available at | |
| -- http://www.eclipse.org/legal/epl-v20.html | |
| -- | |
| -- Contributors: | |
| -- Hugo Bruneliere - Initial implementation | |
| -- | |
| -- ****************************************************************************** | |
| module GenerateMetricsB; | |
| create OUT : Metrics from IN : Java; | |
| helper context Java!ClassDeclaration def: computePercentage(elementType : OclType) : Real = | |
| self.bodyDeclarations | |
| ->select(d | d.oclIsTypeOf(elementType))->size() | |
| *100 | |
| /self.bodyDeclarations->size(); | |
| rule CreateMetric { | |
| from | |
| cd : Java!ClassDeclaration ( | |
| cd.annotations->exists(a | a.type.type.name='Entity') | |
| ) | |
| to | |
| om : Metrics!Metric ( | |
| name <- 'Percentage of declaration/type in class "' + cd.name + '"', | |
| values <- Sequence{mv1,mv2,mv3} | |
| ), | |
| mv1 : Metrics!DoubleMetricValue ( | |
| tag <- 'Constructor', | |
| value <- cd.computePercentage(Java!ConstructorDeclaration) | |
| ), | |
| mv2 : Metrics!DoubleMetricValue ( | |
| tag <- 'Field', | |
| value <- cd.computePercentage(Java!FieldDeclaration) | |
| ), | |
| mv3 : Metrics!DoubleMetricValue ( | |
| tag <- 'Method', | |
| value <- cd.computePercentage(Java!MethodDeclaration) | |
| ) | |
| } |