diff --git a/.classpath b/.classpath index c3793ec..f7680ca 100644 --- a/.classpath +++ b/.classpath @@ -9,5 +9,6 @@ + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 2082a4e..073cc7a 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 -encoding//src/o3smeasures/astvisitors/LooseClassCohesionVisitor.java=UTF-8 -encoding//src/o3smeasures/measures/NumberOfClasses.java=UTF-8 +encoding//src/com/o3smeasures/astvisitors/LooseClassCohesionVisitor.java=UTF-8 +encoding//src/com/o3smeasures/measures/NumberOfClasses.java=UTF-8 encoding/=UTF-8 encoding/src=UTF-8 diff --git a/.travis.yml b/.travis.yml index 551fb13..d9db291 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,4 @@ language: java jdk: - oraclejdk8 -sudo: false -addons: - apt: - packages: - - oracle-java8-installer \ No newline at end of file +sudo: false \ No newline at end of file diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 87bf1c9..ef68a61 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: O3SMeasures Bundle-SymbolicName: O3SMeasures;singleton:=true -Bundle-Version: 1.1.0 +Bundle-Version: 1.2.0 Bundle-Vendor: Mariana Azevedo Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, @@ -11,24 +11,24 @@ Require-Bundle: org.eclipse.ui, org.junit;bundle-version="4.11.0", org.w3c.dom.events;bundle-version="3.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-Activator: o3smeasures.plugin.Activator +Bundle-Activator: com.o3smeasures.plugin.Activator Bundle-ActivationPolicy: lazy -Export-Package: o3smeasures.astvisitors, - o3smeasures.builder, - o3smeasures.builder.generic, - o3smeasures.javamodel, - o3smeasures.javamodel.generic, - o3smeasures.main, - o3smeasures.measures, - o3smeasures.plugin, - o3smeasures.plugin.chart, - o3smeasures.plugin.views, - o3smeasures.popup.actions, - o3smeasures.preferences, - o3smeasures.statistic, - o3smeasures.statistic.generic, - o3smeasures.structures, - o3smeasures.util, +Export-Package: com.o3smeasures.astvisitors, + com.o3smeasures.builder, + com.o3smeasures.builder.generic, + com.o3smeasures.javamodel, + com.o3smeasures.javamodel.generic, + com.o3smeasures.main, + com.o3smeasures.measures, + com.o3smeasures.plugin, + com.o3smeasures.plugin.chart, + com.o3smeasures.plugin.views, + com.o3smeasures.popup.actions, + com.o3smeasures.preferences, + com.o3smeasures.statistic, + com.o3smeasures.statistic.generic, + com.o3smeasures.structures, + com.o3smeasures.util, org.jfree.chart.axis Bundle-ClassPath: lib/jcommon-1.0.16.jar, lib/jcommon-1.0.17.jar, @@ -36,4 +36,5 @@ Bundle-ClassPath: lib/jcommon-1.0.16.jar, lib/jfreechart-1.0.14.jar, ., lib/commons-csv-1.0.jar, - lib/jsefa-1.0.0.RELEASE.jar + lib/jsefa-1.0.0.RELEASE.jar, + lib/log4j-1.2.17.jar diff --git a/build.properties b/build.properties index 6ef47da..79af190 100644 --- a/build.properties +++ b/build.properties @@ -7,6 +7,7 @@ bin.includes = plugin.xml,\ lib/jfreechart-1.0.14-swt.jar,\ lib/jfreechart-1.0.14.jar,\ lib/jcommon-1.0.16.jar,\ - lib/jcommon-1.0.17.jar + lib/jcommon-1.0.17.jar,\ + lib/log4j-1.2.17.jar src.includes = lib/ jars.compile.order = . diff --git a/doc/script.js b/doc/script.js index b346356..c23a79e 100644 --- a/doc/script.js +++ b/doc/script.js @@ -1,9 +1,9 @@ function show(type) { - count = 0; + var count = 0; for (var key in methods) { var row = document.getElementById(key); - if ((methods[key] & type) != 0) { + if ((methods[key] && type) != 0) { row.style.display = ''; row.className = (count++ % 2) ? rowColor : altColor; } diff --git a/lib/log4j-1.2.17.jar b/lib/log4j-1.2.17.jar new file mode 100644 index 0000000..068867e Binary files /dev/null and b/lib/log4j-1.2.17.jar differ diff --git a/plugin.xml b/plugin.xml index 0b2c78f..ada32cb 100644 --- a/plugin.xml +++ b/plugin.xml @@ -6,7 +6,7 @@ - + defaultHandler="com.o3smeasures.popup.actions.Measurement"> - - - - @@ -67,35 +67,35 @@ diff --git a/src/o3smeasures/astvisitors/ClassVisitor.java b/src/com/o3smeasures/astvisitors/ClassVisitor.java similarity index 80% rename from src/o3smeasures/astvisitors/ClassVisitor.java rename to src/com/o3smeasures/astvisitors/ClassVisitor.java index e22e785..35e8df8 100644 --- a/src/o3smeasures/astvisitors/ClassVisitor.java +++ b/src/com/o3smeasures/astvisitors/ClassVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.util.Iterator; import java.util.List; @@ -57,20 +57,16 @@ private void calculateNumberOfClasses(CompilationUnit unit) { numOfClassClasses++; for (Object type :unit.types()){ - if (type instanceof TypeDeclaration){ + if ((type instanceof TypeDeclaration) && !((TypeDeclaration) type).isInterface()){ - if (!((TypeDeclaration) type).isInterface()){ - - List bodyDeclarationsList = ((TypeDeclaration) type).bodyDeclarations(); - Iterator itBodyDeclaration = bodyDeclarationsList.iterator(); - - while (itBodyDeclaration.hasNext()){ - Object itItem = itBodyDeclaration.next(); - if (itItem instanceof TypeDeclaration){ - if (!((TypeDeclaration) itItem).isInterface()){ - numOfClassClasses++; - } - } + List bodyDeclarationsList = ((TypeDeclaration) type).bodyDeclarations(); + Iterator itBodyDeclaration = bodyDeclarationsList.iterator(); + + while (itBodyDeclaration.hasNext()){ + Object itItem = itBodyDeclaration.next(); + if ((itItem instanceof TypeDeclaration) + && !((TypeDeclaration) itItem).isInterface()){ + numOfClassClasses++; } } } diff --git a/src/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java b/src/com/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java similarity index 77% rename from src/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java rename to src/com/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java index c377b6e..d33b9b4 100644 --- a/src/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java +++ b/src/com/o3smeasures/astvisitors/CouplingBetweenObjectsVisitor.java @@ -1,6 +1,8 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.dom.ASTVisitor; @@ -24,13 +26,13 @@ public class CouplingBetweenObjectsVisitor extends ASTVisitor{ private IType[] iTypeList; - private static int ITYPE_SIZE = 20; + private static int size = 20; private int numCalls; private static CouplingBetweenObjectsVisitor instance; public CouplingBetweenObjectsVisitor(){ super(); - iTypeList = new IType[ITYPE_SIZE]; + iTypeList = new IType[size]; } public static CouplingBetweenObjectsVisitor getInstance(){ @@ -57,22 +59,14 @@ public boolean visit(CompilationUnit node) { * @since 13/07/2014 * @param unit */ + @SuppressWarnings("unchecked") private void calculateClazzUsed(CompilationUnit unit){ - for (Object type :unit.types()){ - if (type instanceof TypeDeclaration){ - - MethodDeclaration [] methods = ((TypeDeclaration) type).getMethods(); - - for (MethodDeclaration method: methods){ - - Block firstMethodBody = method.getBody(); - - if (firstMethodBody != null){ - - checkMethodStatements(method, firstMethodBody); - } - } - } + + Object typeDeclaration = unit.types().stream().filter(type -> type instanceof TypeDeclaration).collect(Collectors.toList()); + MethodDeclaration [] methods = ((List) typeDeclaration).get(0).getMethods(); + for (MethodDeclaration method: methods){ + Block firstMethodBody = method.getBody(); + Optional.ofNullable(firstMethodBody).ifPresent(m -> checkMethodStatements(method, firstMethodBody)); } } @@ -86,11 +80,7 @@ private void calculateClazzUsed(CompilationUnit unit){ @SuppressWarnings("unchecked") private void checkMethodStatements(MethodDeclaration method, Block firstMethodBody) { List firstMethodStatements = firstMethodBody.statements(); - - if (!firstMethodStatements.isEmpty()){ - - getMethodDeclarations(method, firstMethodStatements); - } + if (!firstMethodStatements.isEmpty()) getMethodDeclarations(method, firstMethodStatements); } /** @@ -104,9 +94,7 @@ private void checkMethodStatements(MethodDeclaration method, Block firstMethodBo private void getMethodDeclarations(MethodDeclaration method, List firstMethodStatements) { for (IType ty : iTypeList){ - if (firstMethodStatements.toString().contains(ty.getElementName())){ - numCalls++; - } + if (firstMethodStatements.toString().contains(ty.getElementName())) numCalls++; for (Object param : method.parameters()){ if (((SingleVariableDeclaration)param).getType().toString().matches(ty.getElementName())){ @@ -132,7 +120,7 @@ public void addListOfTypes(IType[] types){ * @since 13/07/2014 */ public void cleanArrayAndVariable(){ - this.iTypeList = new IType[ITYPE_SIZE]; + this.iTypeList = new IType[size]; this.numCalls = 0; } @@ -143,6 +131,6 @@ public void cleanArrayAndVariable(){ * @return */ public Double getCouplingBetweenObjectsIndex(){ - return Double.valueOf(iTypeList.length + numCalls); + return Double.valueOf(iTypeList.length) + Double.valueOf(numCalls); } } diff --git a/src/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java b/src/com/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java similarity index 95% rename from src/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java rename to src/com/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java index c78f093..21aa5e0 100644 --- a/src/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java +++ b/src/com/o3smeasures/astvisitors/CyclomaticComplexityVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; @@ -29,7 +29,7 @@ public class CyclomaticComplexityVisitor extends ASTVisitor{ private Double cyclomaticComplexityIndex; - private static Double sumCyclomaticComplexity; + private Double sumCyclomaticComplexity; private static CyclomaticComplexityVisitor instance; public CyclomaticComplexityVisitor(){ @@ -180,7 +180,7 @@ public Double getCyclomaticComplexityIndex(){ */ public void cleanVariables(){ this.cyclomaticComplexityIndex = 0d; - CyclomaticComplexityVisitor.sumCyclomaticComplexity = 0d; + this.sumCyclomaticComplexity = 0d; } /** @@ -189,7 +189,7 @@ public void cleanVariables(){ * @since 13/07/2014 * @return */ - public static Double getAllCyclomaticComplexity() { + public Double getAllCyclomaticComplexity() { return sumCyclomaticComplexity; } } diff --git a/src/o3smeasures/astvisitors/FanOutVisitor.java b/src/com/o3smeasures/astvisitors/FanOutVisitor.java similarity index 92% rename from src/o3smeasures/astvisitors/FanOutVisitor.java rename to src/com/o3smeasures/astvisitors/FanOutVisitor.java index b534992..2983824 100644 --- a/src/o3smeasures/astvisitors/FanOutVisitor.java +++ b/src/com/o3smeasures/astvisitors/FanOutVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; @@ -26,7 +26,7 @@ public class FanOutVisitor extends ASTVisitor{ public FanOutVisitor(){ super(); - typesList = new ArrayList(); + typesList = new ArrayList<>(); } public static FanOutVisitor getInstance(){ @@ -68,7 +68,7 @@ private void calculateFanOut(CompilationUnit unit){ * @since 13/07/2014 */ public void cleanArray(){ - this.typesList = new ArrayList(); + this.typesList = new ArrayList<>(); } /** diff --git a/src/o3smeasures/astvisitors/LinesOfCodeVisitor.java b/src/com/o3smeasures/astvisitors/LinesOfCodeVisitor.java similarity index 97% rename from src/o3smeasures/astvisitors/LinesOfCodeVisitor.java rename to src/com/o3smeasures/astvisitors/LinesOfCodeVisitor.java index e9c1ec5..6f19446 100644 --- a/src/o3smeasures/astvisitors/LinesOfCodeVisitor.java +++ b/src/com/o3smeasures/astvisitors/LinesOfCodeVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; diff --git a/src/o3smeasures/astvisitors/LooseClassCohesionVisitor.java b/src/com/o3smeasures/astvisitors/LooseClassCohesionVisitor.java similarity index 84% rename from src/o3smeasures/astvisitors/LooseClassCohesionVisitor.java rename to src/com/o3smeasures/astvisitors/LooseClassCohesionVisitor.java index 00af046..0813b3f 100644 --- a/src/o3smeasures/astvisitors/LooseClassCohesionVisitor.java +++ b/src/com/o3smeasures/astvisitors/LooseClassCohesionVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; @@ -36,8 +36,8 @@ public class LooseClassCohesionVisitor extends ASTVisitor{ public LooseClassCohesionVisitor(){ super(); - listOfMethods = new ArrayList(); - listOfAttributes = new ArrayList(); + listOfMethods = new ArrayList<>(); + listOfAttributes = new ArrayList<>(); numDirectConnections = 0d; numIndirectConnections = 0d; } @@ -98,7 +98,7 @@ private void getClassAttributes(CompilationUnit node){ private void calculateNumberOfMethods(CompilationUnit unit){ - List methodsWithDirectConn = new ArrayList(); + List methodsWithDirectConn = new ArrayList<>(); for (Object type : unit.types()){ if (type instanceof TypeDeclaration){ @@ -132,25 +132,19 @@ private List getNumberOfDirectConnections(List methodsWithD int i=0; while (itMethods.hasNext()){ - MethodDeclaration firstMethod = (MethodDeclaration) itMethods.next(); + MethodDeclaration firstMethod = itMethods.next(); if (firstMethod != null){ Block firstMethodBody = firstMethod.getBody(); @@ -210,10 +204,9 @@ private double calculateNP(){ */ public Double getLCCIndex(){ Double np = calculateNP(); - Double value = 0d; Double lccValue = 0d; if (np != 0d){ - value = (numDirectConnections + numIndirectConnections)/np; + Double value = (numDirectConnections + numIndirectConnections)/np; lccValue = new BigDecimal(value, new MathContext(3, RoundingMode.UP)).doubleValue(); } return lccValue; diff --git a/src/o3smeasures/astvisitors/NumberOfAttributesVisitor.java b/src/com/o3smeasures/astvisitors/NumberOfAttributesVisitor.java similarity index 97% rename from src/o3smeasures/astvisitors/NumberOfAttributesVisitor.java rename to src/com/o3smeasures/astvisitors/NumberOfAttributesVisitor.java index 94bfe4d..d53c933 100644 --- a/src/o3smeasures/astvisitors/NumberOfAttributesVisitor.java +++ b/src/com/o3smeasures/astvisitors/NumberOfAttributesVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; diff --git a/src/o3smeasures/astvisitors/NumberOfMethodsVisitor.java b/src/com/o3smeasures/astvisitors/NumberOfMethodsVisitor.java similarity index 95% rename from src/o3smeasures/astvisitors/NumberOfMethodsVisitor.java rename to src/com/o3smeasures/astvisitors/NumberOfMethodsVisitor.java index 3db3415..2e09a9a 100644 --- a/src/o3smeasures/astvisitors/NumberOfMethodsVisitor.java +++ b/src/com/o3smeasures/astvisitors/NumberOfMethodsVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; @@ -27,7 +27,7 @@ public class NumberOfMethodsVisitor extends ASTVisitor{ public NumberOfMethodsVisitor(){ super(); - methodsList = new ArrayList(); + methodsList = new ArrayList<>(); } public static NumberOfMethodsVisitor getInstance(){ diff --git a/src/o3smeasures/astvisitors/ResponseForClassVisitor.java b/src/com/o3smeasures/astvisitors/ResponseForClassVisitor.java similarity index 88% rename from src/o3smeasures/astvisitors/ResponseForClassVisitor.java rename to src/com/o3smeasures/astvisitors/ResponseForClassVisitor.java index 1acef5c..0ffe1f7 100644 --- a/src/o3smeasures/astvisitors/ResponseForClassVisitor.java +++ b/src/com/o3smeasures/astvisitors/ResponseForClassVisitor.java @@ -1,7 +1,6 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; -import java.math.MathContext; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Iterator; @@ -30,14 +29,14 @@ public class ResponseForClassVisitor extends ASTVisitor{ private List methodsList; private double numberMethodCalls; private IMethod[] listOfMethodsName; - private static int IMETHOD_SIZE = 20; + private static int size = 20; private static ResponseForClassVisitor instance; public ResponseForClassVisitor(){ super(); - methodsList = new ArrayList(); + methodsList = new ArrayList<>(); numberMethodCalls = 0d; - listOfMethodsName = new IMethod[IMETHOD_SIZE]; + listOfMethodsName = new IMethod[size]; } public static ResponseForClassVisitor getInstance(){ @@ -85,7 +84,7 @@ private void calculateMethodCalls(){ while (itMethods.hasNext()){ - MethodDeclaration firstMethod = (MethodDeclaration) itMethods.next(); + MethodDeclaration firstMethod = itMethods.next(); Block firstMethodBody = firstMethod.getBody(); if (firstMethodBody != null){ @@ -123,7 +122,8 @@ public void addListOfMethodsDeclaration(IMethod [] methods){ */ public Double getResponseForClassValue(){ double value = methodsList.size() + numberMethodCalls; - return new BigDecimal(value, new MathContext(2, RoundingMode.UP)).doubleValue(); + BigDecimal rfcValue = BigDecimal.valueOf(value).setScale(2, RoundingMode.UP); + return rfcValue.doubleValue(); } /** @@ -134,6 +134,6 @@ public Double getResponseForClassValue(){ public void cleanVariables(){ this.methodsList.clear(); this.numberMethodCalls = 0; - this.listOfMethodsName = new IMethod[IMETHOD_SIZE]; + this.listOfMethodsName = new IMethod[size]; } } diff --git a/src/o3smeasures/astvisitors/TightClassCohesionVisitor.java b/src/com/o3smeasures/astvisitors/TightClassCohesionVisitor.java similarity index 91% rename from src/o3smeasures/astvisitors/TightClassCohesionVisitor.java rename to src/com/o3smeasures/astvisitors/TightClassCohesionVisitor.java index 8f77efc..a620a68 100644 --- a/src/o3smeasures/astvisitors/TightClassCohesionVisitor.java +++ b/src/com/o3smeasures/astvisitors/TightClassCohesionVisitor.java @@ -1,7 +1,6 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; -import java.math.MathContext; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Iterator; @@ -34,8 +33,8 @@ public class TightClassCohesionVisitor extends ASTVisitor{ public TightClassCohesionVisitor(){ super(); - listOfMethods = new ArrayList(); - listOfAttributes = new ArrayList(); + listOfMethods = new ArrayList<>(); + listOfAttributes = new ArrayList<>(); numDirectConnections = 0d; } @@ -109,11 +108,11 @@ private void calculateNumberOfMethods(CompilationUnit unit){ while (itMethods.hasNext()){ - MethodDeclaration firstMethod = (MethodDeclaration) itMethods.next(); + MethodDeclaration firstMethod = itMethods.next(); MethodDeclaration secondMethod = null; if (itMethods.hasNext()) - secondMethod = (MethodDeclaration) itMethods.next(); + secondMethod = itMethods.next(); checkMethodsBody(firstMethod, secondMethod); } @@ -168,8 +167,11 @@ private double calculateNP(){ public Double getTCCValue(){ Double np = calculateNP(); Double value = 0d; - if (np != 0.0) - value = new BigDecimal((numDirectConnections/np), new MathContext(3, RoundingMode.UP)).doubleValue(); + if (np != 0d){ + BigDecimal tccValue = BigDecimal.valueOf(numDirectConnections/np) + .setScale(3, RoundingMode.UP); + value = tccValue.doubleValue(); + } return value; } diff --git a/src/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java b/src/com/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java similarity index 88% rename from src/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java rename to src/com/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java index f2e2c9e..f2801d5 100644 --- a/src/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java +++ b/src/com/o3smeasures/astvisitors/WeightMethodsPerClassVisitor.java @@ -1,4 +1,4 @@ -package o3smeasures.astvisitors; +package com.o3smeasures.astvisitors; import java.math.BigDecimal; import java.math.MathContext; @@ -71,20 +71,19 @@ private void calculateWeightMethods(CompilationUnit node){ for (Object type : node.types()){ - if (type instanceof TypeDeclaration){ - if (!((TypeDeclaration) type).isInterface()){ + if ((type instanceof TypeDeclaration) && !((TypeDeclaration) type).isInterface()){ - List bodyDeclarationsList = ((TypeDeclaration) type).bodyDeclarations(); - Iterator itBodyDeclaration = bodyDeclarationsList.iterator(); - - while (itBodyDeclaration.hasNext()){ - Object itItem = itBodyDeclaration.next(); - if (itItem instanceof MethodDeclaration){ - checkStatementsInMethodsDeclaration(itItem); - } + List bodyDeclarationsList = ((TypeDeclaration) type). + bodyDeclarations(); + Iterator itBodyDeclaration = bodyDeclarationsList.iterator(); + + while (itBodyDeclaration.hasNext()){ + Object itItem = itBodyDeclaration.next(); + if (itItem instanceof MethodDeclaration){ + checkStatementsInMethodsDeclaration(itItem); } - this.wmcIndex += this.visitor.getCyclomaticComplexityIndex(); } + this.wmcIndex += this.visitor.getCyclomaticComplexityIndex(); } } } diff --git a/src/o3smeasures/builder/ClassBuilder.java b/src/com/o3smeasures/builder/ClassBuilder.java similarity index 81% rename from src/o3smeasures/builder/ClassBuilder.java rename to src/com/o3smeasures/builder/ClassBuilder.java index 0559815..4ace4e1 100644 --- a/src/o3smeasures/builder/ClassBuilder.java +++ b/src/com/o3smeasures/builder/ClassBuilder.java @@ -1,13 +1,14 @@ -package o3smeasures.builder; +package com.o3smeasures.builder; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.JavaModelException; -import o3smeasures.builder.generic.IBuilder; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; -import o3smeasures.structures.Measure.Granularity; +import com.o3smeasures.builder.generic.IBuilder; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; +import com.o3smeasures.structures.Measure.Granularity; /** * Implementation of IBuilder interface for class quality evaluation. @@ -20,8 +21,8 @@ */ public class ClassBuilder implements IBuilder{ + static Logger logger = Logger.getLogger(ClassBuilder.class); private IPackageFragment myPackage; - private MethodBuilder builder; public ClassBuilder(IPackageFragment myPackage){ this.myPackage = myPackage; @@ -37,7 +38,7 @@ public ClassBuilder(IPackageFragment myPackage){ * @param item */ public void addMethodsBuilder(Measure measure, ICompilationUnit myClass, ItemMeasured item){ - builder = new MethodBuilder(myClass); + MethodBuilder builder = new MethodBuilder(myClass); builder.build(measure, item); } @@ -73,8 +74,8 @@ public void build(Measure measure, ItemMeasured item) { item.addChild(classItem); } - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } } diff --git a/src/o3smeasures/builder/MeasureBuilder.java b/src/com/o3smeasures/builder/MeasureBuilder.java similarity index 83% rename from src/o3smeasures/builder/MeasureBuilder.java rename to src/com/o3smeasures/builder/MeasureBuilder.java index 481398d..cdeeb14 100644 --- a/src/o3smeasures/builder/MeasureBuilder.java +++ b/src/com/o3smeasures/builder/MeasureBuilder.java @@ -1,19 +1,19 @@ -package o3smeasures.builder; +package com.o3smeasures.builder; import java.util.ArrayList; import java.util.List; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.main.ASTSession; -import o3smeasures.measures.NumberOfClasses; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; - import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.main.ASTSession; +import com.o3smeasures.measures.NumberOfClasses; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; + /** * Implementation of IBuilder interface for class quality evaluation. * Also presents the measurement results, considering measures. @@ -24,12 +24,11 @@ */ public class MeasureBuilder { - private PackageBuilder builder; private ItemMeasured root; private List measures; public MeasureBuilder(){ - measures = new ArrayList(); + measures = new ArrayList<>(); } public void addMeasure(Measure measure){ @@ -63,7 +62,7 @@ public ItemMeasured execute(IProject project) throws CoreException { */ private ItemMeasured measure(IJavaProject javaProject) { root = new ItemMeasured(javaProject.getElementName(), null); - builder = new PackageBuilder(javaProject); + PackageBuilder builder = new PackageBuilder(javaProject); for (Measure m : measures) { ItemMeasured measureItem = new ItemMeasured(m.getName(), root); @@ -78,5 +77,4 @@ private ItemMeasured measure(IJavaProject javaProject) { } return root; } - } diff --git a/src/o3smeasures/builder/MethodBuilder.java b/src/com/o3smeasures/builder/MethodBuilder.java similarity index 78% rename from src/o3smeasures/builder/MethodBuilder.java rename to src/com/o3smeasures/builder/MethodBuilder.java index 616fc7e..5f86898 100644 --- a/src/o3smeasures/builder/MethodBuilder.java +++ b/src/com/o3smeasures/builder/MethodBuilder.java @@ -1,13 +1,14 @@ -package o3smeasures.builder; +package com.o3smeasures.builder; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; -import o3smeasures.builder.generic.IBuilder; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; +import com.o3smeasures.builder.generic.IBuilder; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; /** * Implementation of IBuilder interface for class quality evaluation. @@ -20,6 +21,7 @@ */ public class MethodBuilder implements IBuilder{ + static Logger logger = Logger.getLogger(MethodBuilder.class); private ICompilationUnit myClass; public MethodBuilder(ICompilationUnit myClass){ @@ -48,8 +50,8 @@ public void build(Measure measure, ItemMeasured item) { item.addChild(methodItem); } } - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } } diff --git a/src/o3smeasures/builder/PackageBuilder.java b/src/com/o3smeasures/builder/PackageBuilder.java similarity index 81% rename from src/o3smeasures/builder/PackageBuilder.java rename to src/com/o3smeasures/builder/PackageBuilder.java index cc50091..a43cb79 100644 --- a/src/o3smeasures/builder/PackageBuilder.java +++ b/src/com/o3smeasures/builder/PackageBuilder.java @@ -1,14 +1,15 @@ -package o3smeasures.builder; - -import o3smeasures.builder.generic.IBuilder; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; +package com.o3smeasures.builder; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaModelException; +import com.o3smeasures.builder.generic.IBuilder; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; + /** * Implementation of IBuilder interface for class quality evaluation. * Also presents the measurement results, considering packages. @@ -20,8 +21,8 @@ */ public class PackageBuilder implements IBuilder{ + static Logger logger = Logger.getLogger(PackageBuilder.class); private IJavaProject project; - private ClassBuilder builder; public PackageBuilder(IJavaProject project){ this.project= project; @@ -37,7 +38,7 @@ public PackageBuilder(IJavaProject project){ * @param item */ public void addClassBuilder(Measure measure, IPackageFragment packages, ItemMeasured item){ - builder = new ClassBuilder(packages); + ClassBuilder builder = new ClassBuilder(packages); builder.build(measure, item); } @@ -64,8 +65,8 @@ public void build(Measure measure, ItemMeasured item) { item.addMean(packageMeasured.getMean()); } } - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } } diff --git a/src/o3smeasures/builder/generic/IBuilder.java b/src/com/o3smeasures/builder/generic/IBuilder.java similarity index 78% rename from src/o3smeasures/builder/generic/IBuilder.java rename to src/com/o3smeasures/builder/generic/IBuilder.java index 59d707c..ba4ec2d 100644 --- a/src/o3smeasures/builder/generic/IBuilder.java +++ b/src/com/o3smeasures/builder/generic/IBuilder.java @@ -1,7 +1,7 @@ -package o3smeasures.builder.generic; +package com.o3smeasures.builder.generic; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; /** * Interface to build ItemMeasures and storage measurement results. diff --git a/src/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java b/src/com/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java similarity index 72% rename from src/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java rename to src/com/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java index 4cebfd2..f845ff5 100644 --- a/src/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java +++ b/src/com/o3smeasures/javamodel/DepthOfInheritanceTreeJavaModel.java @@ -1,9 +1,10 @@ -package o3smeasures.javamodel; +package com.o3smeasures.javamodel; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; @@ -11,7 +12,7 @@ import org.eclipse.jdt.core.ITypeHierarchy; import org.eclipse.jdt.core.JavaModelException; -import o3smeasures.javamodel.generic.IJavaModel; +import com.o3smeasures.javamodel.generic.IJavaModel; /** * A JavaModel class to access the JavaModel of a class to calculate the DIT measures. @@ -23,14 +24,16 @@ */ public class DepthOfInheritanceTreeJavaModel implements IJavaModel{ + static Logger logger = Logger.getLogger(DepthOfInheritanceTreeJavaModel.class); + private IType[] superclassesList; - private static int ITYPE_SIZE = 20; + private static int size = 20; private Double ditValue; private static DepthOfInheritanceTreeJavaModel instance; public DepthOfInheritanceTreeJavaModel() { - this.superclassesList = new IType[ITYPE_SIZE]; + this.superclassesList = new IType[size]; } public static DepthOfInheritanceTreeJavaModel getInstance(){ @@ -52,25 +55,20 @@ public void calculateValue(ICompilationUnit unit) { IType[] types = unit.getAllTypes(); for (IType type : types) { IJavaProject ancestor = (IJavaProject) type.getAncestor(IJavaElement.JAVA_PROJECT); - try{ - ITypeHierarchy th= type.newTypeHierarchy(ancestor, null); - if (th != null){ - superclassesList = th.getAllSuperclasses(type); - } - }catch (NullPointerException e){ - e.printStackTrace(); - } + ITypeHierarchy th= type.newTypeHierarchy(ancestor, null); + + if (th != null) superclassesList = th.getAllSuperclasses(type); - if (superclassesList != null){ - length = superclassesList.length; - } + if (superclassesList != null) length = superclassesList.length; Double value = new BigDecimal(length, new MathContext(2, RoundingMode.UP)).doubleValue(); setDitValue(value); } - } catch (JavaModelException e) { - e.printStackTrace(); + }catch (JavaModelException javaException) { + logger.error(javaException); + }catch (NullPointerException nullPointerException){ + logger.error(nullPointerException); } } @@ -80,7 +78,7 @@ public void calculateValue(ICompilationUnit unit) { * @since 13/07/2014 */ public void cleanArray(){ - this.superclassesList = new IType[ITYPE_SIZE]; + this.superclassesList = new IType[size]; } /** diff --git a/src/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java b/src/com/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java similarity index 78% rename from src/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java rename to src/com/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java index 32e34f5..eba7347 100644 --- a/src/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java +++ b/src/com/o3smeasures/javamodel/LackCohesionMethodsJavaModel.java @@ -1,4 +1,4 @@ -package o3smeasures.javamodel; +package com.o3smeasures.javamodel; import java.math.BigDecimal; import java.math.MathContext; @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Set; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IMethod; @@ -19,7 +20,7 @@ import org.eclipse.jdt.core.compiler.ITerminalSymbols; import org.eclipse.jdt.core.compiler.InvalidInputException; -import o3smeasures.javamodel.generic.IJavaModel; +import com.o3smeasures.javamodel.generic.IJavaModel; /** * A JavaModel class to access the JavaModel of a class @@ -32,6 +33,8 @@ */ public class LackCohesionMethodsJavaModel implements IJavaModel{ + static Logger logger = Logger.getLogger(LackCohesionMethodsJavaModel.class); + private Map> sharedAttributesPerMethods; private Map> nonSharedAttributesPerMethods; private Map> connectedComponents; @@ -41,7 +44,7 @@ public class LackCohesionMethodsJavaModel implements IJavaModel>(); - nonSharedAttributesPerMethods = new HashMap>(); - connectedComponents = new HashMap>(); + sharedAttributesPerMethods = new HashMap<>(); + nonSharedAttributesPerMethods = new HashMap<>(); + connectedComponents = new HashMap<>(); this.lcomValue = 0d; this.lcom2Value = 0d; @@ -81,28 +84,26 @@ public void calculateValue(ICompilationUnit unit) { iFields = iType.getFields(); } - if (iFields != null && iMethods != null){ - if ((iFields.length > 1)&&(iMethods.length > 1)) { - for (IField field: iFields){ - sharedAttributesPerMethods.put(field.getElementName(), new HashSet()); - nonSharedAttributesPerMethods.put(field.getElementName(), new HashSet()); - } - for (IMethod method: iMethods){ - connectedComponents.put(method.getElementName(), new HashSet()); - } - checkMethodsWithSharedAttributes(iMethods); - - if (LCOMType.LCOM.toString() == getLcomType()){ - setLcomValue(calculateLCOMValue()); - }else if (LCOMType.LCOM2.toString() == getLcomType()){ - setLcom2Value(calculateLCOM2Value()); - }else{ - setLcom4Value(calculateLCOM4Value()); - } + if ((iFields != null && iMethods != null) && (iFields.length > 1 && iMethods.length > 1)) { + for (IField field: iFields){ + sharedAttributesPerMethods.put(field.getElementName(), new HashSet()); + nonSharedAttributesPerMethods.put(field.getElementName(), new HashSet()); + } + for (IMethod method: iMethods){ + connectedComponents.put(method.getElementName(), new HashSet()); + } + checkMethodsWithSharedAttributes(iMethods); + + if (LCOMType.LCOM.toString() == getLcomType()){ + setLcomValue(calculateLCOMValue()); + }else if (LCOMType.LCOM2.toString() == getLcomType()){ + setLcom2Value(calculateLCOM2Value()); + }else{ + setLcom4Value(calculateLCOM4Value()); } } - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } } @@ -119,22 +120,29 @@ private void addMethods(String field, String method){ if (LCOMType.LCOM.toString() == getLcomType() || LCOMType.LCOM2.toString() == getLcomType()){ if(sharedAttributesPerMethods.containsKey(field)){ sharedMethods = sharedAttributesPerMethods.get(field); - if (sharedMethods != null) - sharedMethods.add(method); + addMethod(method, sharedMethods); }else{ Set nonSharedMethods = nonSharedAttributesPerMethods.get(field); - if (nonSharedMethods != null) - nonSharedMethods.add(method); + addMethod(method, nonSharedMethods); } }else{ if(connectedComponents.containsKey(field)){ sharedMethods = connectedComponents.get(field); - if (sharedMethods != null) - sharedMethods.add(method); + addMethod(method, sharedMethods); } } } + + /** + * Method that add a method in the set + * @param method + * @param methodSet + */ + public void addMethod(String method, Set methodSet) { + if (methodSet != null) + methodSet.add(method); + } /** * Method to check with methods share common attributes, according to @@ -159,10 +167,10 @@ private void checkMethodsWithSharedAttributes(IMethod[] methods){ addMethods(new String(scanner.getCurrentTokenSource()), methodName); } } - } catch (JavaModelException e) { - e.printStackTrace(); - } catch (InvalidInputException e) { - e.printStackTrace(); + } catch (JavaModelException exception1) { + logger.error(exception1); + } catch (InvalidInputException exception2) { + logger.error(exception2); } } @@ -176,16 +184,16 @@ private void checkMethodsWithSharedAttributes(IMethod[] methods){ */ private Double calculateLCOMValue(){ - Set allSharedMethods = new HashSet(); - Set allNonSharedMethods = new HashSet(); + Set allSharedMethods = new HashSet<>(); + Set allNonSharedMethods = new HashSet<>(); for (Iterator> it = sharedAttributesPerMethods.values().iterator(); it.hasNext();) { - Set methods = (Set)it.next(); + Set methods = it.next(); allSharedMethods.addAll(methods); } for (Iterator> it = nonSharedAttributesPerMethods.values().iterator(); it.hasNext();) { - Set methods = (Set)it.next(); + Set methods = it.next(); allNonSharedMethods.addAll(methods); } @@ -204,10 +212,10 @@ private Double calculateLCOMValue(){ */ private Double calculateLCOM2Value(){ - Set allSharedMethods = new HashSet(); + Set allSharedMethods = new HashSet<>(); for (Iterator> it = sharedAttributesPerMethods.values().iterator(); it.hasNext();) { - Set methods = (Set)it.next(); + Set methods = it.next(); allSharedMethods.addAll(methods); } diff --git a/src/o3smeasures/javamodel/NumberOfChildrenJavaModel.java b/src/com/o3smeasures/javamodel/NumberOfChildrenJavaModel.java similarity index 69% rename from src/o3smeasures/javamodel/NumberOfChildrenJavaModel.java rename to src/com/o3smeasures/javamodel/NumberOfChildrenJavaModel.java index c406719..1440453 100644 --- a/src/o3smeasures/javamodel/NumberOfChildrenJavaModel.java +++ b/src/com/o3smeasures/javamodel/NumberOfChildrenJavaModel.java @@ -1,9 +1,10 @@ -package o3smeasures.javamodel; +package com.o3smeasures.javamodel; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; @@ -11,7 +12,7 @@ import org.eclipse.jdt.core.ITypeHierarchy; import org.eclipse.jdt.core.JavaModelException; -import o3smeasures.javamodel.generic.IJavaModel; +import com.o3smeasures.javamodel.generic.IJavaModel; /** * A JavaModel class to access the JavaModel of a class to calculate the NOC measures. @@ -23,14 +24,16 @@ */ public class NumberOfChildrenJavaModel implements IJavaModel{ + static Logger logger = Logger.getLogger(NumberOfChildrenJavaModel.class); + private IType[] subtypesList; - private static int ITYPE_SIZE = 20; + private static int size = 20; private Double nocValue; private static NumberOfChildrenJavaModel instance; public NumberOfChildrenJavaModel (){ - this.subtypesList = new IType[ITYPE_SIZE]; + this.subtypesList = new IType[size]; } public static NumberOfChildrenJavaModel getInstance(){ @@ -46,29 +49,25 @@ public static NumberOfChildrenJavaModel getInstance(){ @Override public void calculateValue(ICompilationUnit unit) { - int length = 0; - try { - IType[] types = ((ICompilationUnit) unit).getAllTypes(); + int length = 0; + + IType[] types = unit.getAllTypes(); for (IType type : types) { - try{ - ITypeHierarchy th= type.newTypeHierarchy((IJavaProject) type.getAncestor(IJavaElement.JAVA_PROJECT), null); - if (th != null) - subtypesList = th.getAllSubtypes(type); - }catch (NullPointerException e){ - e.printStackTrace(); - } + ITypeHierarchy th= type.newTypeHierarchy((IJavaProject) type.getAncestor(IJavaElement.JAVA_PROJECT), null); + + if (th != null) subtypesList = th.getAllSubtypes(type); - if (subtypesList != null){ - length = subtypesList.length; - } + if (subtypesList != null) length = subtypesList.length; Double value = new BigDecimal(length, new MathContext(2, RoundingMode.UP)).doubleValue(); setNocValue(value); } - } catch (JavaModelException e) { - e.printStackTrace(); + }catch (JavaModelException exception1) { + logger.error(exception1); + }catch (NullPointerException exception2){ + logger.error(exception2); } } @@ -78,7 +77,7 @@ public void calculateValue(ICompilationUnit unit) { * @since 13/07/2014 */ public void cleanArray(){ - this.subtypesList = new IType[ITYPE_SIZE]; + this.subtypesList = new IType[size]; } /** diff --git a/src/o3smeasures/javamodel/generic/IJavaModel.java b/src/com/o3smeasures/javamodel/generic/IJavaModel.java similarity index 89% rename from src/o3smeasures/javamodel/generic/IJavaModel.java rename to src/com/o3smeasures/javamodel/generic/IJavaModel.java index 152cc28..52b9db5 100644 --- a/src/o3smeasures/javamodel/generic/IJavaModel.java +++ b/src/com/o3smeasures/javamodel/generic/IJavaModel.java @@ -1,4 +1,4 @@ -package o3smeasures.javamodel.generic; +package com.o3smeasures.javamodel.generic; /** * Interface to calculate measures based on the java model. diff --git a/src/o3smeasures/main/ASTSession.java b/src/com/o3smeasures/main/ASTSession.java similarity index 94% rename from src/o3smeasures/main/ASTSession.java rename to src/com/o3smeasures/main/ASTSession.java index 94f1495..503f3dd 100644 --- a/src/o3smeasures/main/ASTSession.java +++ b/src/com/o3smeasures/main/ASTSession.java @@ -1,4 +1,4 @@ -package o3smeasures.main; +package com.o3smeasures.main; import java.util.HashMap; import java.util.Map; @@ -20,7 +20,7 @@ public class ASTSession { private Map units; private ASTSession() { - units = new HashMap(); + units = new HashMap<>(); } public static ASTSession getInstance(){ diff --git a/src/com/o3smeasures/main/Application.java b/src/com/o3smeasures/main/Application.java new file mode 100644 index 0000000..bf68002 --- /dev/null +++ b/src/com/o3smeasures/main/Application.java @@ -0,0 +1,79 @@ +package com.o3smeasures.main; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; + +import com.o3smeasures.builder.MeasureBuilder; +import com.o3smeasures.measures.CouplingBetweenObjects; +import com.o3smeasures.measures.CyclomaticComplexity; +import com.o3smeasures.measures.DepthOfInheritanceTree; +import com.o3smeasures.measures.FanOut; +import com.o3smeasures.measures.LackCohesionMethods; +import com.o3smeasures.measures.LackCohesionMethodsFour; +import com.o3smeasures.measures.LackCohesionMethodsTwo; +import com.o3smeasures.measures.LinesOfCode; +import com.o3smeasures.measures.LooseClassCohesion; +import com.o3smeasures.measures.NumberOfAttributes; +import com.o3smeasures.measures.NumberOfChildren; +import com.o3smeasures.measures.NumberOfClasses; +import com.o3smeasures.measures.NumberOfMethods; +import com.o3smeasures.measures.ResponseForClass; +import com.o3smeasures.measures.TightClassCohesion; +import com.o3smeasures.measures.WeightMethodsPerClass; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.structures.Measure; + +/** + * Main class of the plug-in, which defines all the measures + * and the measure builder in order to perform measurements. + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class Application { + + private List measures; + + /** + * Method that executes the project's measurement + * @author Mariana Azevedo + * @since 13/07/2014 + * @param project + * @return ItemMeasured + * @throws CoreException + */ + public ItemMeasured execute (IProject project) throws CoreException{ + MeasureBuilder builder = new MeasureBuilder(); + createMeasureArray(); + measures.forEach(measure -> builder.addMeasure(measure)); + return builder.execute(project); + } + + public List getMeasures(){ + return measures; + } + + private void createMeasureArray(){ + measures = new ArrayList<>(); + measures.add(new NumberOfClasses()); + measures.add(new LinesOfCode()); + measures.add(new NumberOfMethods()); + measures.add(new NumberOfAttributes()); + measures.add(new CyclomaticComplexity()); + measures.add(new WeightMethodsPerClass()); + measures.add(new DepthOfInheritanceTree()); + measures.add(new NumberOfChildren()); + measures.add(new CouplingBetweenObjects()); + measures.add(new FanOut()); + measures.add(new ResponseForClass()); + measures.add(new LackCohesionMethods()); + measures.add(new LackCohesionMethodsTwo()); + measures.add(new LackCohesionMethodsFour()); + measures.add(new TightClassCohesion()); + measures.add(new LooseClassCohesion()); + } +} diff --git a/src/o3smeasures/measures/CouplingBetweenObjects.java b/src/com/o3smeasures/measures/CouplingBetweenObjects.java similarity index 91% rename from src/o3smeasures/measures/CouplingBetweenObjects.java rename to src/com/o3smeasures/measures/CouplingBetweenObjects.java index a1d2276..c986a4d 100644 --- a/src/o3smeasures/measures/CouplingBetweenObjects.java +++ b/src/com/o3smeasures/measures/CouplingBetweenObjects.java @@ -1,13 +1,14 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.CouplingBetweenObjectsVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.CouplingBetweenObjectsVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement CBO - Coupling Between Objects measure @@ -20,6 +21,8 @@ * */ public class CouplingBetweenObjects extends Measure{ + + static Logger logger = Logger.getLogger(CouplingBetweenObjects.class); private double value; private double mean; @@ -145,8 +148,8 @@ public void measure(T unit) { try { iTypes = ((ICompilationUnit)unit).getTypes(); - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } CompilationUnit parse = parse(unit); diff --git a/src/o3smeasures/measures/CyclomaticComplexity.java b/src/com/o3smeasures/measures/CyclomaticComplexity.java similarity index 94% rename from src/o3smeasures/measures/CyclomaticComplexity.java rename to src/com/o3smeasures/measures/CyclomaticComplexity.java index f4d0604..9a79cd4 100644 --- a/src/o3smeasures/measures/CyclomaticComplexity.java +++ b/src/com/o3smeasures/measures/CyclomaticComplexity.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.CyclomaticComplexityVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.CyclomaticComplexityVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the CC - Cyclomatic complexity measure, diff --git a/src/o3smeasures/measures/DepthOfInheritanceTree.java b/src/com/o3smeasures/measures/DepthOfInheritanceTree.java similarity index 94% rename from src/o3smeasures/measures/DepthOfInheritanceTree.java rename to src/com/o3smeasures/measures/DepthOfInheritanceTree.java index f6029d7..79e14d2 100644 --- a/src/o3smeasures/measures/DepthOfInheritanceTree.java +++ b/src/com/o3smeasures/measures/DepthOfInheritanceTree.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.ICompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.javamodel.DepthOfInheritanceTreeJavaModel; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.javamodel.DepthOfInheritanceTreeJavaModel; +import com.o3smeasures.structures.Measure; /** * Class that implement DIT - Depth of Inheritance Tree measure. diff --git a/src/o3smeasures/measures/FanOut.java b/src/com/o3smeasures/measures/FanOut.java similarity index 94% rename from src/o3smeasures/measures/FanOut.java rename to src/com/o3smeasures/measures/FanOut.java index 525c37a..79358a9 100644 --- a/src/o3smeasures/measures/FanOut.java +++ b/src/com/o3smeasures/measures/FanOut.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.FanOutVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.FanOutVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement Fan-out measure, which is defined as the number diff --git a/src/o3smeasures/measures/LackCohesionMethods.java b/src/com/o3smeasures/measures/LackCohesionMethods.java similarity index 94% rename from src/o3smeasures/measures/LackCohesionMethods.java rename to src/com/o3smeasures/measures/LackCohesionMethods.java index 6ece7c8..c99d7d1 100644 --- a/src/o3smeasures/measures/LackCohesionMethods.java +++ b/src/com/o3smeasures/measures/LackCohesionMethods.java @@ -1,9 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.ICompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.javamodel.LackCohesionMethodsJavaModel; -import o3smeasures.structures.Measure; + +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.javamodel.LackCohesionMethodsJavaModel; +import com.o3smeasures.structures.Measure; /** * Class that implements the measure LCOM, defined by Chidamber and Kemerer. @@ -125,7 +126,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** @@ -144,7 +144,6 @@ public void measure(T unit) { setMaxValue(getCalculatedValue(), ((ICompilationUnit) unit).getElementName()); } - /** * @see Measure#setMeanValue */ diff --git a/src/o3smeasures/measures/LackCohesionMethodsFour.java b/src/com/o3smeasures/measures/LackCohesionMethodsFour.java similarity index 94% rename from src/o3smeasures/measures/LackCohesionMethodsFour.java rename to src/com/o3smeasures/measures/LackCohesionMethodsFour.java index 13994cb..db04c54 100644 --- a/src/o3smeasures/measures/LackCohesionMethodsFour.java +++ b/src/com/o3smeasures/measures/LackCohesionMethodsFour.java @@ -1,9 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.ICompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.javamodel.LackCohesionMethodsJavaModel; -import o3smeasures.structures.Measure; + +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.javamodel.LackCohesionMethodsJavaModel; +import com.o3smeasures.structures.Measure; /** * LCOM4 measures the number of "connected components" in a class. @@ -132,7 +133,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** @@ -150,8 +150,6 @@ public void measure(T unit) { setMeanValue(getCalculatedValue()); setMaxValue(getCalculatedValue(), ((ICompilationUnit) unit).getElementName()); } - - /** * @see Measure#setMeanValue diff --git a/src/o3smeasures/measures/LackCohesionMethodsTwo.java b/src/com/o3smeasures/measures/LackCohesionMethodsTwo.java similarity index 94% rename from src/o3smeasures/measures/LackCohesionMethodsTwo.java rename to src/com/o3smeasures/measures/LackCohesionMethodsTwo.java index f31e69a..9c10c3d 100644 --- a/src/o3smeasures/measures/LackCohesionMethodsTwo.java +++ b/src/com/o3smeasures/measures/LackCohesionMethodsTwo.java @@ -1,9 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.ICompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.javamodel.LackCohesionMethodsJavaModel; -import o3smeasures.structures.Measure; + +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.javamodel.LackCohesionMethodsJavaModel; +import com.o3smeasures.structures.Measure; /** * LCOM2 equals the percentage of methods that do not access a specific attribute averaged @@ -130,7 +131,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/LinesOfCode.java b/src/com/o3smeasures/measures/LinesOfCode.java similarity index 94% rename from src/o3smeasures/measures/LinesOfCode.java rename to src/com/o3smeasures/measures/LinesOfCode.java index 37cf994..46a6428 100644 --- a/src/o3smeasures/measures/LinesOfCode.java +++ b/src/com/o3smeasures/measures/LinesOfCode.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.LinesOfCodeVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.LinesOfCodeVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement LOC - Lines of Code measure. @@ -126,7 +126,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/LooseClassCohesion.java b/src/com/o3smeasures/measures/LooseClassCohesion.java similarity index 94% rename from src/o3smeasures/measures/LooseClassCohesion.java rename to src/com/o3smeasures/measures/LooseClassCohesion.java index 6b00428..26be3c2 100644 --- a/src/o3smeasures/measures/LooseClassCohesion.java +++ b/src/com/o3smeasures/measures/LooseClassCohesion.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.LooseClassCohesionVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.LooseClassCohesionVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement LCC - Loose Class Cohesion measure. LCC tells the overall connectedness. diff --git a/src/o3smeasures/measures/NumberOfAttributes.java b/src/com/o3smeasures/measures/NumberOfAttributes.java similarity index 94% rename from src/o3smeasures/measures/NumberOfAttributes.java rename to src/com/o3smeasures/measures/NumberOfAttributes.java index a774fbd..13e832d 100644 --- a/src/o3smeasures/measures/NumberOfAttributes.java +++ b/src/com/o3smeasures/measures/NumberOfAttributes.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.NumberOfAttributesVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.NumberOfAttributesVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the total number of attributes or fields in a class. @@ -126,7 +126,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/NumberOfChildren.java b/src/com/o3smeasures/measures/NumberOfChildren.java similarity index 94% rename from src/o3smeasures/measures/NumberOfChildren.java rename to src/com/o3smeasures/measures/NumberOfChildren.java index 6e6c64c..3ea4916 100644 --- a/src/o3smeasures/measures/NumberOfChildren.java +++ b/src/com/o3smeasures/measures/NumberOfChildren.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.ICompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.javamodel.NumberOfChildrenJavaModel; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.javamodel.NumberOfChildrenJavaModel; +import com.o3smeasures.structures.Measure; /** * Class that implement the NOC - Number of children measure. @@ -127,7 +127,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/NumberOfClasses.java b/src/com/o3smeasures/measures/NumberOfClasses.java similarity index 96% rename from src/o3smeasures/measures/NumberOfClasses.java rename to src/com/o3smeasures/measures/NumberOfClasses.java index e17732f..600c23f 100644 --- a/src/o3smeasures/measures/NumberOfClasses.java +++ b/src/com/o3smeasures/measures/NumberOfClasses.java @@ -1,9 +1,9 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the NC - Number Of Classes measure, which indicates @@ -134,7 +134,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/NumberOfMethods.java b/src/com/o3smeasures/measures/NumberOfMethods.java similarity index 94% rename from src/o3smeasures/measures/NumberOfMethods.java rename to src/com/o3smeasures/measures/NumberOfMethods.java index 445b9c3..400826f 100644 --- a/src/o3smeasures/measures/NumberOfMethods.java +++ b/src/com/o3smeasures/measures/NumberOfMethods.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.NumberOfMethodsVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.NumberOfMethodsVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the total number of methods (including public, @@ -127,7 +127,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/ResponseForClass.java b/src/com/o3smeasures/measures/ResponseForClass.java similarity index 91% rename from src/o3smeasures/measures/ResponseForClass.java rename to src/com/o3smeasures/measures/ResponseForClass.java index 5c496ca..7424a5c 100644 --- a/src/o3smeasures/measures/ResponseForClass.java +++ b/src/com/o3smeasures/measures/ResponseForClass.java @@ -1,14 +1,15 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; +import org.apache.log4j.Logger; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.ResponseForClassVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.ResponseForClassVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the RFC - Response for class measure, that shows @@ -21,6 +22,8 @@ */ public class ResponseForClass extends Measure{ + static Logger logger = Logger.getLogger(ResponseForClass.class); + private double value; private double mean; private double max; @@ -135,7 +138,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** @@ -152,8 +154,8 @@ public void measure(T unit) { iMethods = iType.getMethods(); } - } catch (JavaModelException e) { - e.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } CompilationUnit parse = parse(unit); diff --git a/src/o3smeasures/measures/TightClassCohesion.java b/src/com/o3smeasures/measures/TightClassCohesion.java similarity index 94% rename from src/o3smeasures/measures/TightClassCohesion.java rename to src/com/o3smeasures/measures/TightClassCohesion.java index 8be137d..c755d17 100644 --- a/src/o3smeasures/measures/TightClassCohesion.java +++ b/src/com/o3smeasures/measures/TightClassCohesion.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.TightClassCohesionVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.TightClassCohesionVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement TCC - Tight Class Cohesion measure. TCC tells the "connection density" @@ -128,7 +128,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/WeightMethodsPerClass.java b/src/com/o3smeasures/measures/WeightMethodsPerClass.java similarity index 94% rename from src/o3smeasures/measures/WeightMethodsPerClass.java rename to src/com/o3smeasures/measures/WeightMethodsPerClass.java index 6c7e140..a837e82 100644 --- a/src/o3smeasures/measures/WeightMethodsPerClass.java +++ b/src/com/o3smeasures/measures/WeightMethodsPerClass.java @@ -1,10 +1,10 @@ -package o3smeasures.measures; +package com.o3smeasures.measures; import org.eclipse.jdt.core.dom.CompilationUnit; -import o3smeasures.astvisitors.ClassVisitor; -import o3smeasures.astvisitors.WeightMethodsPerClassVisitor; -import o3smeasures.structures.Measure; +import com.o3smeasures.astvisitors.ClassVisitor; +import com.o3smeasures.astvisitors.WeightMethodsPerClassVisitor; +import com.o3smeasures.structures.Measure; /** * Class that implement the WMC - Weight methods per class, which is simply @@ -127,7 +127,6 @@ public boolean isEnable() { @Override public void setEnable(boolean isEnable) { this.isEnable = isEnable; - } /** diff --git a/src/o3smeasures/measures/enumeration/FactorsEnum.java b/src/com/o3smeasures/measures/enumeration/FactorsEnum.java similarity index 83% rename from src/o3smeasures/measures/enumeration/FactorsEnum.java rename to src/com/o3smeasures/measures/enumeration/FactorsEnum.java index 0813605..aba85ce 100644 --- a/src/o3smeasures/measures/enumeration/FactorsEnum.java +++ b/src/com/o3smeasures/measures/enumeration/FactorsEnum.java @@ -1,4 +1,4 @@ -package o3smeasures.measures.enumeration; +package com.o3smeasures.measures.enumeration; /** * Enum to describe internal quality factors. See reference here: http://repositorio.ufla.br/handle/1/10561 @@ -23,8 +23,4 @@ public String getName() { return name; } - public void setName(String name) { - this.name = name; - } - } diff --git a/src/com/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java b/src/com/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java new file mode 100644 index 0000000..9b4c00a --- /dev/null +++ b/src/com/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java @@ -0,0 +1,73 @@ +package com.o3smeasures.measures.enumeration; + +import com.o3smeasures.util.exception.FactorNotFoundException; + +/** + * Enum to describe measure's configurations. See reference here: http://repositorio.ufla.br/handle/1/10561 + * @author Mariana Azevedo + * @since 16/04/2017 + * + */ +public enum O3SMeasuresConfigurationEnum { + + //The weights reference here: http://repositorio.ufla.br/handle/1/10561 + NUMBER_CLASSES("Number of Classes", "None", 0.0), + NUMBER_METHODS("Number of Methods", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.788), + NUMBER_ATTRIBUTES("Number of Attributes", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.818), + LINES_CODE("Lines of Code", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.937), + WEIGHT_METHODS_CLASS("Weight Methods per Class", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.750), + CYCLOMATIC_COMPLEXITY("Cyclomatic Complexity", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.913), + DEPTH_INHERITANCE_TREE("Depth of Inheritance Tree", "None", 0.0), + NUMBER_CHILDREN("Number of Children", "None", 0.0), + COUPLING_BETWEEN_OBJECTS("Coupling between Objects", "None", 0.0), + RESPONSE_FOR_CLASS("Response for Class", + FactorsEnum.COMPLEXITY_REDUCTION.getName(), 0.744), + FAN_OUT("Fan-out", FactorsEnum.INCREASE_MODULARITY.getName(), 0.899), + LACK_COHESION_METHODS("Lack of Cohesion of Methods", + FactorsEnum.HIGH_COHESION_METHODS.getName(), 0.983), + LACK_COHESION_METHODS2("Lack of Cohesion of Methods 2", + FactorsEnum.INCREASE_MODULARITY.getName(), 0.849), + LACK_COHESION_METHODS4("Lack of Cohesion of Methods 4", + FactorsEnum.HIGH_COHESION_METHODS.getName(), 0.981), + TIGHT_CLASS_COHESION("Tight Class Cohesion", + FactorsEnum.TIGHT_LOOSE_COHESION.getName(), 0.950), + LOOSE_CLASS_COHESION("Loose Class Cohesion", + FactorsEnum.TIGHT_LOOSE_COHESION.getName(), 0.949); + + private String measure; + private String factor; + private Double weight; + + private O3SMeasuresConfigurationEnum(String measure, String factor, Double weight) { + this.measure = measure; + this.factor = factor; + this.weight = weight; + } + + public String getMeasure() { + return measure; + } + + public String getFactor() { + return factor; + } + + public Double getWeight() { + return weight; + } + + public static O3SMeasuresConfigurationEnum searchByValue (String value) throws FactorNotFoundException { + for (O3SMeasuresConfigurationEnum measureConf : values()) { + if (measureConf.getMeasure().equals(value)) { + return measureConf; + } + } + throw new FactorNotFoundException("Invalid factor: " + value); + } + +} diff --git a/src/o3smeasures/plugin/Activator.java b/src/com/o3smeasures/plugin/Activator.java similarity index 94% rename from src/o3smeasures/plugin/Activator.java rename to src/com/o3smeasures/plugin/Activator.java index ecbf471..d5ec0f5 100644 --- a/src/o3smeasures/plugin/Activator.java +++ b/src/com/o3smeasures/plugin/Activator.java @@ -1,4 +1,4 @@ -package o3smeasures.plugin; +package com.o3smeasures.plugin; import org.eclipse.core.runtime.ListenerList; import org.eclipse.jface.resource.ImageDescriptor; @@ -23,14 +23,17 @@ public class Activator extends AbstractUIPlugin implements IPropertyChangeListen // The shared instance private static Activator plugin; - private ListenerList listeners = new ListenerList(); + private ListenerList listeners = new ListenerList<>(); - public Activator() {} + public Activator() { + //EmptyConstructor + } /** * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ + @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; @@ -40,6 +43,7 @@ public void start(BundleContext context) throws Exception { * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ + @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); @@ -72,9 +76,6 @@ public static ImageDescriptor getImageDescriptor(String path) { */ @Override public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().startsWith("MEASURE")) { - - } Object[] listenersList = listeners.getListeners(); for (int i = 0; i < listenersList.length; i++) { if (listenersList[i] instanceof IPropertyChangeListener){ diff --git a/src/o3smeasures/plugin/chart/BarChart.java b/src/com/o3smeasures/plugin/chart/BarChart.java similarity index 84% rename from src/o3smeasures/plugin/chart/BarChart.java rename to src/com/o3smeasures/plugin/chart/BarChart.java index 5fde5ce..0339533 100644 --- a/src/o3smeasures/plugin/chart/BarChart.java +++ b/src/com/o3smeasures/plugin/chart/BarChart.java @@ -1,10 +1,11 @@ -package o3smeasures.plugin.chart; +package com.o3smeasures.plugin.chart; import java.awt.Color; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; @@ -16,10 +17,11 @@ import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.data.category.DefaultCategoryDataset; -import o3smeasures.measures.enumeration.O3SMeasuresConfigurationEnum; -import o3smeasures.statistic.Factor; -import o3smeasures.statistic.Indicator; -import o3smeasures.structures.ItemMeasured; +import com.o3smeasures.measures.enumeration.O3SMeasuresConfigurationEnum; +import com.o3smeasures.statistic.Factor; +import com.o3smeasures.statistic.Indicator; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.util.exception.FactorNotFoundException; /** * Class that implements a Bar chart with the results of the items measured in @@ -31,10 +33,12 @@ */ public class BarChart { + static Logger logger = Logger.getLogger(BarChart.class); + private Map factorsMap; public BarChart(){ - factorsMap = new HashMap(); + factorsMap = new HashMap<>(); } public Map getFactorsMap() { @@ -66,7 +70,8 @@ public JFreeChart createBarChart(ItemMeasured itemsMeasured){ populateProjectDataset(barDataset); populateFactorDataset(lineDataset); - chart = ChartFactory.createBarChart3D(projectName, "Indicators", "Measures Std. Dev.", barDataset, + chart = ChartFactory.createBarChart3D(projectName, "Indicators", + "Measures Std. Dev.", barDataset, PlotOrientation.VERTICAL, true, true, false); chart.setBackgroundPaint(Color.white); @@ -85,8 +90,8 @@ public JFreeChart createBarChart(ItemMeasured itemsMeasured){ plot.setRenderer(1, renderer); plot.setForegroundAlpha(0.7f); - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception exception) { + logger.error(exception); } } @@ -111,9 +116,9 @@ private void populateProjectDataset(DefaultCategoryDataset barDataset) { * Method to populate a line chart * * @param lineDataset - * @throws Exception + * @throws FactorNotFoundException */ - private void populateFactorDataset (DefaultCategoryDataset lineDataset) throws Exception { + private void populateFactorDataset (DefaultCategoryDataset lineDataset) throws FactorNotFoundException { for (Factor factor : factorsMap.values()) { for (Indicator indicator : factor.getIndicators()){ @@ -128,9 +133,9 @@ private void populateFactorDataset (DefaultCategoryDataset lineDataset) throws E * Method to create the factor's objects * * @param itemsMeasured - * @throws Exception + * @throws FactorNotFoundException */ - private void createFactors(ItemMeasured itemsMeasured) throws Exception { + private void createFactors(ItemMeasured itemsMeasured) throws FactorNotFoundException { if (itemsMeasured != null) { List items = itemsMeasured.getChildren(); diff --git a/src/o3smeasures/plugin/chart/BoxAndWhiskerChart.java b/src/com/o3smeasures/plugin/chart/BoxAndWhiskerChart.java similarity index 79% rename from src/o3smeasures/plugin/chart/BoxAndWhiskerChart.java rename to src/com/o3smeasures/plugin/chart/BoxAndWhiskerChart.java index c1ed0a6..968c765 100644 --- a/src/o3smeasures/plugin/chart/BoxAndWhiskerChart.java +++ b/src/com/o3smeasures/plugin/chart/BoxAndWhiskerChart.java @@ -1,20 +1,22 @@ -package o3smeasures.plugin.chart; +package com.o3smeasures.plugin.chart; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset; -import o3smeasures.measures.enumeration.O3SMeasuresConfigurationEnum; -import o3smeasures.statistic.Factor; -import o3smeasures.statistic.Indicator; -import o3smeasures.structures.ItemMeasured; +import com.o3smeasures.measures.enumeration.O3SMeasuresConfigurationEnum; +import com.o3smeasures.statistic.Factor; +import com.o3smeasures.statistic.Indicator; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.util.exception.FactorNotFoundException; /** * Class that implements a Box and Whisker chart with the results of the items measured in @@ -26,10 +28,12 @@ */ public class BoxAndWhiskerChart { -private Map factorsMap; + static Logger logger = Logger.getLogger(BoxAndWhiskerChart.class); + + private Map factorsMap; public BoxAndWhiskerChart(){ - factorsMap = new HashMap(); + factorsMap = new HashMap<>(); } public Map getFactorsMap() { @@ -59,7 +63,8 @@ public JFreeChart createBoxAndWhiskerChart(ItemMeasured itemsMeasured){ populateDataset(boxDataset); - chart = ChartFactory.createBoxAndWhiskerChart(projectName, "Factors", "Measures Values", boxDataset, true); + chart = ChartFactory.createBoxAndWhiskerChart(projectName, + "Factors", "Measures Values", boxDataset, true); CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setDomainGridlinesVisible(true); plot.setRangePannable(true); @@ -67,8 +72,8 @@ public JFreeChart createBoxAndWhiskerChart(ItemMeasured itemsMeasured){ NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception exception) { + logger.error(exception); } } @@ -95,9 +100,9 @@ private void populateDataset(DefaultBoxAndWhiskerCategoryDataset boxDataset) { * Method to create the factor's objects * * @param itemsMeasured - * @throws Exception + * @throws FactorNotFoundException */ - private void createFactors(ItemMeasured itemsMeasured) throws Exception { + private void createFactors(ItemMeasured itemsMeasured) throws FactorNotFoundException { if (itemsMeasured != null) { List items = itemsMeasured.getChildren(); @@ -130,12 +135,12 @@ private void createFactors(ItemMeasured itemsMeasured) throws Exception { */ private static List createValueList(double lowerBound, double upperBound, ItemMeasured item) { - List result = new ArrayList(); + List result = new ArrayList<>(); for (int i = 0; i < item.getChildren().size(); i++) { double itemValue = item.getChildren().get(i).getValue(); double value = lowerBound + (itemValue * (upperBound - lowerBound)); - result.add(new Double(value)); + result.add(Double.valueOf(value)); } return result; diff --git a/src/o3smeasures/plugin/chart/PieChart.java b/src/com/o3smeasures/plugin/chart/PieChart.java similarity index 78% rename from src/o3smeasures/plugin/chart/PieChart.java rename to src/com/o3smeasures/plugin/chart/PieChart.java index 68b031d..600e4ec 100644 --- a/src/o3smeasures/plugin/chart/PieChart.java +++ b/src/com/o3smeasures/plugin/chart/PieChart.java @@ -1,14 +1,14 @@ -package o3smeasures.plugin.chart; +package com.o3smeasures.plugin.chart; import java.awt.Font; import java.util.List; -import o3smeasures.structures.ItemMeasured; - import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; +import com.o3smeasures.structures.ItemMeasured; + /** * Class that implements a PieChart with the results of the items measured in * the plugin. @@ -28,9 +28,9 @@ public class PieChart { */ public JFreeChart createPieChart(ItemMeasured itemsMeasured) { - double pieRatio = 0.0; + double pieRatio = 0d; - DefaultPieDataset PieChartDataset = new DefaultPieDataset(); + DefaultPieDataset pieChartDataset = new DefaultPieDataset(); String projectName = ""; if (itemsMeasured != null) { @@ -42,13 +42,14 @@ public JFreeChart createPieChart(ItemMeasured itemsMeasured) { } for (ItemMeasured item : items) { - PieChartDataset.setValue(item.getName(), item.getValue() / pieRatio); + if(pieRatio != 0d){ + pieChartDataset.setValue(item.getName(), item.getValue() / pieRatio); + } } - } JFreeChart pieChart = ChartFactory.createPieChart3D("Project's measures " + projectName, - PieChartDataset, + pieChartDataset, false, true, false); diff --git a/src/o3smeasures/plugin/views/FactorsView.java b/src/com/o3smeasures/plugin/views/FactorsView.java similarity index 87% rename from src/o3smeasures/plugin/views/FactorsView.java rename to src/com/o3smeasures/plugin/views/FactorsView.java index 7798b55..ed08074 100644 --- a/src/o3smeasures/plugin/views/FactorsView.java +++ b/src/com/o3smeasures/plugin/views/FactorsView.java @@ -1,4 +1,4 @@ -package o3smeasures.plugin.views; +package com.o3smeasures.plugin.views; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -6,8 +6,8 @@ import org.jfree.chart.JFreeChart; import org.jfree.experimental.chart.swt.ChartComposite; -import o3smeasures.plugin.chart.BoxAndWhiskerChart; -import o3smeasures.structures.ItemMeasured; +import com.o3smeasures.plugin.chart.BoxAndWhiskerChart; +import com.o3smeasures.structures.ItemMeasured; /** * Class that inherits of the ViewPart abstract class (that implements @@ -21,7 +21,7 @@ */ public class FactorsView extends ViewPart { - public static final String ID = "o3smeasures.plugin.views.FactorsView"; + public static final String ID = "com.o3smeasures.plugin.views.FactorsView"; private ChartComposite view; private JFreeChart jFreeChart; @@ -41,7 +41,7 @@ public void setjFreeChart(JFreeChart jFreeChart) { */ public void showFactorChart(ItemMeasured itemMeasured){ BoxAndWhiskerChart factorsView = new BoxAndWhiskerChart(); - JFreeChart jFreeChart = factorsView.createBoxAndWhiskerChart(itemMeasured); + jFreeChart = factorsView.createBoxAndWhiskerChart(itemMeasured); view.setChart(jFreeChart); setFactorsChart(jFreeChart); diff --git a/src/o3smeasures/plugin/views/IndicatorsView.java b/src/com/o3smeasures/plugin/views/IndicatorsView.java similarity index 87% rename from src/o3smeasures/plugin/views/IndicatorsView.java rename to src/com/o3smeasures/plugin/views/IndicatorsView.java index 10f4e6b..b2d327c 100644 --- a/src/o3smeasures/plugin/views/IndicatorsView.java +++ b/src/com/o3smeasures/plugin/views/IndicatorsView.java @@ -1,4 +1,4 @@ -package o3smeasures.plugin.views; +package com.o3smeasures.plugin.views; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -6,8 +6,8 @@ import org.jfree.chart.JFreeChart; import org.jfree.experimental.chart.swt.ChartComposite; -import o3smeasures.plugin.chart.BarChart; -import o3smeasures.structures.ItemMeasured; +import com.o3smeasures.plugin.chart.BarChart; +import com.o3smeasures.structures.ItemMeasured; /** * Class that inherits of the ViewPart abstract class (that implements @@ -22,7 +22,7 @@ */ public class IndicatorsView extends ViewPart { - public static final String ID = "o3smeasures.plugin.views.IndicatorsView"; + public static final String ID = "com.o3smeasures.plugin.views.IndicatorsView"; private ChartComposite view; private JFreeChart jFreeChart; @@ -42,7 +42,7 @@ public void setjFreeChart(JFreeChart jFreeChart) { */ public void showIndicatorChart(ItemMeasured itemMeasured){ BarChart indicatorsChart = new BarChart(); - JFreeChart jFreeChart = indicatorsChart.createBarChart(itemMeasured); + jFreeChart = indicatorsChart.createBarChart(itemMeasured); view.setChart(jFreeChart); setIndicatorsChart(jFreeChart); diff --git a/src/o3smeasures/plugin/views/PieChartView.java b/src/com/o3smeasures/plugin/views/PieChartView.java similarity index 86% rename from src/o3smeasures/plugin/views/PieChartView.java rename to src/com/o3smeasures/plugin/views/PieChartView.java index 59999cc..ec2b995 100644 --- a/src/o3smeasures/plugin/views/PieChartView.java +++ b/src/com/o3smeasures/plugin/views/PieChartView.java @@ -1,7 +1,4 @@ -package o3smeasures.plugin.views; - -import o3smeasures.plugin.chart.PieChart; -import o3smeasures.structures.ItemMeasured; +package com.o3smeasures.plugin.views; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -9,6 +6,9 @@ import org.jfree.chart.JFreeChart; import org.jfree.experimental.chart.swt.ChartComposite; +import com.o3smeasures.plugin.chart.PieChart; +import com.o3smeasures.structures.ItemMeasured; + /** * Class that inherits of the ViewPart abstract class (that implements * all workbench views) and creates the pie chart (PieChartView) of the measurement @@ -20,7 +20,7 @@ * */ public class PieChartView extends ViewPart { - public static final String ID = "o3smeasures.plugin.views.PieChartView"; + public static final String ID = "com.o3smeasures.plugin.views.PieChartView"; private ChartComposite view; private JFreeChart jFreeChart; @@ -33,7 +33,7 @@ public class PieChartView extends ViewPart { */ public void showPieChart(ItemMeasured itemMeasured) { PieChart pieChart = new PieChart(); - JFreeChart jFreeChart = pieChart.createPieChart(itemMeasured); + jFreeChart = pieChart.createPieChart(itemMeasured); view.setChart(jFreeChart); setPieChart(jFreeChart); diff --git a/src/o3smeasures/plugin/views/SampleView.java b/src/com/o3smeasures/plugin/views/SampleView.java similarity index 71% rename from src/o3smeasures/plugin/views/SampleView.java rename to src/com/o3smeasures/plugin/views/SampleView.java index d5f3407..3ca61ef 100644 --- a/src/o3smeasures/plugin/views/SampleView.java +++ b/src/com/o3smeasures/plugin/views/SampleView.java @@ -1,13 +1,11 @@ -package o3smeasures.plugin.views; +package com.o3smeasures.plugin.views; +import java.io.IOException; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Locale; -import o3smeasures.main.Application; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.util.FileExport; - +import org.apache.log4j.Logger; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; @@ -27,6 +25,10 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.part.ViewPart; +import com.o3smeasures.main.Application; +import com.o3smeasures.structures.ItemMeasured; +import com.o3smeasures.util.FileExport; + /** * Class that inherits of the ViewPart abstract class (that implements * all workbench views) and creates the spreadsheet view of the measurement @@ -39,7 +41,8 @@ */ public class SampleView extends ViewPart { - public static final String ID = "o3smeasures.plugin.views.SampleView"; + static Logger logger = Logger.getLogger(SampleView.class); + public static final String ID = "com.o3smeasures.plugin.views.SampleView"; private TreeViewer viewer; private ItemMeasured itemsMeasured; @@ -47,7 +50,9 @@ public class SampleView extends ViewPart { private DecimalFormat formatter; Application o3smeasuresPlugin; - public SampleView() {} + public SampleView() { + //Empty constructor + } public ItemMeasured getItemMeasured(){ return itemsMeasured; @@ -79,12 +84,12 @@ private void createProjectModel(IJavaElement elem) { if (elem != null) { try { - final IProject project = (IProject) elem.getUnderlyingResource(); + project = (IProject) elem.getUnderlyingResource(); setProject(project); setContentDescription("Project: " + project.getName()); createViews(project); - } catch (JavaModelException e1) { - e1.printStackTrace(); + } catch (JavaModelException exception) { + logger.error(exception); } } } @@ -97,20 +102,20 @@ private void createProjectModel(IJavaElement elem) { */ private void createViews(final IProject project) { if (project.isOpen()) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - try { - itemsMeasured = createModel(project); - if (itemsMeasured != null) { - viewer.setInput(itemsMeasured); - viewer.refresh(true); - } - } catch (CoreException e) { - e.printStackTrace(); + + Runnable buildViews = () -> { + try { + itemsMeasured = createModel(project); + if (itemsMeasured != null) { + viewer.setInput(itemsMeasured); + viewer.refresh(true); } + } catch (CoreException exception) { + logger.error(exception); } - - }); + }; + + Display.getDefault().asyncExec(buildViews); } } @@ -127,86 +132,64 @@ public void createPartControl(Composite parent) { viewer.getTree().setLinesVisible(true); viewer.getTree().setHeaderVisible(true); - TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setMoveable(true); - column.getColumn().setText("Item"); + TreeViewerColumn column = fulfillColumn(200, "Item"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { return element.toString(); } }); - column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(100); - column.getColumn().setMoveable(true); - column.getColumn().setText("Value"); + column = fulfillColumn(100, "Value"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { if (element instanceof ItemMeasured) { - ItemMeasured item = (ItemMeasured)element; - return formatter.format(item.getValue()); + return formatter.format(((ItemMeasured)element).getValue()); } return ""; } }); - column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(100); - column.getColumn().setMoveable(true); - column.getColumn().setText("Mean Value per Class"); + column = fulfillColumn(100, "Mean Value per Class"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { if (element instanceof ItemMeasured) { - ItemMeasured item = (ItemMeasured)element; - return formatter.format(item.getMean()); + return formatter.format(((ItemMeasured)element).getMean()); } return ""; } }); - column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(100); - column.getColumn().setMoveable(true); - column.getColumn().setText("Max Value"); + column = fulfillColumn(100, "Max Value"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { - if (element instanceof ItemMeasured) { - ItemMeasured item = (ItemMeasured)element; - if (item.getParent().getParent() == null){ - return formatter.format(item.getMax()); - } + if ((element instanceof ItemMeasured) && ((ItemMeasured) element).getParent() == null) { + return formatter.format(((ItemMeasured) element).getMax()); } return ""; } }); - column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(100); - column.getColumn().setMoveable(true); - column.getColumn().setText("Resource with Max Value"); + column = fulfillColumn(100, "Resource with Max Value"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { - if (element instanceof ItemMeasured) { - ItemMeasured item = (ItemMeasured)element; - if (item.getParent().getParent() == null){ - return item.getClassWithMax(); - } + if ((element instanceof ItemMeasured) && ((ItemMeasured) element).getParent() == null) { + return ((ItemMeasured) element).getClassWithMax(); } return ""; } }); - column = new TreeViewerColumn(viewer, SWT.NONE); - column.getColumn().setWidth(100); - column.getColumn().setMoveable(true); - column.getColumn().setText("Description"); + column = fulfillColumn(100, "Description"); column.setLabelProvider(new ColumnLabelProvider() { + @Override public String getText(Object element) { - if (element instanceof ItemMeasured) { - ItemMeasured item = (ItemMeasured)element; - if (item.getMeasure() != null) - return item.getMeasure().getDescription(); + if ((element instanceof ItemMeasured) && ((ItemMeasured) element).getMeasure() != null) { + return ((ItemMeasured) element).getMeasure().getDescription(); } return ""; } @@ -217,6 +200,22 @@ public String getText(Object element) { createMenuManager(); } + /** + * Method to fulfill column basic informations + * @param width + * @param columnName + * @return + */ + public TreeViewerColumn fulfillColumn(int width, String columnName) { + + TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE); + column.getColumn().setWidth(width); + column.getColumn().setMoveable(true); + column.getColumn().setText(columnName); + + return column; + } + /** * Method to set the menu on the SWT widget. Once created, * the menu can be accessed by selecting the project in the workspace @@ -236,7 +235,11 @@ private void createMenuManager() { Action expCsv = new Action(){ @Override public void run() { - new FileExport().createCSVFile(getProject().getName(), getItemMeasured()); + try { + new FileExport().createCSVFile(getProject().getName(), getItemMeasured()); + } catch (IOException exception) { + logger.error(exception); + } } }; expCsv.setText("Export to CSV File"); @@ -245,7 +248,11 @@ public void run() { Action expXml = new Action() { @Override public void run() { - new FileExport().createXMLFile(getProject().getName(), getItemMeasured()); + try { + new FileExport().createXMLFile(getProject().getName(), getItemMeasured()); + } catch (IOException exception) { + logger.error(exception); + } } }; @@ -284,8 +291,10 @@ public void setFocus() { * @since 13/07/2014 */ private class MyContentProvider implements ITreeContentProvider { - public void dispose() {} - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} + @Override + public void dispose() { /*Not implemented */ } + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {/*Not implemented */} public Object[] getChildren(Object parentElement) { return getElements(parentElement); @@ -303,7 +312,7 @@ public Object getParent(Object element) { } public boolean hasChildren(Object element) { - return ((ItemMeasured) element).getChildren().size() > 0; + return !((ItemMeasured) element).getChildren().isEmpty(); } } diff --git a/src/o3smeasures/popup/actions/Measurement.java b/src/com/o3smeasures/popup/actions/Measurement.java similarity index 83% rename from src/o3smeasures/popup/actions/Measurement.java rename to src/com/o3smeasures/popup/actions/Measurement.java index 9aeb5a2..39141d1 100644 --- a/src/o3smeasures/popup/actions/Measurement.java +++ b/src/com/o3smeasures/popup/actions/Measurement.java @@ -1,12 +1,8 @@ -package o3smeasures.popup.actions; +package com.o3smeasures.popup.actions; import java.lang.reflect.InvocationTargetException; -import o3smeasures.plugin.views.FactorsView; -import o3smeasures.plugin.views.IndicatorsView; -import o3smeasures.plugin.views.PieChartView; -import o3smeasures.plugin.views.SampleView; - +import org.apache.log4j.Logger; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -19,6 +15,11 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; +import com.o3smeasures.plugin.views.FactorsView; +import com.o3smeasures.plugin.views.IndicatorsView; +import com.o3smeasures.plugin.views.PieChartView; +import com.o3smeasures.plugin.views.SampleView; + /** * Class that extends the AbstractHandler interface for an object * action that is contributed into a popup menu for a view or editor. @@ -30,6 +31,7 @@ */ public class Measurement extends AbstractHandler { + static Logger logger = Logger.getLogger(Measurement.class); private Shell shell; public Measurement() { @@ -46,17 +48,16 @@ public Object execute(ExecutionEvent event) throws ExecutionException { ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()); try { + + Runnable update = () -> updateViews(event); + dialog.run(true, true, new IRunnableWithProgress(){ public void run(IProgressMonitor monitor) { monitor.beginTask("Measuring", 16); for (int i = 0; i < 16; i++){ monitor.subTask("Getting measure values " + (i+1) + " of "+ 16 + "..."); - Display.getDefault().syncExec(new Runnable() { - public void run() { - updateViews(event); - } - }); + Display.getDefault().syncExec(update); monitor.worked(1); if(monitor.isCanceled()){ @@ -67,10 +68,12 @@ public void run() { monitor.done(); } }); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); + } catch (InvocationTargetException exception1) { + logger.error(exception1); + } catch (InterruptedException exception2) { + logger.error(exception2); + // Restore interrupted state... + Thread.currentThread().interrupt(); } return null; diff --git a/src/o3smeasures/preferences/O3SMeasuresPreferencePage.java b/src/com/o3smeasures/preferences/O3SMeasuresPreferencePage.java similarity index 92% rename from src/o3smeasures/preferences/O3SMeasuresPreferencePage.java rename to src/com/o3smeasures/preferences/O3SMeasuresPreferencePage.java index e4044ea..cfe27f2 100644 --- a/src/o3smeasures/preferences/O3SMeasuresPreferencePage.java +++ b/src/com/o3smeasures/preferences/O3SMeasuresPreferencePage.java @@ -1,12 +1,12 @@ -package o3smeasures.preferences; - -import o3smeasures.plugin.Activator; +package com.o3smeasures.preferences; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; +import com.o3smeasures.plugin.Activator; + /** * Class that implements the plugin preference page. * @see FieldEditorPreferencePage diff --git a/src/o3smeasures/preferences/PreferenceInitializer.java b/src/com/o3smeasures/preferences/PreferenceInitializer.java similarity index 89% rename from src/o3smeasures/preferences/PreferenceInitializer.java rename to src/com/o3smeasures/preferences/PreferenceInitializer.java index b15c555..5c4dda5 100644 --- a/src/o3smeasures/preferences/PreferenceInitializer.java +++ b/src/com/o3smeasures/preferences/PreferenceInitializer.java @@ -1,9 +1,9 @@ -package o3smeasures.preferences; +package com.o3smeasures.preferences; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.jface.preference.IPreferenceStore; -import o3smeasures.plugin.Activator; +import com.o3smeasures.plugin.Activator; /** * Class that implements the plugin preference page inicialization. @@ -15,7 +15,7 @@ */ public class PreferenceInitializer extends AbstractPreferenceInitializer { - public PreferenceInitializer() {} + public PreferenceInitializer() { /* Empty constructor */} /** * @see AbstractPreferenceInitializer#initializeDefaultPreferences diff --git a/src/o3smeasures/preferences/ShowPreferencesValues.java b/src/com/o3smeasures/preferences/ShowPreferencesValues.java similarity index 92% rename from src/o3smeasures/preferences/ShowPreferencesValues.java rename to src/com/o3smeasures/preferences/ShowPreferencesValues.java index 929cf00..1c32941 100644 --- a/src/o3smeasures/preferences/ShowPreferencesValues.java +++ b/src/com/o3smeasures/preferences/ShowPreferencesValues.java @@ -1,4 +1,4 @@ -package o3smeasures.preferences; +package com.o3smeasures.preferences; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -7,7 +7,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; -import o3smeasures.plugin.Activator; +import com.o3smeasures.plugin.Activator; /** * Class that implements the abstract handler that show the value chosen in diff --git a/src/o3smeasures/statistic/Factor.java b/src/com/o3smeasures/statistic/Factor.java similarity index 87% rename from src/o3smeasures/statistic/Factor.java rename to src/com/o3smeasures/statistic/Factor.java index 15283de..363f717 100644 --- a/src/o3smeasures/statistic/Factor.java +++ b/src/com/o3smeasures/statistic/Factor.java @@ -1,4 +1,4 @@ -package o3smeasures.statistic; +package com.o3smeasures.statistic; import java.util.ArrayList; import java.util.Collection; @@ -13,9 +13,13 @@ public class Factor { private String name; private String description; - private Collection indicators = new ArrayList(); + private Collection indicators; private int numberOfIndicators; + public Factor(){ + indicators = new ArrayList<>(); + } + public String getName() { return name; } diff --git a/src/o3smeasures/statistic/Indicator.java b/src/com/o3smeasures/statistic/Indicator.java similarity index 92% rename from src/o3smeasures/statistic/Indicator.java rename to src/com/o3smeasures/statistic/Indicator.java index f56ddbf..2519834 100644 --- a/src/o3smeasures/statistic/Indicator.java +++ b/src/com/o3smeasures/statistic/Indicator.java @@ -1,7 +1,7 @@ -package o3smeasures.statistic; +package com.o3smeasures.statistic; -import o3smeasures.statistic.generic.IStatistics; -import o3smeasures.structures.ItemMeasured; +import com.o3smeasures.statistic.generic.IStatistics; +import com.o3smeasures.structures.ItemMeasured; /** * Class that represent a indicator or variable (of internal quality in OO software) diff --git a/src/o3smeasures/statistic/generic/IStatistics.java b/src/com/o3smeasures/statistic/generic/IStatistics.java similarity index 91% rename from src/o3smeasures/statistic/generic/IStatistics.java rename to src/com/o3smeasures/statistic/generic/IStatistics.java index 5b301c4..f459615 100644 --- a/src/o3smeasures/statistic/generic/IStatistics.java +++ b/src/com/o3smeasures/statistic/generic/IStatistics.java @@ -1,4 +1,4 @@ -package o3smeasures.statistic.generic; +package com.o3smeasures.statistic.generic; /** * Interface to calculate statistics of a item diff --git a/src/o3smeasures/structures/ItemMeasured.java b/src/com/o3smeasures/structures/ItemMeasured.java similarity index 98% rename from src/o3smeasures/structures/ItemMeasured.java rename to src/com/o3smeasures/structures/ItemMeasured.java index b91e159..5a856b1 100644 --- a/src/o3smeasures/structures/ItemMeasured.java +++ b/src/com/o3smeasures/structures/ItemMeasured.java @@ -1,4 +1,4 @@ -package o3smeasures.structures; +package com.o3smeasures.structures; import java.util.ArrayList; import java.util.List; @@ -37,7 +37,7 @@ public ItemMeasured(){} public ItemMeasured(String name, ItemMeasured parent) { this.name = name; this.parent = parent; - this.children = new ArrayList(); + this.children = new ArrayList<>(); this.value = 0d; this.mean = 0d; this.max = 0d; diff --git a/src/o3smeasures/structures/Measure.java b/src/com/o3smeasures/structures/Measure.java similarity index 96% rename from src/o3smeasures/structures/Measure.java rename to src/com/o3smeasures/structures/Measure.java index 19e9b4b..ef7e9f0 100644 --- a/src/o3smeasures/structures/Measure.java +++ b/src/com/o3smeasures/structures/Measure.java @@ -1,10 +1,8 @@ -package o3smeasures.structures; +package com.o3smeasures.structures; import java.util.ArrayList; import java.util.List; -import o3smeasures.main.ASTSession; - import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.ITypeRoot; @@ -12,6 +10,8 @@ import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; +import com.o3smeasures.main.ASTSession; + /** * An abstract class that represents the measure entity. A measure has * granularity and an AST parser to create the AST DOM for manipulating the @@ -23,17 +23,17 @@ */ public abstract class Measure { - public static enum Granularity { + public enum Granularity { PROJECT, PACKAGE, CLASS, METHOD; } private List applicableGranularities; - private static ASTParser parser; + private ASTParser parser = null; public Measure(){ - applicableGranularities = new ArrayList(4); + applicableGranularities = new ArrayList<>(4); parser = ASTParser.newParser(AST.JLS8); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setResolveBindings(true); diff --git a/src/com/o3smeasures/test/CouplingBetweenObjectsTest.java b/src/com/o3smeasures/test/CouplingBetweenObjectsTest.java new file mode 100644 index 0000000..910e3b6 --- /dev/null +++ b/src/com/o3smeasures/test/CouplingBetweenObjectsTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.CouplingBetweenObjects; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes CBO measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class CouplingBetweenObjectsTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + CouplingBetweenObjects cbo = new CouplingBetweenObjects(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + cbo.measure(cUnit); + + assertEquals(1.0, cbo.getCalculatedValue()); + System.out.println(cbo.getAcronym() + ": " + cbo.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/CyclomaticComplexityTest.java b/src/com/o3smeasures/test/CyclomaticComplexityTest.java new file mode 100644 index 0000000..bb3fd22 --- /dev/null +++ b/src/com/o3smeasures/test/CyclomaticComplexityTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.CyclomaticComplexity; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes CC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class CyclomaticComplexityTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + CyclomaticComplexity cc = new CyclomaticComplexity(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + cc.measure(cUnit); + + assertEquals(5.0, cc.getCalculatedValue()); + System.out.println(cc.getAcronym() + ": " + cc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/DepthOfInheritanceTreeTest.java b/src/com/o3smeasures/test/DepthOfInheritanceTreeTest.java new file mode 100644 index 0000000..dd030a6 --- /dev/null +++ b/src/com/o3smeasures/test/DepthOfInheritanceTreeTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.ICompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.DepthOfInheritanceTree; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes DIT measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class DepthOfInheritanceTreeTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + DepthOfInheritanceTree dit = new DepthOfInheritanceTree(); + ICompilationUnit cUnit = JavaParser.parseJDT(javaFile); + dit.measure(cUnit); + + assertEquals(0.0, dit.getCalculatedValue()); + System.out.println(dit.getAcronym() + ": " + dit.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/FanOutTest.java b/src/com/o3smeasures/test/FanOutTest.java new file mode 100644 index 0000000..d7c2ef4 --- /dev/null +++ b/src/com/o3smeasures/test/FanOutTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.FanOut; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes FOUT measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class FanOutTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + FanOut fout = new FanOut(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + fout.measure(cUnit); + + assertEquals(1.0, fout.getCalculatedValue()); + System.out.println(fout.getAcronym() + ": " + fout.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/LackCohesionMethodsFourTest.java b/src/com/o3smeasures/test/LackCohesionMethodsFourTest.java new file mode 100644 index 0000000..d34e97e --- /dev/null +++ b/src/com/o3smeasures/test/LackCohesionMethodsFourTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.ICompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.LackCohesionMethodsFour; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes LCOM4 measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class LackCohesionMethodsFourTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + LackCohesionMethodsFour lcom4 = new LackCohesionMethodsFour(); + ICompilationUnit cUnit = JavaParser.parseJDT(javaFile); + lcom4.measure(cUnit); + + assertEquals(6.0, lcom4.getCalculatedValue()); + System.out.println(lcom4.getAcronym() + ": " + lcom4.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/LackCohesionMethodsTest.java b/src/com/o3smeasures/test/LackCohesionMethodsTest.java new file mode 100644 index 0000000..3fa1965 --- /dev/null +++ b/src/com/o3smeasures/test/LackCohesionMethodsTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.ICompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.LackCohesionMethods; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes LCOM measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class LackCohesionMethodsTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + LackCohesionMethods lcom = new LackCohesionMethods(); + ICompilationUnit cUnit = JavaParser.parseJDT(javaFile); + lcom.measure(cUnit); + + assertEquals(1.0, lcom.getCalculatedValue()); + System.out.println(lcom.getAcronym() + ": " + lcom.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/LackCohesionMethodsTwoTest.java b/src/com/o3smeasures/test/LackCohesionMethodsTwoTest.java new file mode 100644 index 0000000..e596866 --- /dev/null +++ b/src/com/o3smeasures/test/LackCohesionMethodsTwoTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.ICompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.LackCohesionMethodsTwo; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes LCOM2 measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class LackCohesionMethodsTwoTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + LackCohesionMethodsTwo lcom2 = new LackCohesionMethodsTwo(); + ICompilationUnit cUnit = JavaParser.parseJDT(javaFile); + lcom2.measure(cUnit); + + assertEquals(1.0, lcom2.getCalculatedValue()); + System.out.println(lcom2.getAcronym() + ": " + lcom2.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/LinesOfCodeTest.java b/src/com/o3smeasures/test/LinesOfCodeTest.java new file mode 100644 index 0000000..d177138 --- /dev/null +++ b/src/com/o3smeasures/test/LinesOfCodeTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.LinesOfCode; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes LOC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class LinesOfCodeTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + LinesOfCode loc = new LinesOfCode(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + loc.measure(cUnit); + + assertEquals(23.0, loc.getCalculatedValue()); + System.out.println(loc.getAcronym() + ": " + loc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/LooseClassCohesionTest.java b/src/com/o3smeasures/test/LooseClassCohesionTest.java new file mode 100644 index 0000000..f9c795c --- /dev/null +++ b/src/com/o3smeasures/test/LooseClassCohesionTest.java @@ -0,0 +1,39 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.LooseClassCohesion; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes LCC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class LooseClassCohesionTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + LooseClassCohesion lcc = new LooseClassCohesion(); + + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + lcc.measure(cUnit); + + assertEquals(40.0, lcc.getCalculatedValue()); + System.out.println(lcc.getAcronym() + ": " + lcc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/NumberOfAttributesTest.java b/src/com/o3smeasures/test/NumberOfAttributesTest.java new file mode 100644 index 0000000..952d5e7 --- /dev/null +++ b/src/com/o3smeasures/test/NumberOfAttributesTest.java @@ -0,0 +1,39 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.NumberOfAttributes; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes NOA measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class NumberOfAttributesTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + NumberOfAttributes noa = new NumberOfAttributes(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + noa.measure(cUnit); + + assertEquals(2.0, noa.getCalculatedValue()); + System.out.println(noa.getAcronym() + ": " + noa.getCalculatedValue() + "\n"); + } + +} diff --git a/src/com/o3smeasures/test/NumberOfChildrenTest.java b/src/com/o3smeasures/test/NumberOfChildrenTest.java new file mode 100644 index 0000000..c146856 --- /dev/null +++ b/src/com/o3smeasures/test/NumberOfChildrenTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.ICompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.NumberOfChildren; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes NOC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class NumberOfChildrenTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + NumberOfChildren noc = new NumberOfChildren(); + ICompilationUnit cUnit = JavaParser.parseJDT(javaFile); + noc.measure(cUnit); + + assertEquals(1.0, noc.getCalculatedValue()); + System.out.println(noc.getAcronym() + ": " + noc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/NumberOfMethodsTest.java b/src/com/o3smeasures/test/NumberOfMethodsTest.java new file mode 100644 index 0000000..0115f97 --- /dev/null +++ b/src/com/o3smeasures/test/NumberOfMethodsTest.java @@ -0,0 +1,39 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.NumberOfMethods; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes NOM measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class NumberOfMethodsTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + NumberOfMethods nom = new NumberOfMethods(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + nom.measure(cUnit); + + assertEquals(5.0, nom.getCalculatedValue()); + System.out.println(nom.getAcronym() + ": " + nom.getCalculatedValue() + "\n"); + } + +} diff --git a/src/com/o3smeasures/test/ResponseForClassTest.java b/src/com/o3smeasures/test/ResponseForClassTest.java new file mode 100644 index 0000000..71cc906 --- /dev/null +++ b/src/com/o3smeasures/test/ResponseForClassTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.ResponseForClass; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes RFC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class ResponseForClassTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + ResponseForClass rfc = new ResponseForClass(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + rfc.measure(cUnit); + + assertEquals(5.0, rfc.getCalculatedValue()); + System.out.println(rfc.getAcronym() + ": " + rfc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/TightClassCohesionTest.java b/src/com/o3smeasures/test/TightClassCohesionTest.java new file mode 100644 index 0000000..470a386 --- /dev/null +++ b/src/com/o3smeasures/test/TightClassCohesionTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.TightClassCohesion; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes TCC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class TightClassCohesionTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + TightClassCohesion tcc = new TightClassCohesion(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + tcc.measure(cUnit); + + assertEquals(20.0, tcc.getCalculatedValue()); + System.out.println(tcc.getAcronym() + ": " + tcc.getCalculatedValue() + "\n"); + } +} diff --git a/src/com/o3smeasures/test/WeightMethodsPerClassTest.java b/src/com/o3smeasures/test/WeightMethodsPerClassTest.java new file mode 100644 index 0000000..fac9729 --- /dev/null +++ b/src/com/o3smeasures/test/WeightMethodsPerClassTest.java @@ -0,0 +1,38 @@ +package com.o3smeasures.test; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.junit.Test; + +import com.o3smeasures.measures.WeightMethodsPerClass; +import com.o3smeasures.util.JavaParser; + +import junit.framework.TestCase; + +/** + * A class test that executes WMC measure test calculation + * and asserts the implementation behavior or state. + * @see TestCase + * + * @author Mariana Azevedo + * @since 13/07/2014 + * + */ +public class WeightMethodsPerClassTest extends TestCase{ + + @Test + public void testMeasure() throws IOException{ + + String className = "HelloWorld.java"; + File javaFile = new File("./test/"+className); + + WeightMethodsPerClass wmc = new WeightMethodsPerClass(); + CompilationUnit cUnit = JavaParser.getJavaFile(javaFile, className); + wmc.measure(cUnit); + + assertEquals(0.0, wmc.getCalculatedValue()); + System.out.println(wmc.getAcronym() + ": " + wmc.getCalculatedValue() + "\n"); + } +} diff --git a/src/o3smeasures/util/FileExport.java b/src/com/o3smeasures/util/FileExport.java similarity index 67% rename from src/o3smeasures/util/FileExport.java rename to src/com/o3smeasures/util/FileExport.java index 2b32f54..a8d2532 100644 --- a/src/o3smeasures/util/FileExport.java +++ b/src/com/o3smeasures/util/FileExport.java @@ -1,4 +1,4 @@ -package o3smeasures.util; +package com.o3smeasures.util; import java.io.File; import java.io.FileWriter; @@ -8,17 +8,18 @@ import javax.swing.JOptionPane; -import o3smeasures.plugin.Activator; -import o3smeasures.structures.ItemMeasured; - import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; +import org.apache.log4j.Logger; import org.eclipse.jface.preference.IPreferenceStore; import org.jsefa.xml.XmlIOFactory; import org.jsefa.xml.XmlSerializer; import org.jsefa.xml.config.XmlConfiguration; import org.jsefa.xml.namespace.QName; +import com.o3smeasures.plugin.Activator; +import com.o3smeasures.structures.ItemMeasured; + /** * Class that implements functions to export the measurement file into CSV or XML. The CSV format * is stand for comma-separated values, CSV is a delimited data format that has fields/columns @@ -32,28 +33,32 @@ */ public class FileExport { - private static final List headerItems = new ArrayList(); - public String TEMP_FOLDER_PATH = ""; + private static final List headerItems = new ArrayList<>(); + private static String tempFolderPath = ""; + private static String pathDelimiter = "\\"; + private static String desktopPath = "\\Desktop\\"; + + static Logger logger = Logger.getLogger(FileExport.class); /** * Method to set the path of the file (csv or xml) created. * @author Mariana Azevedo * @since 13/07/2014 */ - private void setFolderPath(){ + private static void setFolderPath(){ IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore(); - String preferenceValue = prefStore.getString("PATH") + "\\"; + String preferenceValue = prefStore.getString("PATH"); if (preferenceValue.equals("")){ //Treatment to export the file in Unix and Windows OS. - if (!System.getProperty("os.name").toLowerCase().contains("windows")){ - TEMP_FOLDER_PATH = System.getProperty("user.home"); + if (System.getProperty("os.name").toLowerCase().contains("windows")){ + tempFolderPath = System.getProperty("user.home").concat(desktopPath); }else{ - TEMP_FOLDER_PATH = System.getProperty("user.home") + "\\Desktop\\"; + tempFolderPath = System.getProperty("user.home"); } }else{ - TEMP_FOLDER_PATH = preferenceValue; + tempFolderPath = preferenceValue.concat(pathDelimiter); } } @@ -78,7 +83,7 @@ private void populateHeader(){ */ private List populateItems(ItemMeasured itemMeasured){ - List recordItems = new ArrayList(); + List recordItems = new ArrayList<>(); for (ItemMeasured item : itemMeasured.getChildren()){ recordItems.add(new String[] {item.toString(), String.valueOf(item.getValue()), @@ -97,43 +102,32 @@ private List populateItems(ItemMeasured itemMeasured){ * @since 13/07/2014 * @param outputFile * @param item + * @throws IOException */ - public void createCSVFile(String outputFile, ItemMeasured item){ + public void createCSVFile(String outputFile, ItemMeasured item) throws IOException{ setFolderPath(); populateHeader(); - FileWriter fileWriter = null; - CSVPrinter csvOutput = null; - try { - - File file = new File(TEMP_FOLDER_PATH + outputFile + ".csv"); - if (!file.exists()){ - file.createNewFile(); - } - - fileWriter = new FileWriter(file, true); - - csvOutput = new CSVPrinter(fileWriter, CSVFormat.DEFAULT); - csvOutput.printRecords(headerItems); - List it = populateItems(item); - csvOutput.printRecords(it); + File file = new File(tempFolderPath + outputFile + ".csv"); + if (!file.exists()){ + boolean isFileCreated = file.createNewFile(); + logger.info("File created " + isFileCreated); + } + + try (FileWriter fileWriter = new FileWriter(file, true); + CSVPrinter csvOutput = new CSVPrinter(fileWriter, CSVFormat.DEFAULT)) { - JOptionPane.showMessageDialog(null, "CSV file was created successfully!"); + csvOutput.printRecords(headerItems); + List it = populateItems(item); + csvOutput.printRecords(it); + + JOptionPane.showMessageDialog(null, "CSV file was created successfully!"); - } catch (IOException e) { + }catch (IOException exception) { JOptionPane.showMessageDialog(null, "Error in CsvFileWriter!"); - e.printStackTrace(); - } finally { - try { - fileWriter.flush(); - fileWriter.close(); - csvOutput.close(); - } catch (IOException e) { - JOptionPane.showMessageDialog(null, "Error while flushing/closing fileWriter/csvPrinter !"); - e.printStackTrace(); - } - } + logger.error(exception); + } } /** @@ -142,21 +136,18 @@ public void createCSVFile(String outputFile, ItemMeasured item){ * @since 13/07/2014 * @param outputFile * @param itemMeasured + * @throws IOException */ - public void createXMLFile (String outputFile, ItemMeasured itemMeasured){ + public void createXMLFile (String outputFile, ItemMeasured itemMeasured) throws IOException{ setFolderPath(); - - File file = null; - FileWriter fileWriter = null; - - try { - file = new File(TEMP_FOLDER_PATH + outputFile + ".xml"); - if (!file.exists()){ - file.createNewFile(); - } - - fileWriter = new FileWriter(file, true); + + File file = new File(tempFolderPath + outputFile + ".xml"); + if (!file.exists()){ + boolean isFileCreated = file.createNewFile(); + logger.info("File created " + isFileCreated); + } + try (FileWriter fileWriter = new FileWriter(file, true)) { XmlConfiguration config = new XmlConfiguration(); config.getSimpleTypeConverterProvider().registerConverterType(Double.class, JSefaConverter.class); @@ -173,8 +164,9 @@ public void createXMLFile (String outputFile, ItemMeasured itemMeasured){ serializer.close(true); JOptionPane.showMessageDialog(null, "XML file was created successfully!"); - } catch (IOException e) { - e.printStackTrace(); + + }catch (IOException exception) { + logger.error(exception); } } diff --git a/src/o3smeasures/util/JSefaConverter.java b/src/com/o3smeasures/util/JSefaConverter.java similarity index 96% rename from src/o3smeasures/util/JSefaConverter.java rename to src/com/o3smeasures/util/JSefaConverter.java index b4710b2..24a5f99 100644 --- a/src/o3smeasures/util/JSefaConverter.java +++ b/src/com/o3smeasures/util/JSefaConverter.java @@ -1,4 +1,4 @@ -package o3smeasures.util; +package com.o3smeasures.util; import org.jsefa.common.converter.SimpleTypeConverter; diff --git a/src/o3smeasures/util/JavaParser.java b/src/com/o3smeasures/util/JavaParser.java similarity index 88% rename from src/o3smeasures/util/JavaParser.java rename to src/com/o3smeasures/util/JavaParser.java index 50d4a23..e1559f6 100644 --- a/src/o3smeasures/util/JavaParser.java +++ b/src/com/o3smeasures/util/JavaParser.java @@ -1,4 +1,4 @@ -package o3smeasures.util; +package com.o3smeasures.util; import java.io.File; import java.io.FileInputStream; @@ -7,9 +7,12 @@ import java.io.Reader; import java.text.ParseException; -import o3smeasures.main.ASTSession; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; + +import com.o3smeasures.main.ASTSession; + +import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; @@ -31,10 +34,12 @@ */ public class JavaParser { + static Logger logger = Logger.getLogger(JavaParser.class); + private static ASTParser astParser; private static boolean cacheParser = true; - public JavaParser(){} + private JavaParser(){} /** * Method to check if a parser is already instantiated. @@ -58,7 +63,7 @@ public static void setCacheParser(boolean value) { * @return CompilationUnit * @throws ParseException */ - public static CompilationUnit parseAST(FileInputStream fileInputStream) throws ParseException { + public static CompilationUnit parseAST(FileInputStream fileInputStream){ CompilationUnit cUnit = null; ASTSession.getInstance().reset(); @@ -86,13 +91,12 @@ public static CompilationUnit parseAST(FileInputStream fileInputStream) throws P * @return ICompilationUnit * @throws ParseException */ - public static ICompilationUnit parseJDT(File file) throws ParseException { + public static ICompilationUnit parseJDT(File file){ IWorkspace workspace = ResourcesPlugin.getWorkspace(); IPath path = Path.fromOSString(file.getAbsolutePath()); IFile source = workspace.getRoot().getFileForLocation(path); - ICompilationUnit compilationUnit = (ICompilationUnit) JavaCore.create(source); - return compilationUnit; + return (ICompilationUnit) JavaCore.create(source); } /** @@ -113,8 +117,8 @@ public static char[] getFileContent(FileInputStream fileInputStream) { strBuilder.append(buffer, 0, charAmount); charAmount = reader.read(buffer); } - } catch (IOException e) { - e.printStackTrace(); + } catch (IOException exception) { + logger.error(exception); } return strBuilder.toString().toCharArray(); @@ -130,12 +134,12 @@ public static char[] getFileContent(FileInputStream fileInputStream) { * @throws ParseException * @throws IOException */ - public static CompilationUnit getJavaFile(File javaFile, String className) throws ParseException, IOException{ + public static CompilationUnit getJavaFile(File javaFile, String className) throws IOException{ CompilationUnit cUnit; FileInputStream inputStream = new FileInputStream(javaFile); try { - System.out.println("The class '"+className+"' has: "); + logger.info("The class '"+className+"' has: "); cUnit = parseAST(inputStream); } finally { inputStream.close(); diff --git a/src/com/o3smeasures/util/exception/FactorNotFoundException.java b/src/com/o3smeasures/util/exception/FactorNotFoundException.java new file mode 100644 index 0000000..cc41006 --- /dev/null +++ b/src/com/o3smeasures/util/exception/FactorNotFoundException.java @@ -0,0 +1,17 @@ +package com.o3smeasures.util.exception; + +public class FactorNotFoundException extends Exception{ + + /** + * + */ + private static final long serialVersionUID = -7460261477332564260L; + + public FactorNotFoundException(String msg){ + super(msg); + } + + public FactorNotFoundException(String msg, Throwable cause){ + super(msg, cause); + } +} diff --git a/src/o3smeasures/main/Application.java b/src/o3smeasures/main/Application.java deleted file mode 100644 index bd3b8f8..0000000 --- a/src/o3smeasures/main/Application.java +++ /dev/null @@ -1,74 +0,0 @@ -package o3smeasures.main; - -import o3smeasures.builder.MeasureBuilder; -import o3smeasures.measures.CouplingBetweenObjects; -import o3smeasures.measures.CyclomaticComplexity; -import o3smeasures.measures.DepthOfInheritanceTree; -import o3smeasures.measures.FanOut; -import o3smeasures.measures.LackCohesionMethods; -import o3smeasures.measures.LackCohesionMethodsFour; -import o3smeasures.measures.LackCohesionMethodsTwo; -import o3smeasures.measures.LinesOfCode; -import o3smeasures.measures.LooseClassCohesion; -import o3smeasures.measures.NumberOfAttributes; -import o3smeasures.measures.NumberOfChildren; -import o3smeasures.measures.NumberOfClasses; -import o3smeasures.measures.NumberOfMethods; -import o3smeasures.measures.ResponseForClass; -import o3smeasures.measures.TightClassCohesion; -import o3smeasures.measures.WeightMethodsPerClass; -import o3smeasures.structures.ItemMeasured; -import o3smeasures.structures.Measure; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; - -/** - * Main class of the plug-in, which defines all the measures - * and the measure builder in order to perform measurements. - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class Application { - - private MeasureBuilder builder; - private Measure[] measures = { - new NumberOfClasses(), - new LinesOfCode(), - new NumberOfMethods(), - new NumberOfAttributes(), - new CyclomaticComplexity(), - new WeightMethodsPerClass(), - new DepthOfInheritanceTree(), - new NumberOfChildren(), - new CouplingBetweenObjects(), - new FanOut(), - new ResponseForClass(), - new LackCohesionMethods(), - new LackCohesionMethodsTwo(), - new LackCohesionMethodsFour(), - new TightClassCohesion(), - new LooseClassCohesion()}; - - /** - * Method that executes the project's measurement - * @author Mariana Azevedo - * @since 13/07/2014 - * @param project - * @return ItemMeasured - * @throws CoreException - */ - public ItemMeasured execute (IProject project) throws CoreException{ - builder = new MeasureBuilder(); - for (Measure m : measures){ - builder.addMeasure(m); - } - return builder.execute(project); - } - - public Measure[] getMeasures(){ - return measures; - } -} diff --git a/src/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java b/src/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java deleted file mode 100644 index 4f5fd67..0000000 --- a/src/o3smeasures/measures/enumeration/O3SMeasuresConfigurationEnum.java +++ /dev/null @@ -1,72 +0,0 @@ -package o3smeasures.measures.enumeration; - -/** - * Enum to describe measure's configurations. See reference here: http://repositorio.ufla.br/handle/1/10561 - * @author Mariana Azevedo - * @since 16/04/2017 - * - */ -public enum O3SMeasuresConfigurationEnum { - - //The weights reference here: http://repositorio.ufla.br/handle/1/10561 - NUMBER_CLASSES("Number of Classes", "None", 0.0), - NUMBER_METHODS("Number of Methods", "Complexity Reduction", 0.788), - NUMBER_ATTRIBUTES("Number of Attributes", "Complexity Reduction", 0.818), - LINES_CODE("Lines of Code", "Complexity Reduction", 0.937), - WEIGHT_METHODS_CLASS("Weight Methods per Class", "Complexity Reduction", 0.750), - CYCLOMATIC_COMPLEXITY("Cyclomatic Complexity", "Complexity Reduction", 0.913), - DEPTH_INHERITANCE_TREE("Depth of Inheritance Tree", "None", 0.0), - NUMBER_CHILDREN("Number of Children", "None", 0.0), - COUPLING_BETWEEN_OBJECTS("Coupling between Objects", "None", 0.0), - RESPONSE_FOR_CLASS("Response for Class", "Complexity Reduction", 0.744), - FAN_OUT("Fan-out", "Increase of Modularity", 0.899), - LACK_COHESION_METHODS("Lack of Cohesion of Methods", "High Cohesion of Methods", 0.983), - LACK_COHESION_METHODS2("Lack of Cohesion of Methods 2", "Increase of Modularity", 0.849), - LACK_COHESION_METHODS4("Lack of Cohesion of Methods 4", "High Cohesion of Methods", 0.981), - TIGHT_CLASS_COHESION("Tight Class Cohesion", "Tight and Loose Class Cohesion", 0.950), - LOOSE_CLASS_COHESION("Loose Class Cohesion", "Tight and Loose Class Cohesion", 0.949); - - private String measure; - private String factor; - private Double weight; - - private O3SMeasuresConfigurationEnum(String measure, String factor, Double weight) { - this.measure = measure; - this.factor = factor; - this.weight = weight; - } - - public String getMeasure() { - return measure; - } - - public String getFactor() { - return factor; - } - - public void setMeasure(String measure) { - this.measure = measure; - } - - public void setFactor(String factor) { - this.factor = factor; - } - - public Double getWeight() { - return weight; - } - - public void setWeight(Double weight) { - this.weight = weight; - } - - public static O3SMeasuresConfigurationEnum searchByValue (String value) throws Exception { - for (O3SMeasuresConfigurationEnum measureConf : values()) { - if (measureConf.getMeasure().equals(value)) { - return measureConf; - } - } - throw new Exception("Invalid register: " + value); - } - -} diff --git a/src/o3smeasures/test/CouplingBetweenObjectsTest.java b/src/o3smeasures/test/CouplingBetweenObjectsTest.java deleted file mode 100644 index d507ce0..0000000 --- a/src/o3smeasures/test/CouplingBetweenObjectsTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.CouplingBetweenObjects; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes CBO measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class CouplingBetweenObjectsTest extends TestCase{ - - private CouplingBetweenObjects cbo; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - cbo = new CouplingBetweenObjects(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - cbo.measure(cUnit); - - assertEquals(1.0, cbo.getCalculatedValue()); - System.out.println(cbo.getAcronym() + ": " + cbo.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/CyclomaticComplexityTest.java b/src/o3smeasures/test/CyclomaticComplexityTest.java deleted file mode 100644 index df54c98..0000000 --- a/src/o3smeasures/test/CyclomaticComplexityTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.CyclomaticComplexity; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes CC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class CyclomaticComplexityTest extends TestCase{ - - private CyclomaticComplexity cc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - cc = new CyclomaticComplexity(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - cc.measure(cUnit); - - assertEquals(5.0, cc.getCalculatedValue()); - System.out.println(cc.getAcronym() + ": " + cc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/DepthOfInheritanceTreeTest.java b/src/o3smeasures/test/DepthOfInheritanceTreeTest.java deleted file mode 100644 index 7c38408..0000000 --- a/src/o3smeasures/test/DepthOfInheritanceTreeTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.DepthOfInheritanceTree; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes DIT measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class DepthOfInheritanceTreeTest extends TestCase{ - - private DepthOfInheritanceTree dit; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - dit = new DepthOfInheritanceTree(); - - ICompilationUnit cUnit; - try { - cUnit = JavaParser.parseJDT(javaFile); - dit.measure(cUnit); - - assertEquals(0.0, dit.getCalculatedValue()); - System.out.println(dit.getAcronym() + ": " + dit.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/FanOutTest.java b/src/o3smeasures/test/FanOutTest.java deleted file mode 100644 index 2975812..0000000 --- a/src/o3smeasures/test/FanOutTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import o3smeasures.measures.FanOut; -import o3smeasures.util.JavaParser; -import junit.framework.TestCase; - -/** - * A class test that executes FOUT measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class FanOutTest extends TestCase{ - - private FanOut fout; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - fout = new FanOut(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - fout.measure(cUnit); - - assertEquals(1.0, fout.getCalculatedValue()); - System.out.println(fout.getAcronym() + ": " + fout.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/o3smeasures/test/LackCohesionMethodsFourTest.java b/src/o3smeasures/test/LackCohesionMethodsFourTest.java deleted file mode 100644 index 4e8a586..0000000 --- a/src/o3smeasures/test/LackCohesionMethodsFourTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.LackCohesionMethodsFour; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes LCOM4 measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class LackCohesionMethodsFourTest extends TestCase{ - - private LackCohesionMethodsFour lcom4; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - lcom4 = new LackCohesionMethodsFour(); - - ICompilationUnit cUnit; - try { - cUnit = JavaParser.parseJDT(javaFile); - lcom4.measure(cUnit); - - assertEquals(6.0, lcom4.getCalculatedValue()); - System.out.println(lcom4.getAcronym() + ": " + lcom4.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/LackCohesionMethodsTest.java b/src/o3smeasures/test/LackCohesionMethodsTest.java deleted file mode 100644 index 3190e16..0000000 --- a/src/o3smeasures/test/LackCohesionMethodsTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.LackCohesionMethods; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes LCOM measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class LackCohesionMethodsTest extends TestCase{ - - private LackCohesionMethods lcom; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - lcom = new LackCohesionMethods(); - - ICompilationUnit cUnit; - try { - cUnit = JavaParser.parseJDT(javaFile); - lcom.measure(cUnit); - - assertEquals(1.0, lcom.getCalculatedValue()); - System.out.println(lcom.getAcronym() + ": " + lcom.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/LackCohesionMethodsTwoTest.java b/src/o3smeasures/test/LackCohesionMethodsTwoTest.java deleted file mode 100644 index 5521bc8..0000000 --- a/src/o3smeasures/test/LackCohesionMethodsTwoTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.LackCohesionMethodsTwo; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes LCOM2 measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class LackCohesionMethodsTwoTest extends TestCase{ - - private LackCohesionMethodsTwo lcom2; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - lcom2 = new LackCohesionMethodsTwo(); - - ICompilationUnit cUnit; - try { - cUnit = JavaParser.parseJDT(javaFile); - lcom2.measure(cUnit); - - assertEquals(1.0, lcom2.getCalculatedValue()); - System.out.println(lcom2.getAcronym() + ": " + lcom2.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/LinesOfCodeTest.java b/src/o3smeasures/test/LinesOfCodeTest.java deleted file mode 100644 index 920ea7f..0000000 --- a/src/o3smeasures/test/LinesOfCodeTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.LinesOfCode; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes LOC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class LinesOfCodeTest extends TestCase{ - - private LinesOfCode loc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - loc = new LinesOfCode(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - loc.measure(cUnit); - - assertEquals(23.0, loc.getCalculatedValue()); - System.out.println(loc.getAcronym() + ": " + loc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/LooseClassCohesionTest.java b/src/o3smeasures/test/LooseClassCohesionTest.java deleted file mode 100644 index af0d8a4..0000000 --- a/src/o3smeasures/test/LooseClassCohesionTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.LooseClassCohesion; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes LCC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class LooseClassCohesionTest extends TestCase{ - - private LooseClassCohesion lcc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - lcc = new LooseClassCohesion(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - lcc.measure(cUnit); - - assertEquals(40.0, lcc.getCalculatedValue()); - System.out.println(lcc.getAcronym() + ": " + lcc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/NumberOfAttributesTest.java b/src/o3smeasures/test/NumberOfAttributesTest.java deleted file mode 100644 index 5252d8c..0000000 --- a/src/o3smeasures/test/NumberOfAttributesTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import o3smeasures.measures.NumberOfAttributes; -import o3smeasures.util.JavaParser; -import junit.framework.TestCase; - -/** - * A class test that executes NOA measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class NumberOfAttributesTest extends TestCase{ - - private NumberOfAttributes noa; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - noa = new NumberOfAttributes(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - noa.measure(cUnit); - - assertEquals(2.0, noa.getCalculatedValue()); - System.out.println(noa.getAcronym() + ": " + noa.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/o3smeasures/test/NumberOfChildrenTest.java b/src/o3smeasures/test/NumberOfChildrenTest.java deleted file mode 100644 index b29c344..0000000 --- a/src/o3smeasures/test/NumberOfChildrenTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.NumberOfChildren; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes NOC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class NumberOfChildrenTest extends TestCase{ - - private NumberOfChildren noc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - noc = new NumberOfChildren(); - - ICompilationUnit cUnit; - try { - cUnit = JavaParser.parseJDT(javaFile); - noc.measure(cUnit); - - assertEquals(1.0, noc.getCalculatedValue()); - System.out.println(noc.getAcronym() + ": " + noc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/NumberOfMethodsTest.java b/src/o3smeasures/test/NumberOfMethodsTest.java deleted file mode 100644 index 96bcb47..0000000 --- a/src/o3smeasures/test/NumberOfMethodsTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import org.eclipse.jdt.core.dom.CompilationUnit; - -import o3smeasures.measures.NumberOfMethods; -import o3smeasures.util.JavaParser; -import junit.framework.TestCase; - -/** - * A class test that executes NOM measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class NumberOfMethodsTest extends TestCase{ - - private NumberOfMethods nom; - private final String className = "HelloWorld.java"; - - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - nom = new NumberOfMethods(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - nom.measure(cUnit); - - assertEquals(5.0, nom.getCalculatedValue()); - System.out.println(nom.getAcronym() + ": " + nom.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/o3smeasures/test/ResponseForClassTest.java b/src/o3smeasures/test/ResponseForClassTest.java deleted file mode 100644 index c385ae8..0000000 --- a/src/o3smeasures/test/ResponseForClassTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.ResponseForClass; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes RFC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class ResponseForClassTest extends TestCase{ - - private ResponseForClass rfc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - rfc = new ResponseForClass(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - rfc.measure(cUnit); - - assertEquals(5.0, rfc.getCalculatedValue()); - System.out.println(rfc.getAcronym() + ": " + rfc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/TightClassCohesionTest.java b/src/o3smeasures/test/TightClassCohesionTest.java deleted file mode 100644 index 3efad5e..0000000 --- a/src/o3smeasures/test/TightClassCohesionTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.TightClassCohesion; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes TCC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class TightClassCohesionTest extends TestCase{ - - private TightClassCohesion tcc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - tcc = new TightClassCohesion(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - tcc.measure(cUnit); - - assertEquals(20.0, tcc.getCalculatedValue()); - System.out.println(tcc.getAcronym() + ": " + tcc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -} diff --git a/src/o3smeasures/test/WeightMethodsPerClassTest.java b/src/o3smeasures/test/WeightMethodsPerClassTest.java deleted file mode 100644 index c6b172c..0000000 --- a/src/o3smeasures/test/WeightMethodsPerClassTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package o3smeasures.test; - -import java.io.File; -import java.io.IOException; -import java.text.ParseException; - -import o3smeasures.measures.WeightMethodsPerClass; -import o3smeasures.util.JavaParser; - -import org.eclipse.jdt.core.dom.CompilationUnit; -import org.junit.Test; - -import junit.framework.TestCase; - -/** - * A class test that executes WMC measure test calculation - * and asserts the implementation behavior or state. - * @see TestCase - * - * @author Mariana Azevedo - * @since 13/07/2014 - * - */ -public class WeightMethodsPerClassTest extends TestCase{ - - private WeightMethodsPerClass wmc; - private final String className = "HelloWorld.java"; - - @Test - public void testMeasure() throws IOException{ - - File javaFile = new File("./test/"+className); - - wmc = new WeightMethodsPerClass(); - - CompilationUnit cUnit; - try { - cUnit = JavaParser.getJavaFile(javaFile, className); - wmc.measure(cUnit); - - assertEquals(0.0, wmc.getCalculatedValue()); - System.out.println(wmc.getAcronym() + ": " + wmc.getCalculatedValue() + "\n"); - } catch (ParseException e) { - e.printStackTrace(); - } - } -}