public void analyse(Project project, SensorContext context) { DroolsPlugin.configureSourceDir(project); Language drools = new Drools(project); ProjectFileSystem fileSystem = project.getFileSystem(); Map<String, DroolsPackage> packageMap = new HashMap<String, DroolsPackage>(); VerifierBuilder verifierBuilder = VerifierBuilderFactory.newVerifierBuilder(); for (File file : fileSystem.getSourceFiles(drools)) { Verifier verifier = verifierBuilder.newVerifier(); try { DroolsFile resource = DroolsFile.fromIOFile(file, false); Source source = analyseSourceCode(file); if (source != null) { context.saveMeasure( resource, CoreMetrics.LINES, (double) source.getMeasure(Metric.LINES)); context.saveMeasure( resource, CoreMetrics.NCLOC, (double) source.getMeasure(Metric.LINES_OF_CODE)); context.saveMeasure( resource, CoreMetrics.COMMENT_LINES, (double) source.getMeasure(Metric.COMMENT_LINES)); } context.saveMeasure(resource, CoreMetrics.FILES, 1.0); context.saveMeasure( resource, CoreMetrics.CLASSES, (double) (resource.getPackageDescr().getRules().size() + resource.getPackageDescr().getFunctions().size())); packageMap.put(resource.getParent().getKey(), resource.getParent()); verifier.addResourcesToVerify(new FileSystemResource(file), ResourceType.DRL); verifier.fireAnalysis(); saveViolations(resource, context, verifier.getResult()); } catch (Throwable e) { DroolsPlugin.LOG.error( "error while verifier analyzing '" + file.getAbsolutePath() + "'", e); } finally { verifier.dispose(); } } for (DroolsPackage droolsPackage : packageMap.values()) { context.saveMeasure(droolsPackage, CoreMetrics.PACKAGES, 1.0); } }
@Test public void testSubruleSubsumption1() throws Exception { VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); Verifier verifier = vBuilder.newVerifier(); verifier.addResourcesToVerify( ResourceFactory.newClassPathResource("SubsumptantSubRules1.drl", getClass()), ResourceType.DRL); // for ( VerifierError error : verifier.getMissingClasses() ) { // System.out.println( error.getMessage() ); // } assertFalse(verifier.hasErrors()); boolean noProblems = verifier.fireAnalysis(); assertTrue(noProblems); Collection<Object> subsumptionList = ((VerifierImpl) verifier) .getKnowledgeSession() .getObjects(new ClassObjectFilter(Subsumption.class)); int count = 0; for (Object object : subsumptionList) { // System.out.println( " * " + ((Subsumption) object) ); if (((VerifierComponent) ((Subsumption) object).getLeft()) .getVerifierComponentType() .equals(VerifierComponentType.SUB_RULE)) { // System.out.println( " ** " + ((SubRule) ((Subsumption) // object).getLeft()).getItems() + " - " + ((SubRule) ((Subsumption) // object).getRight()).getItems() ); count++; } } assertEquals(2, count); verifier.dispose(); }
@Test @Ignore("08-APR-2011 temporally ignoring -Rikkola-") public void testCauseTrace() throws Exception { VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); // Check that the builder works. assertFalse(vBuilder.hasErrors()); assertEquals(0, vBuilder.getErrors().size()); Verifier verifier = vBuilder.newVerifier(); verifier.addResourcesToVerify( new ClassPathResource("Causes.drl", getClass()), ResourceType.DRL); assertFalse(verifier.hasErrors()); assertEquals(0, verifier.getErrors().size()); boolean works = verifier.fireAnalysis(); assertTrue(works); VerifierReport result = verifier.getResult(); assertNotNull(result); assertEquals(0, result.getBySeverity(Severity.ERROR).size()); Collection<VerifierMessageBase> warnings = result.getBySeverity(Severity.WARNING); Collection<VerifierMessageBase> redundancyWarnings = new ArrayList<VerifierMessageBase>(); for (VerifierMessageBase verifierMessageBase : warnings) { if (verifierMessageBase.getMessageType().equals(MessageType.REDUNDANCY)) { redundancyWarnings.add(verifierMessageBase); } } assertEquals(1, redundancyWarnings.size()); VerifierMessage message = (VerifierMessage) redundancyWarnings.toArray()[0]; // System.out.println( message ); assertEquals(2, message.getImpactedRules().size()); assertTrue(message.getImpactedRules().values().contains("Your First Rule")); assertTrue(message.getImpactedRules().values().contains("Your Second Rule")); Cause[] causes = message.getCauses().toArray(new Cause[message.getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(2, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(2, causes.length); assertEquals(0, result.getBySeverity(Severity.NOTE).size()); }