Search in sources :

Example 6 with PMDException

use of net.sourceforge.pmd.PMDException in project pmd by pmd.

the class XPathMetricFunctionTest method testWithExpectedException.

private void testWithExpectedException(String xpath, String code, Class<? extends Exception> expectedThrowable, String expectedMessage) throws Exception {
    Rule rule = makeXpathRuleFromXPath(xpath);
    expected.expect(expectedThrowable);
    expected.expectMessage(expectedMessage);
    try {
        getViolations(rule, code);
    } catch (PMDException pmdE) {
        throw (Exception) pmdE.getCause();
    }
}
Also used : PMDException(net.sourceforge.pmd.PMDException) Rule(net.sourceforge.pmd.Rule) XPathRule(net.sourceforge.pmd.lang.rule.XPathRule)

Example 7 with PMDException

use of net.sourceforge.pmd.PMDException in project pmd by pmd.

the class PmdRunnable method call.

@Override
public Report call() {
    ThreadContext tc = LOCAL_THREAD_CONTEXT.get();
    if (tc == null) {
        tc = new ThreadContext(new RuleSets(ruleSets), new RuleContext(ruleContext));
        LOCAL_THREAD_CONTEXT.set(tc);
    }
    Report report = Report.createReport(tc.ruleContext, fileName);
    if (LOG.isLoggable(Level.FINE)) {
        LOG.fine("Processing " + tc.ruleContext.getSourceCodeFilename());
    }
    for (Renderer r : renderers) {
        r.startFileAnalysis(dataSource);
    }
    try (InputStream stream = new BufferedInputStream(dataSource.getInputStream())) {
        tc.ruleContext.setLanguageVersion(null);
        sourceCodeProcessor.processSourceCode(stream, tc.ruleSets, tc.ruleContext);
    } catch (PMDException pmde) {
        addError(report, pmde, "Error while processing file: " + fileName);
    } catch (IOException ioe) {
        addError(report, ioe, "IOException during processing of " + fileName);
    } catch (RuntimeException re) {
        addError(report, re, "RuntimeException during processing of " + fileName);
    }
    return report;
}
Also used : RuleContext(net.sourceforge.pmd.RuleContext) Report(net.sourceforge.pmd.Report) BufferedInputStream(java.io.BufferedInputStream) RuleSets(net.sourceforge.pmd.RuleSets) BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) Renderer(net.sourceforge.pmd.renderers.Renderer) PMDException(net.sourceforge.pmd.PMDException) IOException(java.io.IOException)

Example 8 with PMDException

use of net.sourceforge.pmd.PMDException in project pmd-eclipse-plugin by pmd.

the class BasicPMDTest method testRunPmdJdk14.

/**
 * Let see with Java 1.4
 */
@Test
public void testRunPmdJdk14() {
    try {
        PMDConfiguration configuration = new PMDConfiguration();
        configuration.setDefaultLanguageVersion(LanguageRegistry.findLanguageVersionByTerseName("java 1.4"));
        final String sourceCode = "public class Foo {\n public void foo() {\nreturn;\n}}";
        final RuleContext context = new RuleContext();
        context.setSourceCodeFilename("foo.java");
        context.setReport(new Report());
        final RuleSet codeStyleRuleSet = new RuleSetFactory().createRuleSet("category/java/codestyle.xml/UnnecessaryReturn");
        RuleSets rSets = new RuleSets(codeStyleRuleSet);
        new SourceCodeProcessor(configuration).processSourceCode(new StringDataSource(sourceCode).getInputStream(), rSets, context);
        final Iterator<RuleViolation> iter = context.getReport().iterator();
        Assert.assertTrue("There should be at least one violation", iter.hasNext());
        final RuleViolation violation = iter.next();
        Assert.assertEquals(violation.getRule().getName(), "UnnecessaryReturn");
        Assert.assertEquals(3, violation.getBeginLine());
    } catch (final RuleSetNotFoundException e) {
        e.printStackTrace();
        Assert.fail();
    } catch (final PMDException e) {
        e.printStackTrace();
        Assert.fail();
    }
}
Also used : RuleSet(net.sourceforge.pmd.RuleSet) RuleContext(net.sourceforge.pmd.RuleContext) Report(net.sourceforge.pmd.Report) SourceCodeProcessor(net.sourceforge.pmd.SourceCodeProcessor) RuleViolation(net.sourceforge.pmd.RuleViolation) RuleSetFactory(net.sourceforge.pmd.RuleSetFactory) RuleSets(net.sourceforge.pmd.RuleSets) RuleSetNotFoundException(net.sourceforge.pmd.RuleSetNotFoundException) PMDException(net.sourceforge.pmd.PMDException) PMDConfiguration(net.sourceforge.pmd.PMDConfiguration) Test(org.junit.Test)

