예제 #1
0
  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);
    }
  }
예제 #2
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();
  }