Example 9 with PMDException

use of net.sourceforge.pmd.PMDException in project pmd-eclipse-plugin by pmd.

the class BaseVisitor method reviewResource.

/**
 * Run PMD against a resource
 *
 * @param resource
 *            the resource to process
 */
protected final void reviewResource(IResource resource) {
    IFile file = (IFile) resource.getAdapter(IFile.class);
    if (file == null || file.getFileExtension() == null) {
        return;
    }
    Reader input = null;
    try {
        boolean included = isIncluded(file);
        LOG.debug("Derived files included: " + projectProperties.isIncludeDerivedFiles());
        LOG.debug("file " + file.getName() + " is derived: " + file.isDerived());
        LOG.debug("file checked: " + included);
        prepareMarkerAccumulator(file);
        LanguageVersionDiscoverer languageDiscoverer = new LanguageVersionDiscoverer();
        LanguageVersion languageVersion = languageDiscoverer.getDefaultLanguageVersionForFile(file.getName());
        // in case it is java, select the correct java version
        if (languageVersion != null && languageVersion.getLanguage() == LanguageRegistry.getLanguage(JavaLanguageModule.NAME)) {
            languageVersion = PMDPlugin.javaVersionFor(file.getProject());
        }
        if (languageVersion != null) {
            configuration().setDefaultLanguageVersion(languageVersion);
        }
        LOG.debug("discovered language: " + languageVersion);
        PMDPlugin.setJavaClassLoader(configuration(), resource.getProject());
        final File sourceCodeFile = file.getRawLocation().toFile();
        if (included && getRuleSet().applies(sourceCodeFile) && isFileInWorkingSet(file) && languageVersion != null) {
            subTask("PMD checking: " + file.getName());
            Timer timer = new Timer();
            RuleContext context = PMD.newRuleContext(file.getName(), sourceCodeFile);
            context.setLanguageVersion(languageVersion);
            input = new InputStreamReader(file.getContents(), file.getCharset());
            // getPmdEngine().processFile(input, getRuleSet(), context);
            // getPmdEngine().processFile(sourceCodeFile, getRuleSet(),
            // context);
            DataSource dataSource = new ReaderDataSource(input, file.getName());
            RuleSetFactory ruleSetFactory = new RuleSetFactory() {

                @Override
                public synchronized RuleSets createRuleSets(String referenceString) throws RuleSetNotFoundException {
                    return new RuleSets(getRuleSet());
                }
            };
            // need to disable multi threading, as the ruleset is
            // not recreated and shared between threads...
            // but as we anyway have only one file to process, it won't hurt
            // here.
            configuration().setThreads(0);
            LOG.debug("PMD running on file " + file.getName());
            final Report collectingReport = new Report();
            Renderer collectingRenderer = new AbstractRenderer("collectingRenderer", "Renderer that collect violations") {

                @Override
                public void startFileAnalysis(DataSource dataSource) {
                // TODO Auto-generated method stub
                }

                @Override
                public void start() throws IOException {
                // TODO Auto-generated method stub
                }

                @Override
                public void renderFileReport(Report report) throws IOException {
                    for (RuleViolation v : report) {
                        collectingReport.addRuleViolation(v);
                    }
                    for (Iterator<ProcessingError> it = report.errors(); it.hasNext(); ) {
                        collectingReport.addError(it.next());
                    }
                    for (Iterator<ConfigurationError> it = report.configErrors(); it.hasNext(); ) {
                        collectingReport.addConfigError(it.next());
                    }
                }

                @Override
                public void end() throws IOException {
                // TODO Auto-generated method stub
                }

                @Override
                public String defaultFileExtension() {
                    // TODO Auto-generated method stub
                    return null;
                }
            };
            // PMD.processFiles(configuration(), ruleSetFactory,
            // Arrays.asList(dataSource), context,
            // Arrays.asList(collectingRenderer));
            new MonoThreadProcessor(configuration()).processFiles(ruleSetFactory, Arrays.asList(dataSource), context, Arrays.asList(collectingRenderer));
            LOG.debug("PMD run finished.");
            timer.stop();
            pmdDuration += timer.getDuration();
            LOG.debug("PMD found " + collectingReport.size() + " violations for file " + file.getName());
            if (collectingReport.hasConfigErrors()) {
                StringBuilder message = new StringBuilder("There were configuration errors!\n");
                Iterator<ConfigurationError> errors = collectingReport.configErrors();
                while (errors.hasNext()) {
                    ConfigurationError error = errors.next();
                    message.append(error.rule().getName()).append(": ").append(error.issue()).append('\n');
                }
                PMDPlugin.getDefault().logWarn(message.toString());
                LOG.warn(message);
            }
            if (collectingReport.hasErrors()) {
                StringBuilder message = new StringBuilder("There were processing errors!\n");
                Iterator<ProcessingError> errors = collectingReport.errors();
                while (errors.hasNext()) {
                    ProcessingError error = errors.next();
                    message.append(error.getFile()).append(": ").append(error.getMsg()).append(' ').append(error.getDetail()).append("\n");
                }
                PMDPlugin.getDefault().logWarn(message.toString());
                throw new PMDException(message.toString());
            }
            updateMarkers(file, collectingReport.iterator(), isUseTaskMarker());
            worked(1);
            fileCount++;
        } else {
            LOG.debug("The file " + file.getName() + " is not in the working set");
        }
    } catch (CoreException e) {
        // TODO: complete message
        LOG.error("Core exception visiting " + file.getName(), e);
    } catch (PMDException e) {
        // TODO: complete message
        LOG.error("PMD exception visiting " + file.getName(), e);
    } catch (IOException e) {
        // TODO: complete message
        LOG.error("IO exception visiting " + file.getName(), e);
    } catch (PropertiesException e) {
        // TODO: complete message
        LOG.error("Properties exception visiting " + file.getName(), e);
    } catch (IllegalArgumentException e) {
        LOG.error("Illegal argument", e);
    } finally {
        IOUtil.closeQuietly(input);
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) RuleContext(net.sourceforge.pmd.RuleContext) PropertiesException(net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) BufferedReader(java.io.BufferedReader) RuleViolation(net.sourceforge.pmd.RuleViolation) LanguageVersionDiscoverer(net.sourceforge.pmd.lang.LanguageVersionDiscoverer) ProcessingError(net.sourceforge.pmd.Report.ProcessingError) RuleSetFactory(net.sourceforge.pmd.RuleSetFactory) RuleSets(net.sourceforge.pmd.RuleSets) LanguageVersion(net.sourceforge.pmd.lang.LanguageVersion) InputStreamReader(java.io.InputStreamReader) Report(net.sourceforge.pmd.Report) MonoThreadProcessor(net.sourceforge.pmd.processor.MonoThreadProcessor) IOException(java.io.IOException) DataSource(net.sourceforge.pmd.util.datasource.DataSource) ReaderDataSource(net.sourceforge.pmd.util.datasource.ReaderDataSource) ConfigurationError(net.sourceforge.pmd.Report.ConfigurationError) ReaderDataSource(net.sourceforge.pmd.util.datasource.ReaderDataSource) Timer(name.herlin.command.Timer) CoreException(org.eclipse.core.runtime.CoreException) AbstractRenderer(net.sourceforge.pmd.renderers.AbstractRenderer) Renderer(net.sourceforge.pmd.renderers.Renderer) AbstractRenderer(net.sourceforge.pmd.renderers.AbstractRenderer) PMDException(net.sourceforge.pmd.PMDException) IFile(org.eclipse.core.resources.IFile) File(java.io.File)

Example 10 with PMDException

use of net.sourceforge.pmd.PMDException in project pmd-eclipse-plugin by pmd.

the class AbstractStructureInspectorPage method getPMDMethods.

/**
 * Gets a List of all PMD-Methods.
 *
 * @return an List of ASTMethodDeclarations
 */
private List<ASTMethodDeclaration> getPMDMethods() {
    List<ASTMethodDeclaration> methodList = new ArrayList<ASTMethodDeclaration>();
    // PMD needs this Resource as a String
    try {
        DFAGraphRule dfaGraphRule = new JavaDFAGraphRule();
        RuleSet rs = RuleSetUtil.newSingle(dfaGraphRule);
        RuleContext ctx = new RuleContext();
        ctx.setSourceCodeFilename("[scratchpad]");
        // StringReader reader = new StringReader(getDocument().get());
        // run PMD using the DFAGraphRule and the Text of the Resource
        // new PMDEngine().processFile(reader, rs, ctx);
        byte[] bytes = getDocument().get().getBytes();
        InputStream input = new ByteArrayInputStream(bytes);
        RuleSets rSets = new RuleSets(rs);
        new SourceCodeProcessor(new PMDConfiguration()).processSourceCode(input, rSets, ctx);
        // the Rule then can give us the Methods
        for (DFAGraphMethod m : dfaGraphRule.getMethods()) {
            if (m instanceof ASTMethodDeclaration) {
                methodList.add((ASTMethodDeclaration) m);
            }
        }
        Collections.sort(methodList, ASTUtil.METHOD_COMPARATOR);
    } catch (PMDException pmde) {
        logError(StringKeys.ERROR_PMD_EXCEPTION + toString(), pmde);
    }
    return methodList;
}
Also used : RuleSet(net.sourceforge.pmd.RuleSet) ASTMethodDeclaration(net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration) RuleContext(net.sourceforge.pmd.RuleContext) JavaDFAGraphRule(net.sourceforge.pmd.lang.java.dfa.JavaDFAGraphRule) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) SourceCodeProcessor(net.sourceforge.pmd.SourceCodeProcessor) DFAGraphMethod(net.sourceforge.pmd.lang.dfa.DFAGraphMethod) JavaDFAGraphRule(net.sourceforge.pmd.lang.java.dfa.JavaDFAGraphRule) DFAGraphRule(net.sourceforge.pmd.lang.dfa.DFAGraphRule) ByteArrayInputStream(java.io.ByteArrayInputStream) RuleSets(net.sourceforge.pmd.RuleSets) PMDException(net.sourceforge.pmd.PMDException) PMDConfiguration(net.sourceforge.pmd.PMDConfiguration)

Aggregations

PMDException (net.sourceforge.pmd.PMDException)10 RuleSets (net.sourceforge.pmd.RuleSets)8 RuleContext (net.sourceforge.pmd.RuleContext)7 SourceCodeProcessor (net.sourceforge.pmd.SourceCodeProcessor)7 PMDConfiguration (net.sourceforge.pmd.PMDConfiguration)6 Report (net.sourceforge.pmd.Report)6 RuleSet (net.sourceforge.pmd.RuleSet)5 RuleViolation (net.sourceforge.pmd.RuleViolation)5 IOException (java.io.IOException)4 RuleSetFactory (net.sourceforge.pmd.RuleSetFactory)4 InputStream (java.io.InputStream)3 RuleSetNotFoundException (net.sourceforge.pmd.RuleSetNotFoundException)3 Renderer (net.sourceforge.pmd.renderers.Renderer)3 CoreException (org.eclipse.core.runtime.CoreException)3 Test (org.junit.Test)3 BufferedInputStream (java.io.BufferedInputStream)2 File (java.io.File)2 InputStreamReader (java.io.InputStreamReader)2 DataSource (net.sourceforge.pmd.util.datasource.DataSource)2 IFile (org.eclipse.core.resources.IFile)2