diff --git a/codan/org.eclipse.cdt.codan.checkers.ui/OSGI-INF/l10n/bundle.properties b/codan/org.eclipse.cdt.codan.checkers.ui/OSGI-INF/l10n/bundle.properties index 6b16f775995..b5ef74b8ff1 100644 --- a/codan/org.eclipse.cdt.codan.checkers.ui/OSGI-INF/l10n/bundle.properties +++ b/codan/org.eclipse.cdt.codan.checkers.ui/OSGI-INF/l10n/bundle.properties @@ -10,13 +10,4 @@ ############################################################################### #Properties file for org.eclipse.cdt.codan.checkers.ui Bundle-Vendor = Eclipse CDT -Bundle-Name = Codan Checkers Ui - -checker.name.Cppcheck = Cppcheck -problem.description.Cppcheck.Error = Errors reported by Cppcheck (http://cppcheck.sourceforge.net/) -problem.name.Cppcheck.Error = Errors -problem.description.Cppcheck.Warning = Warnings reported by Cppcheck (http://cppcheck.sourceforge.net/) -problem.name.Cppcheck.Warning = Warnings -problem.description.Cppcheck.Syntax = Syntax problems reported by Cppcheck (http://cppcheck.sourceforge.net/) -problem.name.Cppcheck.Syntax = Syntax Problems -problem.messagePattern.Cppcheck.all = {0} +Bundle-Name = Codan Checkers UI diff --git a/codan/org.eclipse.cdt.codan.checkers.ui/plugin.xml b/codan/org.eclipse.cdt.codan.checkers.ui/plugin.xml index aaf3f26c54c..4bf258318e2 100644 --- a/codan/org.eclipse.cdt.codan.checkers.ui/plugin.xml +++ b/codan/org.eclipse.cdt.codan.checkers.ui/plugin.xml @@ -1,8 +1,6 @@ - - - - - - - - - - - - - - - diff --git a/codan/org.eclipse.cdt.codan.checkers.ui/src/org/eclipse/cdt/codan/internal/checkers/ui/CppcheckChecker.java b/codan/org.eclipse.cdt.codan.checkers.ui/src/org/eclipse/cdt/codan/internal/checkers/ui/CppcheckChecker.java deleted file mode 100644 index d29d1a7db4e..00000000000 --- a/codan/org.eclipse.cdt.codan.checkers.ui/src/org/eclipse/cdt/codan/internal/checkers/ui/CppcheckChecker.java +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.checkers.ui; - -import static java.util.Collections.singletonList; - -import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.cdt.codan.core.externaltool.AbstractOutputParser; -import org.eclipse.cdt.codan.core.externaltool.ConfigurationSettings; -import org.eclipse.cdt.codan.core.externaltool.InvocationParameters; -import org.eclipse.cdt.codan.core.model.IProblemLocation; -import org.eclipse.cdt.codan.internal.checkers.externaltool.CppcheckOutputParser; -import org.eclipse.cdt.codan.ui.cxx.externaltool.AbstractCxxExternalToolBasedChecker; - -/** - * Checker that invokes Cppcheck when a C/C++ file is - * saved. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class CppcheckChecker extends AbstractCxxExternalToolBasedChecker { - private static final String TOOL_NAME = "Cppcheck"; //$NON-NLS-1$ - private static final String EXECUTABLE_NAME = "cppcheck"; //$NON-NLS-1$ - private static final String DEFAULT_ARGS = ""; //$NON-NLS-1$ - - private static final String DESCRIPTION_FORMAT = "[" + TOOL_NAME + "] %s"; //$NON-NLS-1$ //$NON-NLS-2$ - - private static final String ERROR_PROBLEM_ID; - - // key: severity (error, warning, etc.) - value : problem ID associated to severity - private static final Map PROBLEM_IDS = new HashMap(); - - static { - ERROR_PROBLEM_ID = addProblemId("error"); //$NON-NLS-1$ - addProblemId("warning"); //$NON-NLS-1$ - addProblemId("style"); //$NON-NLS-1$ - } - - private static String addProblemId(String severity) { - String problemId = "org.eclipse.cdt.codan.checkers.cppcheck." + severity; //$NON-NLS-1$ - PROBLEM_IDS.put(severity, problemId); - return problemId; - } - - public CppcheckChecker() { - super(new ConfigurationSettings(TOOL_NAME, new File(EXECUTABLE_NAME), DEFAULT_ARGS, false)); - } - - @Override - public void reportProblem(IProblemLocation location, String description, String severity) { - String problemId = PROBLEM_IDS.get(severity); - if (problemId == null) { - problemId = getReferenceProblemId(); - } - super.reportProblem(problemId, location, String.format(DESCRIPTION_FORMAT, description)); - } - - @Override - protected String getReferenceProblemId() { - return ERROR_PROBLEM_ID; - } - - @Override - protected List createParsers(InvocationParameters parameters) { - AbstractOutputParser parser = new CppcheckOutputParser(parameters, this); - return singletonList(parser); - } -} diff --git a/codan/org.eclipse.cdt.codan.checkers/META-INF/MANIFEST.MF b/codan/org.eclipse.cdt.codan.checkers/META-INF/MANIFEST.MF index d68fd3ab0ea..1854c74cc40 100644 --- a/codan/org.eclipse.cdt.codan.checkers/META-INF/MANIFEST.MF +++ b/codan/org.eclipse.cdt.codan.checkers/META-INF/MANIFEST.MF @@ -15,5 +15,4 @@ Bundle-Vendor: %Bundle-Vendor Export-Package: org.eclipse.cdt.codan.checkers, org.eclipse.cdt.codan.internal.checkers; x-friends:="org.eclipse.cdt.codan.checkers.ui, - org.eclipse.cdt.codan.core.test", - org.eclipse.cdt.codan.internal.checkers.externaltool + org.eclipse.cdt.codan.core.test" diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParser.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParser.java deleted file mode 100644 index 05ef14e3a4e..00000000000 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParser.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.checkers.externaltool; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.eclipse.cdt.codan.core.CodanRuntime; -import org.eclipse.cdt.codan.core.externaltool.AbstractOutputParser; -import org.eclipse.cdt.codan.core.externaltool.IProblemDisplay; -import org.eclipse.cdt.codan.core.externaltool.InvocationParameters; -import org.eclipse.cdt.codan.core.model.IProblemLocation; -import org.eclipse.cdt.codan.core.model.IProblemLocationFactory; -import org.eclipse.core.resources.IFile; - -/** - * Parses the output of Cppcheck. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 1.1 - */ -public class CppcheckOutputParser extends AbstractOutputParser { - // sample line to parse: - // - // [/src/HelloWorld.cpp:19]: (style) The scope of the variable 'i' can be reduced - // ----------1--------- -2 --3-- ------------------4------------------------- - // - // groups: - // 1: file path and name - // 2: line where problem was found - // 3: problem severity - // 4: problem description - private static Pattern pattern = Pattern.compile("\\[(.*):(\\d+)\\]:\\s*\\((.*)\\)\\s*(.*)"); //$NON-NLS-1$ - - private final InvocationParameters parameters; - private final IProblemDisplay problemDisplay; - - /** - * Constructor. - * @param parameters the parameters to pass to Cppcheck. - * @param problemDisplay displays any problems reported by Cppcheck as markers. - */ - public CppcheckOutputParser(InvocationParameters parameters, IProblemDisplay problemDisplay) { - this.parameters = parameters; - this.problemDisplay = problemDisplay; - } - - @Override - public boolean parse(String line) { - Matcher matcher = pattern.matcher(line); - if (!matcher.matches()) { - return false; - } - String filePath = matcher.group(1); - if (parameters.getActualFilePath().equals(filePath)) { - int lineNumber = Integer.parseInt(matcher.group(2)); - String severity = matcher.group(3); - String description = matcher.group(4); - IProblemLocation location = createProblemLocation(lineNumber); - problemDisplay.reportProblem(location, description, severity); - } - return true; - } - - private IProblemLocation createProblemLocation(int lineNumber) { - IProblemLocationFactory factory = CodanRuntime.getInstance().getProblemLocationFactory(); - IFile actualFile = (IFile) parameters.getActualFile(); - return factory.createProblemLocation(actualFile, -1, -1, lineNumber); - } - - @Override - public void reset() { - } -} diff --git a/codan/org.eclipse.cdt.codan.core.cxx/META-INF/MANIFEST.MF b/codan/org.eclipse.cdt.codan.core.cxx/META-INF/MANIFEST.MF index 6733e9018f2..76a25897400 100644 --- a/codan/org.eclipse.cdt.codan.core.cxx/META-INF/MANIFEST.MF +++ b/codan/org.eclipse.cdt.codan.core.cxx/META-INF/MANIFEST.MF @@ -10,9 +10,12 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.cdt.codan.core.cxx, - org.eclipse.cdt.codan.core.cxx.internal.model;x-friends:="org.eclipse.cdt.codan.checkers.ui,org.eclipse.cdt.codan.ui,org.eclipse.cdt.codan.ui.cxx", - org.eclipse.cdt.codan.core.cxx.internal.model.cfg;x-friends:="org.eclipse.cdt.codan.core.test", - org.eclipse.cdt.codan.core.cxx.model, - org.eclipse.cdt.codan.core.cxx.util + org.eclipse.cdt.codan.core.cxx.internal.model; + x-friends:="org.eclipse.cdt.codan.checkers.ui, + org.eclipse.cdt.codan.ui, + org.eclipse.cdt.codan.ui.cxx", + org.eclipse.cdt.codan.core.cxx.internal.model.cfg; + x-friends:="org.eclipse.cdt.codan.core.test", + org.eclipse.cdt.codan.core.cxx.model Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-Vendor: %Bundle-Vendor diff --git a/codan/org.eclipse.cdt.codan.core.cxx/src/org/eclipse/cdt/codan/core/cxx/util/FileTypes.java b/codan/org.eclipse.cdt.codan.core.cxx/src/org/eclipse/cdt/codan/core/cxx/util/FileTypes.java deleted file mode 100644 index 819a5c42a45..00000000000 --- a/codan/org.eclipse.cdt.codan.core.cxx/src/org/eclipse/cdt/codan/core/cxx/util/FileTypes.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.cxx.util; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IPath; - -/** - * Utility methods related to C++ file types. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public final class FileTypes { - private static final String[] CPP_FILE_EXTENSIONS = { - "cc", //$NON-NLS-1$ - "cpp", //$NON-NLS-1$ - "cxx" //$NON-NLS-1$ - }; - private static final String[] HEADER_FILE_EXTENSIONS = { "h" }; //$NON-NLS-1$ - - /** - * Indicates whether the given {@link IResource} is a C++ file. - * @param resource the {@code IResource} to check. - * @return {@code true} if the given {@code IResource} is a C++ file; {@code false} otherwise. - */ - public static boolean isCppFile(IResource resource) { - return isFileWithExtension(resource, CPP_FILE_EXTENSIONS); - } - - /** - * Indicates whether the given {@link IResource} is a header file. - * @param resource the {@code IResource} to check. - * @return {@code true} if the given {@code IResource} is a header file; {@code false} - * otherwise. - */ - public static boolean isHeaderFile(IResource resource) { - return isFileWithExtension(resource, HEADER_FILE_EXTENSIONS); - } - - private static boolean isFileWithExtension(IResource resource, String[] validExtensions) { - if (!(resource instanceof IFile)) { - return false; - } - IPath path = resource.getFullPath(); - return doesPathHaveExtension(path, validExtensions); - } - - private static boolean doesPathHaveExtension(IPath path, String[] validExtensions) { - String fileExtension = path.getFileExtension(); - for (String extension : validExtensions) { - if (extension.equalsIgnoreCase(fileExtension)) { - return true; - } - } - return false; - } - - private FileTypes() {} -} diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/AutomatedIntegrationSuite.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/AutomatedIntegrationSuite.java index ff27692d4bc..7f700eaea05 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/AutomatedIntegrationSuite.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/test/AutomatedIntegrationSuite.java @@ -30,12 +30,10 @@ import org.eclipse.cdt.codan.core.internal.checkers.StatementHasNoEffectCheckerT import org.eclipse.cdt.codan.core.internal.checkers.SuggestedParenthesisCheckerTest; import org.eclipse.cdt.codan.core.internal.checkers.SuspiciousSemicolonCheckerTest; import org.eclipse.cdt.codan.core.internal.checkers.UnusedSymbolInFileScopeCheckerTest; -import org.eclipse.cdt.codan.internal.checkers.externaltool.CppcheckOutputParserTest; import org.eclipse.cdt.codan.internal.checkers.ui.quickfix.CaseBreakQuickFixTest; import org.eclipse.cdt.codan.internal.checkers.ui.quickfix.CatchByReferenceQuickFixTest; import org.eclipse.cdt.codan.internal.checkers.ui.quickfix.CreateLocalVariableQuickFixTest; import org.eclipse.cdt.codan.internal.checkers.ui.quickfix.SuggestedParenthesisQuickFixTest; -import org.eclipse.cdt.codan.internal.core.externaltool.ExternalToolInvokerTest; public class AutomatedIntegrationSuite extends TestSuite { public AutomatedIntegrationSuite() { @@ -71,8 +69,6 @@ public class AutomatedIntegrationSuite extends TestSuite { suite.addTestSuite(SuggestedParenthesisCheckerTest.class); suite.addTestSuite(SuspiciousSemicolonCheckerTest.class); suite.addTestSuite(UnusedSymbolInFileScopeCheckerTest.class); - suite.addTestSuite(ExternalToolInvokerTest.class); - suite.addTestSuite(CppcheckOutputParserTest.class); // framework suite.addTest(CodanFastTestSuite.suite()); // quick fixes diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParserTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParserTest.java deleted file mode 100644 index ef58bc6b77d..00000000000 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/checkers/externaltool/CppcheckOutputParserTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.checkers.externaltool; - -import org.eclipse.cdt.codan.core.externaltool.IProblemDisplay; -import org.eclipse.cdt.codan.core.externaltool.InvocationParameters; -import org.eclipse.cdt.codan.core.model.IProblemLocation; -import org.eclipse.cdt.codan.core.test.CodanTestCase; -import org.eclipse.core.resources.IResource; - -/** - * Tests for {@link CppcheckOutputParser}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -@SuppressWarnings("nls") -public class CppcheckOutputParserTest extends CodanTestCase { - private static final String MATCHING_LINE_FORMAT = "[%s:%d]: (%s) %s"; - - private ProblemDisplayStub problemDisplay; - - private CppcheckOutputParser parser; - - @Override - public void setUp() throws Exception { - super.setUp(); - problemDisplay = new ProblemDisplayStub(); - loadcode("void f(int x) {}", "test.cpp"); - InvocationParameters parameters = new InvocationParameters(currentIFile, currentIFile, - actualFilePath(), null); - parser = new CppcheckOutputParser(parameters, problemDisplay); - } - - public void testProblemIsReportedWhenParsingMatchingLine() { - int lineNumber = 2; - String severity = "warning"; - String description = "The scope of the variable 'i' can be reduced"; - boolean parsed = parser.parse(createMatchingLine(lineNumber, severity, description)); - assertTrue(parsed); - problemDisplay.assertThatLocationHasFile(currentIFile); - problemDisplay.assertThatLocationHasLineNumber(lineNumber); - problemDisplay.assertThatLocationHasNoStartingAndEndingChars(); - problemDisplay.assertThatReceivedDescription(description); - problemDisplay.assertThatReceivedSeverity(severity); - } - - private String createMatchingLine(int lineNumber, String severity, String description) { - return String.format(MATCHING_LINE_FORMAT, actualFilePath(), lineNumber, severity, description); - } - - private String actualFilePath() { - return currentIFile.getLocation().toOSString(); - } - - public void testProblemIsNotReportedWhenLineDoesNotMatch() { - boolean parsed = parser.parse("Checking usage of global functions.."); - assertFalse(parsed); - problemDisplay.assertThatProblemWasNotReported(); - } - - private static class ProblemDisplayStub implements IProblemDisplay { - private boolean problemReported; - private IProblemLocation location; - private String description; - private String severity; - - public void reportProblem(IProblemLocation location, String description) { - throw new UnsupportedOperationException(); - } - - public void reportProblem(IProblemLocation location, String description, String severity) { - problemReported = true; - this.location = location; - this.description = description; - this.severity = severity; - } - - void assertThatLocationHasFile(IResource expected) { - assertSame(expected, location.getFile()); - } - - void assertThatLocationHasLineNumber(int expected) { - assertEquals(expected, location.getLineNumber()); - } - - void assertThatLocationHasNoStartingAndEndingChars() { - assertEquals(-1, location.getStartingChar()); - assertEquals(-1, location.getEndingChar()); - } - - void assertThatReceivedDescription(String expected) { - assertEquals(expected, description); - } - - void assertThatReceivedSeverity(String expected) { - assertEquals(expected, severity); - } - - void assertThatProblemWasNotReported() { - assertFalse(problemReported); - } - } -} diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvokerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvokerTest.java deleted file mode 100644 index e45341b9a8a..00000000000 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvokerTest.java +++ /dev/null @@ -1,290 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import static java.util.Arrays.asList; -import static org.junit.Assert.assertArrayEquals; - -import org.eclipse.cdt.codan.core.externaltool.AbstractOutputParser; -import org.eclipse.cdt.codan.core.externaltool.ConfigurationSettings; -import org.eclipse.cdt.codan.core.externaltool.IArgsSeparator; -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinter; -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinterProvider; -import org.eclipse.cdt.codan.core.externaltool.InvocationFailure; -import org.eclipse.cdt.codan.core.externaltool.InvocationParameters; -import org.eclipse.cdt.codan.core.externaltool.SpaceArgsSeparator; -import org.eclipse.cdt.codan.core.param.BasicProblemPreference; -import org.eclipse.cdt.codan.core.param.IProblemPreference; -import org.eclipse.cdt.codan.core.param.MapProblemPreference; -import org.eclipse.cdt.codan.core.test.CodanTestCase; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Tests for {@link ExternalToolInvoker}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -@SuppressWarnings("nls") -public class ExternalToolInvokerTest extends CodanTestCase { - private String externalToolName; - private String externalToolPath; - private boolean shouldDisplayOutput; - private IPath workingDirectory; - private ConsolePrinterProviderStub consolePrinterProvider; - private String[] externalToolOutput; - private ProcessInvokerStub processInvoker; - private OutputParserStub outputParser; - private List outputParsers; - private ConfigurationSettings settings; - private IArgsSeparator argsSeparator; - - private ExternalToolInvoker externalToolInvoker; - - @Override - public void setUp() throws Exception { - super.setUp(); - externalToolName = "TestTool"; - externalToolPath = "/usr/local/testtool"; - shouldDisplayOutput = true; - workingDirectory = new Path("/usr/local/project"); - consolePrinterProvider = new ConsolePrinterProviderStub(); - externalToolOutput = new String[] { "line1", "line2" }; - processInvoker = new ProcessInvokerStub(externalToolOutput); - outputParser = new OutputParserStub(); - outputParsers = new ArrayList(); - outputParsers.add(outputParser); - settings = new ConfigurationSettings(externalToolName, new File("testtool"), "", false); - MapProblemPreference preferences = createPreferences(new File(externalToolPath), - "--include=all --debug=true", shouldDisplayOutput); - settings.updateValuesFrom(preferences); - argsSeparator = new SpaceArgsSeparator(); - externalToolInvoker = new ExternalToolInvoker(consolePrinterProvider, processInvoker); - } - - private MapProblemPreference createPreferences(File executablePath, String args, - boolean shouldDisplayOutput) { - MapProblemPreference preferences = new MapProblemPreference(); - preferences.addChildDescriptor(createPreference(PathSetting.KEY, executablePath)); - preferences.addChildDescriptor(createPreference(ArgsSetting.KEY, args)); - preferences.addChildDescriptor( - createPreference(ConsoleOutputSetting.KEY, shouldDisplayOutput)); - return preferences; - } - - private IProblemPreference createPreference(String key, Object value) { - BasicProblemPreference preference = new BasicProblemPreference(key, ""); - preference.setValue(value); - return preference; - } - - @Override - public boolean isCpp() { - return true; - } - - // class C { - // }; - public void testInvokesProcessCorrectly() throws Throwable { - String aboveComment = getAboveComment(); - loadcode(aboveComment); - String expectedCommand = expectedCommand(); - InvocationParameters parameters = new InvocationParameters(currentIFile, currentIFile, - actualFilePath(), workingDirectory); - externalToolInvoker.invoke(parameters, settings, argsSeparator, outputParsers); - consolePrinterProvider.assertThatReceivedExternalToolName(externalToolName); - consolePrinterProvider.assertThatReceivedShouldDisplayOutputFlag(shouldDisplayOutput); - consolePrinterProvider.consolePrinter.assertThatPrinted(expectedCommand, externalToolOutput); - consolePrinterProvider.consolePrinter.assertThatIsClosed(); - processInvoker.assertThatReceivedCommand(expectedCommand); - processInvoker.assertThatReceivedWorkingDirectory(workingDirectory); - processInvoker.process.assertThatIsDestroyed(); - outputParser.assertThatParsed(externalToolOutput); - outputParser.assertThatWasReset(); - } - - private String expectedCommand() { - StringBuilder commandBuilder = new StringBuilder(); - commandBuilder.append(externalToolPath).append(" ") - .append(actualFilePath()).append(" ") - .append(settings.getArgs().getValue()); - return commandBuilder.toString(); - } - - private String actualFilePath() { - return currentIFile.getLocation().toOSString(); - } - - private static class ConsolePrinterProviderStub implements IConsolePrinterProvider { - private String externalToolName; - private boolean shouldDisplayOutput; - - final ConsolePrinterStub consolePrinter = new ConsolePrinterStub(); - - @Override - public ConsolePrinterStub createConsole(String externalToolName, boolean shouldDisplayOutput) { - this.externalToolName = externalToolName; - this.shouldDisplayOutput = shouldDisplayOutput; - return consolePrinter; - } - - void assertThatReceivedExternalToolName(String expected) { - assertEquals(expected, externalToolName); - } - - void assertThatReceivedShouldDisplayOutputFlag(boolean expected) { - assertEquals(expected, shouldDisplayOutput); - } - } - - private static class ConsolePrinterStub implements IConsolePrinter { - private final List printed = new ArrayList(); - private boolean closed; - - @Override - public void clear() { - printed.clear(); - } - - @Override - public void println(String message) { - printed.add(message); - } - - @Override - public void println() {} - - @Override - public void close() { - closed = true; - } - - void assertThatPrinted(String command, String[] externalToolOutput) { - List expected = new ArrayList(); - expected.add(command); - expected.addAll(asList(externalToolOutput)); - assertEquals(expected, printed); - } - - void assertThatIsClosed() { - assertTrue(closed); - } - } - - private static class ProcessInvokerStub extends ProcessInvoker { - final ProcessStub process; - - private String command; - private IPath workingDirectory; - - ProcessInvokerStub(String[] externalToolOutput) { - process = new ProcessStub(externalToolOutput); - } - - @Override - public ProcessStub invoke(String command, IPath workingDirectory) throws InvocationFailure { - this.command = command; - this.workingDirectory = workingDirectory; - return process; - } - - void assertThatReceivedCommand(String expected) { - assertEquals(expected, command); - } - - void assertThatReceivedWorkingDirectory(IPath expected) { - assertSame(expected, workingDirectory); - } - } - - private static class ProcessStub extends Process { - private static final String LINE_SEPARATOR = System.getProperty("line.separator"); - - private final InputStream inputStream; - private final InputStream errorStream; - - private boolean destroyed; - - ProcessStub(String[] externalToolOutput) { - StringBuilder builder = new StringBuilder(); - for (String s : externalToolOutput) { - builder.append(s).append(LINE_SEPARATOR); - } - inputStream = new ByteArrayInputStream(builder.toString().getBytes()); - errorStream = new ByteArrayInputStream(new byte[0]); - } - - @Override - public OutputStream getOutputStream() { - throw new UnsupportedOperationException(); - } - - @Override - public InputStream getInputStream() { - return inputStream; - } - - @Override - public InputStream getErrorStream() { - return errorStream; - } - - @Override - public int waitFor() { - throw new UnsupportedOperationException(); - } - - @Override - public int exitValue() { - throw new UnsupportedOperationException(); - } - - @Override - public void destroy() { - destroyed = true; - } - - void assertThatIsDestroyed() { - assertTrue(destroyed); - } - } - - private static class OutputParserStub extends AbstractOutputParser { - private final List parsed = new ArrayList(); - private boolean reset; - - @Override - public boolean parse(String line) throws InvocationFailure { - parsed.add(line); - return true; - } - - @Override - public void reset() { - reset = true; - } - - void assertThatParsed(String[] expected) { - assertArrayEquals(expected, parsed.toArray()); - } - - void assertThatWasReset() { - assertTrue(reset); - } - } -} diff --git a/codan/org.eclipse.cdt.codan.core/META-INF/MANIFEST.MF b/codan/org.eclipse.cdt.codan.core/META-INF/MANIFEST.MF index e250cf76c25..332b1beefa8 100644 --- a/codan/org.eclipse.cdt.codan.core/META-INF/MANIFEST.MF +++ b/codan/org.eclipse.cdt.codan.core/META-INF/MANIFEST.MF @@ -10,7 +10,6 @@ Require-Bundle: org.eclipse.core.runtime, Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: org.eclipse.cdt.codan.core, - org.eclipse.cdt.codan.core.externaltool, org.eclipse.cdt.codan.core.model, org.eclipse.cdt.codan.core.model.cfg; x-friends:="org.eclipse.cdt.codan.core.cxx, @@ -22,7 +21,6 @@ Export-Package: org.eclipse.cdt.codan.core, org.eclipse.cdt.codan.core.test, org.eclipse.cdt.codan.ui", org.eclipse.cdt.codan.internal.core.cfg;x-friends:="org.eclipse.cdt.codan.core.cxx", - org.eclipse.cdt.codan.internal.core.externaltool;x-friends:="org.eclipse.cdt.codan.core.test", org.eclipse.cdt.codan.internal.core.model; x-friends:="org.eclipse.cdt.codan.core.cxx, org.eclipse.cdt.codan.core.test, diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractExternalToolBasedChecker.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractExternalToolBasedChecker.java deleted file mode 100644 index 911def92993..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractExternalToolBasedChecker.java +++ /dev/null @@ -1,200 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.cdt.codan.core.CodanCorePlugin; -import org.eclipse.cdt.codan.core.model.AbstractCheckerWithProblemPreferences; -import org.eclipse.cdt.codan.core.model.IProblem; -import org.eclipse.cdt.codan.core.model.IProblemLocation; -import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; -import org.eclipse.cdt.codan.core.param.IProblemPreference; -import org.eclipse.cdt.codan.core.param.MapProblemPreference; -import org.eclipse.cdt.codan.core.param.RootProblemPreference; -import org.eclipse.cdt.codan.core.param.SharedRootProblemPreference; -import org.eclipse.cdt.codan.internal.core.externaltool.ExternalToolInvoker; -import org.eclipse.core.resources.IResource; - -import java.util.List; - -/** - * Base class for checkers that invoke external command-line tools to perform code checking. - *

- * A file, to be processed by this type of checker, must: - *

    - *
  1. be in the current active editor
  2. - *
  3. not have any unsaved changes
  4. - *
- *

- * By default, implementations of this checker are not allowed to run while the user types, since - * external tools cannot see unsaved changes. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public abstract class AbstractExternalToolBasedChecker extends AbstractCheckerWithProblemPreferences - implements IProblemDisplay { - private static final boolean DO_NOT_TRAVERSE_CHILDREN = false; - - private final IInvocationParametersProvider parametersProvider; - private final IArgsSeparator argsSeparator; - private final ConfigurationSettings settings; - private final ExternalToolInvoker externalToolInvoker; - private final RootProblemPreference preferences; - - /** - * Constructor. - * @param parametersProvider provides the parameters to pass when invoking the external tool. - * @param argsSeparator separates the arguments to pass to the external tool executable. These - * arguments are stored in a single {@code String}. - * @param consolePrinterProvider creates an Eclipse console that uses the name of an external - * tool as its own. - * @param settings user-configurable external tool configuration settings. - */ - public AbstractExternalToolBasedChecker(IInvocationParametersProvider parametersProvider, - IArgsSeparator argsSeparator, IConsolePrinterProvider consolePrinterProvider, - ConfigurationSettings settings) { - this.parametersProvider = parametersProvider; - this.argsSeparator = argsSeparator; - this.settings = settings; - externalToolInvoker = new ExternalToolInvoker(consolePrinterProvider); - preferences = new SharedRootProblemPreference(); - } - - /** - * Indicates whether this checker is enabled to run while the user types. By default, this - * method returns {@code false}. - *

- * Running command-line based checkers while the user types is unnecessary and wasteful, since - * command-line tools are expensive to call (they run in a separate process) and they cannot - * see unsaved changes. - *

- * @return {@code false}. - */ - @Override - public boolean runInEditor() { - return false; - } - - @Override - public boolean processResource(IResource resource) { - process(resource); - return DO_NOT_TRAVERSE_CHILDREN; - } - - private void process(IResource resource) { - try { - InvocationParameters parameters = parametersProvider.createParameters(resource); - if (parameters != null) { - invokeExternalTool(parameters); - } - } catch (Throwable error) { - logResourceProcessingFailure(error, resource); - } - } - - private void invokeExternalTool(InvocationParameters parameters) throws Throwable { - updateConfigurationSettingsFromPreferences(parameters.getActualFile()); - List parsers = createParsers(parameters); - try { - externalToolInvoker.invoke(parameters, settings, argsSeparator, parsers); - } catch (InvocationFailure error) { - handleInvocationFailure(error, parameters); - } - } - - private void updateConfigurationSettingsFromPreferences(IResource fileToProcess) { - IProblem problem = getProblemById(getReferenceProblemId(), fileToProcess); - MapProblemPreference preferences = (MapProblemPreference) problem.getPreference(); - settings.updateValuesFrom(preferences); - } - - /** - * Creates instances of {@link AbstractOutputParser}. - * @param parameters the parameters to pass when invoking an external tool. - */ - protected abstract List createParsers(InvocationParameters parameters); - - /** - * Handles a failure reported when invoking the external tool. This implementation simply - * logs the failure. - * @param error the reported failure. - * @param parameters the parameters passed to the external tool executable. - */ - protected void handleInvocationFailure(InvocationFailure error, InvocationParameters parameters) { - logResourceProcessingFailure(error, parameters.getActualFile()); - } - - private void logResourceProcessingFailure(Throwable error, IResource resource) { - String location = resource.getLocation().toOSString(); - String msg = String.format("Unable to process resource %s", location); //$NON-NLS-1$ - CodanCorePlugin.log(msg, error); - } - - /** {@inheritDoc} */ - @Override - public void reportProblem(IProblemLocation location, String description) { - String severity = null; - reportProblem(location, description, severity); - } - - /** {@inheritDoc} */ - @Override - public void reportProblem(IProblemLocation location, String description, String severity) { - super.reportProblem(getReferenceProblemId(), location, description); - } - - /** - * Returns the id of the problem used as reference to obtain this checker's preferences. All - * preferences in a external-tool-based checker are shared among its defined problems. - * @return the id of the problem used as reference to obtain this checker's preferences. - */ - protected abstract String getReferenceProblemId(); - - /** - * Initializes the preferences of the given problem. All preferences in a external-tool-based - * checker are shared among its defined problems. - * @param problem the given problem. - */ - @Override - public void initPreferences(IProblemWorkingCopy problem) { - super.initPreferences(problem); - addPreference(problem, settings.getPath()); - addPreference(problem, settings.getArgs()); - addPreference(problem, settings.getShouldDisplayOutput()); - } - - private void addPreference(IProblemWorkingCopy problem, SingleConfigurationSetting setting) { - IProblemPreference descriptor = (IProblemPreference) setting.getDescriptor(); - addPreference(problem, descriptor, setting.getDefaultValue()); - } - - /** {@inheritDoc} */ - @Override - protected void setDefaultPreferenceValue(IProblemWorkingCopy problem, String key, - Object defaultValue) { - MapProblemPreference map = getTopLevelPreference(problem); - map.setChildValue(key, defaultValue); - } - - /** {@inheritDoc} */ - @Override - public RootProblemPreference getTopLevelPreference(IProblem problem) { - RootProblemPreference map = (RootProblemPreference) problem.getPreference(); - if (map == null) { - map = preferences; - if (problem instanceof IProblemWorkingCopy) { - ((IProblemWorkingCopy) problem).setPreference(map); - } - } - return map; - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractOutputParser.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractOutputParser.java deleted file mode 100644 index 66a29ca2e6b..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/AbstractOutputParser.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -/** - * Parses the output of an external tool. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public abstract class AbstractOutputParser { - /** - * Parses one line of output. Implementations are free to create markers from the information - * retrieved from the parsed output. - * @param line the line to parse. - * @return {@code true} if the line was successfully parsed; {@code false} otherwise. - * @throws InvocationFailure if the output indicates that the invocation of the external tool - * failed. - */ - public abstract boolean parse(String line) throws InvocationFailure; - - /** - * Resets the value of this parser, usually after the execution of the external tool is - * finished. - */ - public abstract void reset(); -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/ConfigurationSettings.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/ConfigurationSettings.java deleted file mode 100644 index 4cad52dfa8f..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/ConfigurationSettings.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.cdt.codan.core.param.MapProblemPreference; -import org.eclipse.cdt.codan.internal.core.externaltool.ArgsSetting; -import org.eclipse.cdt.codan.internal.core.externaltool.PathSetting; -import org.eclipse.cdt.codan.internal.core.externaltool.ConsoleOutputSetting; - -import java.io.File; - -/** - * User-configurable external tool settings. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public final class ConfigurationSettings { - private final PathSetting path; - private final ArgsSetting args; - private final ConsoleOutputSetting shouldDisplayOutput; - private final String externalToolName; - - /** - * Constructor. - * @param externalToolName the name of the external tool, to be displayed to the user. - * @param defaultPath the default path of the external tool. - * @param defaultArgs the default arguments to pass when invoking the external tool. - * @param defaultShouldDisplayOutput indicates whether output of an external tool should be - * displayed in an Eclipse console. - */ - public ConfigurationSettings(String externalToolName, File defaultPath, String defaultArgs, - boolean defaultShouldDisplayOutput) { - this.externalToolName = externalToolName; - this.path = new PathSetting(externalToolName, defaultPath); - this.args = new ArgsSetting(externalToolName, defaultArgs); - this.shouldDisplayOutput = new ConsoleOutputSetting(defaultShouldDisplayOutput); - } - - /** - * Returns the name of the external tool, to be displayed to the user. - * @return the name of the external tool, to be displayed to the user. - */ - public String getExternalToolName() { - return externalToolName; - } - - /** - * Returns the setting that specifies the path and name of the external tool to invoke. - * @return the setting that specifies the path and name of the external tool to invoke. - */ - public SingleConfigurationSetting getPath() { - return path; - } - - /** - * Returns the setting that specifies the arguments to pass when invoking the external tool. - * @return the setting that specifies the arguments to pass when invoking the external tool. - */ - public SingleConfigurationSetting getArgs() { - return args; - } - - /** - * Returns the setting that specifies whether the output of the external tools should be - * displayed in an Eclipse console. - * @return the shouldDisplayOutput the setting that specifies whether the output of the external - * tools should be displayed in an Eclipse console. - */ - public SingleConfigurationSetting getShouldDisplayOutput() { - return shouldDisplayOutput; - } - - /** - * Updates the values of the configuration settings value with the ones stored in the given - * preference map. - * @param preferences the given preference map that may contain the values to set. - * @throws ClassCastException if any of the values to set is not of the same type as the one - * supported by a setting. - */ - public void updateValuesFrom(MapProblemPreference preferences) { - path.updateValue(preferences); - args.updateValue(preferences); - shouldDisplayOutput.updateValue(preferences); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IArgsSeparator.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IArgsSeparator.java deleted file mode 100644 index 2b37d538bd7..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IArgsSeparator.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -/** - * Parses a given {@code String} containing the arguments to pass to an external tool and separates - * them into individual values. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public interface IArgsSeparator { - /** - * Parses a given {@code String} containing the arguments to pass to an external tool and - * separates them into individual values. - * @param args contains the arguments to pass to the external tool executable. - * @return the separated argument values. - */ - String[] separateArgs(String args); -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinter.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinter.java deleted file mode 100644 index e174be9279e..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinter.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -/** - * Prints the output of an external tool to an Eclipse console. It uses the name of the external - * tool as the console ID. - * - * @noimplement This interface is not intended to be implemented by clients. - * @noextend This interface is not intended to be extended by clients. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public interface IConsolePrinter { - /** - * Clears the contents of the console. - */ - public void clear(); - - /** - * Prints the specified message to the console, followed by a line separator string. - * @param message the message to print. - */ - public void println(String message); - - /** - * Prints a line separator to the console. - */ - public void println(); - - /** - * Closes the output stream of the console. - */ - public void close(); -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinterProvider.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinterProvider.java deleted file mode 100644 index 8c7e5375e97..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IConsolePrinterProvider.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -/** - * Creates or finds an Eclipse console that uses the name of an external tool as its own. - * - * @noimplement This interface is not intended to be implemented by clients. - * @noextend This interface is not intended to be extended by clients. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public interface IConsolePrinterProvider { - /** - * Creates an Eclipse console that uses the name of an external tool as its own. - * @param externalToolName the name of the external tool that will be used as the name of the - * console. - * @param shouldDisplayOutput indicates whether the user wants to see the output of the external - * tool in the console. - * @return the created or found console. - */ - public IConsolePrinter createConsole(String externalToolName, boolean shouldDisplayOutput); -} \ No newline at end of file diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IInvocationParametersProvider.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IInvocationParametersProvider.java deleted file mode 100644 index 8dce431db2d..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IInvocationParametersProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.core.resources.IResource; - -/** - * Provides the parameters to pass when invoking an external tool. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public interface IInvocationParametersProvider { - /** - * Creates the parameters to pass when invoking an external tool. - * @param fileToProcess the file to process. - * @return the created parameters. - * @throws Throwable if something goes wrong. - */ - InvocationParameters createParameters(IResource fileToProcess) throws Throwable; -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IProblemDisplay.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IProblemDisplay.java deleted file mode 100644 index 60176209b17..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/IProblemDisplay.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.cdt.codan.core.model.IProblemLocation; - -/** - * Reports problems found in code, reported by an external tool. - * - * @noimplement This interface is not intended to be implemented by clients. - * @noextend This interface is not intended to be extended by clients. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public interface IProblemDisplay { - /** - * Reports a problem found by an external tool. - * @param location the problem's location (e.g. file and line number.) - * @param description the description of the problem. - */ - public void reportProblem(IProblemLocation location, String description); - - /** - * Reports a problem found by an external tool. - * @param location the problem's location (e.g. file and line number.) - * @param description the description of the problem. - * @param severity the problem's severity (e.g. "error", "warning", etc.) - */ - public void reportProblem(IProblemLocation location, String description, String severity); -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationFailure.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationFailure.java deleted file mode 100644 index ac2a3310d0e..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationFailure.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -/** - * Indicates that invocation of an external tool failed. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public class InvocationFailure extends Exception { - private static final long serialVersionUID = 6727101323050538885L; - - /** - * Constructor. - * @param message the detail message. - */ - public InvocationFailure(String message) { - super(message); - } - - /** - * Constructor. - * @param message the detail message. - * @param cause the cause (which is saved for later retrieval by - * the {@link #getCause()} method.) - */ - public InvocationFailure(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParameters.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParameters.java deleted file mode 100644 index b7a68abd81c..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParameters.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IPath; - -/** - * Parameters to pass when invoking an external tool. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public final class InvocationParameters { - private final IResource originalFile; - private final IResource actualFile; - private final String actualFilePath; - private final IPath workingDirectory; - - /** - * Constructor. - * @param originalFile the original file to process. - * @param actualFile the actual file to process. - * @param actualFilePath the path of {@code actual}, in a format that the external tool can - * understand. - * @param workingDirectory the directory where the external tool should be executed. - * @see #getOriginalFile() - * @see #getActualFile() - */ - public InvocationParameters(IResource originalFile, IResource actualFile, String actualFilePath, - IPath workingDirectory) { - this.originalFile = originalFile; - this.actualFile = actualFile; - this.actualFilePath = actualFilePath; - this.workingDirectory = workingDirectory; - } - - /** - * Returns the original file to process. This is the file that triggered execution of - * a command-line tool when saved. - * @return the original file to process. - */ - public IResource getOriginalFile() { - return originalFile; - } - - /** - * Returns the actual file to process. It may not be the same as - * {@link #getOriginalFile()}, depending on how the external tool works. - *

- * A good example is an external tool that can only process C++ source files but not header - * files. If the original file is a header file, the checker could potentially find - * a C++ file that includes such header and use it as the actual file to process. - *

- *

- * We still need to keep a reference to the actual file, in order to add markers to - * the editor in case of problems found. - *

- * @return the actual file to process. - */ - public IResource getActualFile() { - return actualFile; - } - - /** - * Returns the path of {@link #getActualFile()}, in a format the external tool can - * understand. - * @return the path of the actual file to process. - */ - public String getActualFilePath() { - return actualFilePath; - } - - /** - * Returns the directory where the external tool should be executed. - * @return the directory where the external tool should be executed. - */ - public IPath getWorkingDirectory() { - return workingDirectory; - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParametersProvider.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParametersProvider.java deleted file mode 100644 index b5593c0ac31..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/InvocationParametersProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.core.resources.IResource; - -/** - * Default implementation of {@link InvocationParameters} - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public class InvocationParametersProvider implements IInvocationParametersProvider { - /** - * Creates the parameters to pass when invoking an external tool. - *

- * In this implementation: - *

    - *
  • the actual file to process is the same as the original file
  • - *
  • the path of the actual file is its absolute path in the file system
  • - *
  • the working directory is {@code null}
  • - *
- * @param fileToProcess the file to process. - * @return the created parameters. - */ - @Override - public InvocationParameters createParameters(IResource fileToProcess) { - String path = fileToProcess.getLocation().toOSString(); - return new InvocationParameters(fileToProcess, fileToProcess, path, null); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SingleConfigurationSetting.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SingleConfigurationSetting.java deleted file mode 100644 index 0b04cf8a3fe..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SingleConfigurationSetting.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import org.eclipse.cdt.codan.core.param.IProblemPreference; -import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor; -import org.eclipse.cdt.codan.core.param.MapProblemPreference; - -/** - * Single external tool configuration setting. - * @param the type of the value this setting stores. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @noextend This class is not intended to be extended by clients. - * @since 2.1 - */ -public class SingleConfigurationSetting { - private final IProblemPreferenceDescriptor descriptor; - private final T defaultValue; - private final Class valueType; - - private T value; - - /** - * Constructor. - * @param descriptor meta-data that tells the UI how to display this setting. - * @param defaultValue the setting's default value. - * @param valueType the type of the value to store (used for safe casting.) - */ - public SingleConfigurationSetting(IProblemPreferenceDescriptor descriptor, T defaultValue, - Class valueType) { - this.descriptor = descriptor; - this.defaultValue = defaultValue; - this.valueType = valueType; - } - - /** - * Returns this setting's value. - * @return this setting's value. - */ - public T getValue() { - return value; - } - - /** - * Returns the meta-data that tells the UI how to display this setting. - * @return the meta-data that tells the UI how to display this setting. - */ - public IProblemPreferenceDescriptor getDescriptor() { - return descriptor; - } - - /** - * Returns this setting's default value. - * @return this setting's default value. - */ - public T getDefaultValue() { - return defaultValue; - } - - /** - * Updates this setting's value with the one stored in the given preference map. - * @param preferences the given preference map that may contain the value to set. - * @throws ClassCastException if the value to set is not of the same type as the one supported - * by this setting. - */ - public void updateValue(MapProblemPreference preferences) { - IProblemPreference childDescriptor = preferences.getChildDescriptor(descriptor.getKey()); - if (childDescriptor != null) { - value = valueType.cast(childDescriptor.getValue()); - } - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SpaceArgsSeparator.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SpaceArgsSeparator.java deleted file mode 100644 index eff95236fa3..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/externaltool/SpaceArgsSeparator.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.externaltool; - -import java.util.regex.Pattern; - -/** - * Default implementation of {@link IArgsSeparator} that uses an empty space as - * the delimiter to separate the arguments to pass to an external tool. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public final class SpaceArgsSeparator implements IArgsSeparator { - private static final String[] NO_ARGS = {}; - private static final Pattern EMPTY_SPACE_PATTERN = Pattern.compile("\\s+"); //$NON-NLS-1$ - - @Override - public String[] separateArgs(String args) { - if (args == null || args.isEmpty()) { - return NO_ARGS; - } - return EMPTY_SPACE_PATTERN.split(args); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/SharedRootProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/SharedRootProblemPreference.java deleted file mode 100644 index e9fd456f91c..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/SharedRootProblemPreference.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.core.param; - -/** - * Preferences that can be shared among several problems. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 2.1 - */ -public class SharedRootProblemPreference extends RootProblemPreference { - @Override - public Object clone() { - SharedRootProblemPreference map = (SharedRootProblemPreference) super.clone(); - // alruiz: sharing the internal hash is the only way I could make this work. - map.hash = hash; - return map; - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ArgsSetting.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ArgsSetting.java deleted file mode 100644 index 46347280855..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ArgsSetting.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import static org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType.TYPE_STRING; -import static org.eclipse.cdt.codan.internal.core.externaltool.Messages.ConfigurationSettings_args_format; - -import org.eclipse.cdt.codan.core.externaltool.SingleConfigurationSetting; -import org.eclipse.cdt.codan.core.param.BasicProblemPreference; -import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor; - -/** - * User-configurable setting that specifies the arguments to pass when invoking the external tool. - * The arguments are stored in a single {@code String}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class ArgsSetting extends SingleConfigurationSetting { - static final String KEY = "externalToolArgs"; //$NON-NLS-1$ - - /** - * Constructor. - * @param externalToolName the name of the external tool, to be displayed to the user. - * @param defaultValue the default value of the setting. - */ - public ArgsSetting(String externalToolName, String defaultValue) { - super(newPreferenceDescriptor(externalToolName), defaultValue, String.class); - } - - private static IProblemPreferenceDescriptor newPreferenceDescriptor(String externalToolName) { - String label = String.format(ConfigurationSettings_args_format, externalToolName); - return new BasicProblemPreference(KEY, label, TYPE_STRING); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ConsoleOutputSetting.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ConsoleOutputSetting.java deleted file mode 100644 index a51f671de38..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ConsoleOutputSetting.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import static org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType.TYPE_BOOLEAN; -import static org.eclipse.cdt.codan.internal.core.externaltool.Messages.ConfigurationSettings_should_display_output; - -import org.eclipse.cdt.codan.core.externaltool.SingleConfigurationSetting; -import org.eclipse.cdt.codan.core.param.BasicProblemPreference; -import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor; - -/** - * User-configurable setting that specifies whether the output of an external tool should be - * displayed in an Eclipse console. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class ConsoleOutputSetting extends SingleConfigurationSetting { - static final String KEY = "externalToolShouldDisplayOutput"; //$NON-NLS-1$ - - /** - * Constructor. - * @param defaultValue the default value of the setting. - */ - public ConsoleOutputSetting(boolean defaultValue) { - super(newPreferenceDescriptor(), defaultValue, Boolean.class); - } - - private static IProblemPreferenceDescriptor newPreferenceDescriptor() { - String label = ConfigurationSettings_should_display_output; - return new BasicProblemPreference(KEY, label, TYPE_BOOLEAN); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvoker.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvoker.java deleted file mode 100644 index e59426d69d5..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ExternalToolInvoker.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinter; -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinterProvider; -import org.eclipse.cdt.codan.core.externaltool.AbstractOutputParser; -import org.eclipse.cdt.codan.core.externaltool.ConfigurationSettings; -import org.eclipse.cdt.codan.core.externaltool.IArgsSeparator; -import org.eclipse.cdt.codan.core.externaltool.InvocationFailure; -import org.eclipse.cdt.codan.core.externaltool.InvocationParameters; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.List; - -/** - * Invokes an external tool to perform checks on a single file. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class ExternalToolInvoker { - private final IConsolePrinterProvider consolePrinterProvider; - private final ProcessInvoker processInvoker; - - /** - * Constructor. - * @param consolePrinterProvider creates an Eclipse console that uses the name of an external - * tool as its own. - */ - public ExternalToolInvoker(IConsolePrinterProvider consolePrinterProvider) { - this(consolePrinterProvider, new ProcessInvoker()); - } - - /** - * Constructor, for testing purposes only. - * @param consolePrinterProvider creates an Eclipse console that uses the name of an external - * tool as its own. - * @param processInvoker executes a command in a separate process. - */ - public ExternalToolInvoker(IConsolePrinterProvider consolePrinterProvider, - ProcessInvoker processInvoker) { - this.consolePrinterProvider = consolePrinterProvider; - this.processInvoker = processInvoker; - } - - /** - * Invokes an external tool. - * - * @param parameters the parameters to pass to the external tool executable. - * @param configurationSettings user-configurable settings. - * @param argsSeparator separates the arguments to pass to the external tool executable. These - * arguments are stored in a single {@code String}. - * @param parsers parse the output of the external tool. - * @throws InvocationFailure if the external tool reports that it cannot be executed. - * @throws Throwable if the external tool cannot be launched. - */ - public void invoke(InvocationParameters parameters, ConfigurationSettings configurationSettings, - IArgsSeparator argsSeparator, List parsers) - throws InvocationFailure, Throwable { - IPath executablePath = executablePath(configurationSettings); - String[] args = argsToPass(parameters, configurationSettings, argsSeparator); - boolean shouldDisplayOutput = configurationSettings.getShouldDisplayOutput().getValue(); - try { - buildAndLaunchCommand(configurationSettings.getExternalToolName(), executablePath, args, - parameters.getWorkingDirectory(), shouldDisplayOutput, parsers); - } finally { - reset(parsers); - } - } - - private IPath executablePath(ConfigurationSettings configurationSettings) { - File executablePath = configurationSettings.getPath().getValue(); - return new Path(executablePath.toString()); - } - - private String[] argsToPass(InvocationParameters parameters, - ConfigurationSettings configurationSettings, IArgsSeparator argsSeparator) { - String actualFilePath = parameters.getActualFilePath(); - String[] args = configuredArgs(configurationSettings, argsSeparator); - return addFilePathToArgs(actualFilePath, args); - } - - private String[] configuredArgs(ConfigurationSettings configurationSettings, - IArgsSeparator argsSeparator) { - String args = configurationSettings.getArgs().getValue(); - return argsSeparator.separateArgs(args); - } - - private String[] addFilePathToArgs(String actualFilePath, String[] configuredArgs) { - int argCount = configuredArgs.length; - String[] allArgs = new String[argCount + 1]; - // alruiz: Arrays.copyOf leaves empty cells at the end. We need an empty cell at the - // beginning of the array. - System.arraycopy(configuredArgs, 0, allArgs, 1, argCount); - // add file to process as the first argument - allArgs[0] = actualFilePath; - return allArgs; - } - - private void buildAndLaunchCommand(String externalToolName, IPath executablePath, String[] args, - IPath workingDirectory, boolean shouldDisplayOutput, List parsers) - throws InvocationFailure, Throwable { - String command = buildCommand(executablePath, args); - Process process = null; - IConsolePrinter console = - consolePrinterProvider.createConsole(externalToolName, shouldDisplayOutput); - try { - console.clear(); - console.println(command); - console.println(); - process = processInvoker.invoke(command, workingDirectory); - processStream(process.getInputStream(), parsers, console); - processStream(process.getErrorStream(), parsers, console); - } finally { - if (process != null) { - process.destroy(); - } - console.close(); - } - } - - private String buildCommand(IPath executablePath, String[] args) { - StringBuilder builder = new StringBuilder(); - builder.append(executablePath.toOSString()); - for (String arg : args) { - builder.append(" ").append(arg); //$NON-NLS-1$ - } - return builder.toString(); - } - - private void processStream(InputStream inputStream, List parsers, - IConsolePrinter console) throws IOException, InvocationFailure { - Reader reader = null; - try { - reader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(reader); - String line = null; - while ((line = bufferedReader.readLine()) != null) { - console.println(line); - for (AbstractOutputParser parser : parsers) { - if (parser.parse(line)) { - break; - } - } - } - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ignored) { - } - } - } - } - - private void reset(List parsers) { - for (AbstractOutputParser parser : parsers) { - parser.reset(); - } - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.java deleted file mode 100644 index d2c66896b64..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import org.eclipse.osgi.util.NLS; - -/** - * @author alruiz@google.com (Alex Ruiz) - */ -public class Messages extends NLS { - public static String ConfigurationSettings_args_format; - public static String ConfigurationSettings_path_format; - public static String ConfigurationSettings_should_display_output; - - static { - NLS.initializeMessages(Messages.class.getName(), Messages.class); - } - - private Messages() { - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.properties b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.properties deleted file mode 100644 index 577aec794fd..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/Messages.properties +++ /dev/null @@ -1,13 +0,0 @@ -############################################################################### -# Copyright (c) 2012 Google, Inc and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# Alex Ruiz (Google) - initial API and implementation -############################################################################### -ConfigurationSettings_args_format=%s Args: -ConfigurationSettings_path_format=%s Path: -ConfigurationSettings_should_display_output=Display Output in Console diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/PathSetting.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/PathSetting.java deleted file mode 100644 index 1f48ff31183..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/PathSetting.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import static org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType.TYPE_FILE; -import static org.eclipse.cdt.codan.internal.core.externaltool.Messages.ConfigurationSettings_path_format; - -import org.eclipse.cdt.codan.core.externaltool.SingleConfigurationSetting; -import org.eclipse.cdt.codan.core.param.BasicProblemPreference; -import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor; - -import java.io.File; - -/** - * User-configurable setting that specifies the path and name of an external tool's executable. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class PathSetting extends SingleConfigurationSetting { - static final String KEY = "externalToolPath"; //$NON-NLS-1$ - - /** - * Constructor. - * @param externalToolName the name of the external tool, to be displayed to the user. - * @param defaultValue the default value of the setting. - */ - public PathSetting(String externalToolName, File defaultValue) { - super(newPreferenceDescriptor(externalToolName), defaultValue, File.class); - } - - private static IProblemPreferenceDescriptor newPreferenceDescriptor(String externalToolName) { - String label = String.format(ConfigurationSettings_path_format, externalToolName); - return new BasicProblemPreference(KEY, label, TYPE_FILE); - } -} diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ProcessInvoker.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ProcessInvoker.java deleted file mode 100644 index 77e5be0bc9c..00000000000 --- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/externaltool/ProcessInvoker.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.core.externaltool; - -import org.eclipse.cdt.codan.core.externaltool.InvocationFailure; -import org.eclipse.core.runtime.IPath; - -import java.io.IOException; - -/** - * Executes a command in a separate process. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class ProcessInvoker { - private static final String[] ENVIRONMENT_VARIABLE_SETTINGS = {}; - private static final String ERROR_FORMAT = "Unable to invoke command '%s'"; //$NON-NLS-1$ - - /** - * Invokes the given command in a separate process. - * @param command the command to execute. - * @param workingDirectory the working directory of the process, or {@code null} should inherit - * the working directory of the current process. - * @return the process where the given command is being executed. - * @throws InvocationFailure if the command fails to be executed. - */ - public Process invoke(String command, IPath workingDirectory) throws InvocationFailure { - try { - Runtime runtime = Runtime.getRuntime(); - if (workingDirectory == null) { - return runtime.exec(command); - } - return runtime.exec(command, ENVIRONMENT_VARIABLE_SETTINGS, workingDirectory.toFile()); - } catch (IOException e) { - throw new InvocationFailure(String.format(ERROR_FORMAT, command), e); - } - } -} diff --git a/codan/org.eclipse.cdt.codan.ui.cxx/META-INF/MANIFEST.MF b/codan/org.eclipse.cdt.codan.ui.cxx/META-INF/MANIFEST.MF index 80bc1e757d1..abedd163a05 100644 --- a/codan/org.eclipse.cdt.codan.ui.cxx/META-INF/MANIFEST.MF +++ b/codan/org.eclipse.cdt.codan.ui.cxx/META-INF/MANIFEST.MF @@ -19,5 +19,4 @@ Require-Bundle: org.eclipse.ui, Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.cdt.codan.internal.ui.cxx;x-internal:=true, - org.eclipse.cdt.codan.ui, - org.eclipse.cdt.codan.ui.cxx.externaltool + org.eclipse.cdt.codan.ui diff --git a/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/externaltool/AbstractCxxExternalToolBasedChecker.java b/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/externaltool/AbstractCxxExternalToolBasedChecker.java deleted file mode 100644 index ea4df5f20d9..00000000000 --- a/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/externaltool/AbstractCxxExternalToolBasedChecker.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.ui.cxx.externaltool; - -import org.eclipse.cdt.codan.core.cxx.util.FileTypes; -import org.eclipse.cdt.codan.core.externaltool.AbstractExternalToolBasedChecker; -import org.eclipse.cdt.codan.core.externaltool.ConfigurationSettings; -import org.eclipse.cdt.codan.core.externaltool.IArgsSeparator; -import org.eclipse.cdt.codan.core.externaltool.IInvocationParametersProvider; -import org.eclipse.cdt.codan.core.externaltool.InvocationParametersProvider; -import org.eclipse.cdt.codan.core.externaltool.SpaceArgsSeparator; -import org.eclipse.cdt.codan.internal.ui.externaltool.ConsolePrinterProvider; -import org.eclipse.cdt.codan.ui.CodanEditorUtility; -import org.eclipse.cdt.codan.ui.cxx.util.CEditors; -import org.eclipse.core.resources.IResource; -import org.eclipse.ui.editors.text.TextEditor; - -/** - * Base class for checkers that invoke external command-line tools to perform code checking - * on C++ files. - *

- * A file, to be processed by this type of checker, must: - *

    - *
  1. a C++ file
  2. - *
  3. be in the current active editor
  4. - *
  5. not have any unsaved changes
  6. - *
- *

- * By default, implementations of this checker are not allowed to run while the user types, since - * external tools cannot see unsaved changes. - * - * @author alruiz@google.com (Alex Ruiz) - * - * @since 3.0 - */ -public abstract class AbstractCxxExternalToolBasedChecker extends AbstractExternalToolBasedChecker { - /** - * Constructor - * @param configurationSettings user-configurable external tool configuration settings. - */ - public AbstractCxxExternalToolBasedChecker(ConfigurationSettings configurationSettings) { - this(new InvocationParametersProvider(), new SpaceArgsSeparator(), configurationSettings); - } - - /** - * Constructor. - * @param parametersProvider provides the parameters to pass when invoking the external tool. - * @param argsSeparator separates the arguments to pass to the external tool executable. These - * arguments are stored in a single {@code String}. - * @param configurationSettings user-configurable external tool configuration settings. - */ - public AbstractCxxExternalToolBasedChecker(IInvocationParametersProvider parametersProvider, - IArgsSeparator argsSeparator, ConfigurationSettings configurationSettings) { - super(parametersProvider, argsSeparator, new ConsolePrinterProvider(), - configurationSettings); - } - - /** - * Indicates whether the external tool is capable of processing the given - * {@link IResource}. - *

- * The minimum requirements that the given {@code IResource} should satisfy are: - *

    - *
  • should be C/C++ file
  • - *
  • should be displayed in the current active {@code CEditor}
  • - *
  • should not have any unsaved changes
  • - *
- *

- * @param resource the given {@code IResource}. - * @return {@code true} if the external tool is capable of processing the given file, - * {@code false} otherwise. - */ - @Override - public boolean enabledInContext(IResource resource) { - return isFileOfSupportedType(resource) && isOpenInActiveCleanEditor(resource); - } - - private boolean isFileOfSupportedType(IResource resource) { - return FileTypes.isCppFile(resource) || FileTypes.isHeaderFile(resource); - } - - private boolean isOpenInActiveCleanEditor(IResource resource) { - TextEditor editor = CEditors.activeCEditor(); - if (editor == null) { - return false; - } - return !editor.isDirty() && CodanEditorUtility.isResourceOpenInEditor(resource, editor); - } -} diff --git a/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/util/CEditors.java b/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/util/CEditors.java deleted file mode 100644 index 39c4a216b49..00000000000 --- a/codan/org.eclipse.cdt.codan.ui.cxx/src/org/eclipse/cdt/codan/ui/cxx/util/CEditors.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.ui.cxx.util; - -import org.eclipse.cdt.internal.ui.editor.CEditor; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.editors.text.TextEditor; - -/** - * Utility methods related to {@link CEditor}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -@SuppressWarnings("restriction") // CEditor is internal API -public final class CEditors { - /** - * Finds the current {@code CEditor}. - * @return the current {@code CEditor}, or {@code null} if one cannot be found. - */ - public static TextEditor activeCEditor() { - IWorkbench workbench = PlatformUI.getWorkbench(); - for (IWorkbenchWindow w : workbench.getWorkbenchWindows()) { - IWorkbenchPage activePage = w.getActivePage(); - IEditorPart editor = activePage.getActiveEditor(); - if (editor instanceof CEditor) { - return (CEditor) editor; - } - } - return null; - } - - private CEditors() {} -} diff --git a/codan/org.eclipse.cdt.codan.ui/META-INF/MANIFEST.MF b/codan/org.eclipse.cdt.codan.ui/META-INF/MANIFEST.MF index 0a60ee43bb9..9517be08f76 100644 --- a/codan/org.eclipse.cdt.codan.ui/META-INF/MANIFEST.MF +++ b/codan/org.eclipse.cdt.codan.ui/META-INF/MANIFEST.MF @@ -20,7 +20,6 @@ Bundle-ActivationPolicy: lazy Export-Package: org.eclipse.cdt.codan.internal.ui;x-friends:="org.eclipse.cdt.codan.ui.cxx", org.eclipse.cdt.codan.internal.ui.actions;x-friends:="org.eclipse.cdt.codan.ui.cxx", org.eclipse.cdt.codan.internal.ui.dialogs;x-friends:="org.eclipse.cdt.codan.ui.cxx", - org.eclipse.cdt.codan.internal.ui.externaltool;x-friends:="org.eclipse.cdt.codan.ui.cxx", org.eclipse.cdt.codan.internal.ui.preferences;x-friends:="org.eclipse.cdt.codan.ui.cxx", org.eclipse.cdt.codan.internal.ui.views;x-internal:=true, org.eclipse.cdt.codan.internal.ui.widgets;x-internal:=true, diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinter.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinter.java deleted file mode 100644 index f7f22185933..00000000000 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinter.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.ui.externaltool; - -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinter; -import org.eclipse.ui.console.MessageConsole; -import org.eclipse.ui.console.MessageConsoleStream; - -import java.io.IOException; - -/** - * Default implementation of {@link IConsolePrinter}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -class ConsolePrinter implements IConsolePrinter { - private final MessageConsole console; - private final MessageConsoleStream out; - - ConsolePrinter(MessageConsole console) { - this.console = console; - out = console.newMessageStream(); - } - - @Override - public void clear() { - console.clearConsole(); - } - - @Override - public void println(String s) { - out.println(s); - } - - @Override - public void println() { - out.println(); - } - - @Override - public void close() { - try { - out.close(); - } catch (IOException ignored) {} - } -} diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinterProvider.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinterProvider.java deleted file mode 100644 index 14e6b763b6b..00000000000 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/ConsolePrinterProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.ui.externaltool; - -import static org.eclipse.ui.console.IConsoleConstants.ID_CONSOLE_VIEW; - -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinter; -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinterProvider; -import org.eclipse.cdt.codan.internal.ui.CodanUIActivator; -import org.eclipse.cdt.codan.ui.CodanEditorUtility; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IConsole; -import org.eclipse.ui.console.IConsoleManager; -import org.eclipse.ui.console.IConsoleView; -import org.eclipse.ui.console.MessageConsole; - -/** - * Default implementation of {@link IConsolePrinterProvider}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -public class ConsolePrinterProvider implements IConsolePrinterProvider { - private static final NullConsolePrinter NULL_CONSOLE = new NullConsolePrinter(); - - @Override - public IConsolePrinter createConsole(String externalToolName, boolean shouldDisplayOutput) { - if (shouldDisplayOutput) { - try { - return createOrFindConsole(externalToolName); - } catch (Throwable e) { - CodanUIActivator.log("Unable to create/find console", e); //$NON-NLS-1$ - } - } - return NULL_CONSOLE; - } - - private IConsolePrinter createOrFindConsole(String externalToolName) throws PartInitException { - MessageConsole console = findConsole(externalToolName); - IWorkbenchPage page = CodanEditorUtility.getActivePage(); - if (page != null) { - IConsoleView view = (IConsoleView) page.showView(ID_CONSOLE_VIEW); - view.display(console); - } - return new ConsolePrinter(console); - } - - private static MessageConsole findConsole(String externalToolName) { - IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager(); - for (IConsole console : consoleManager.getConsoles()) { - if (externalToolName.equals(console.getName()) && console instanceof MessageConsole) { - return (MessageConsole) console; - } - } - MessageConsole console = new MessageConsole(externalToolName, null); - consoleManager.addConsoles(new IConsole[] { console }); - return console; - } -} diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/NullConsolePrinter.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/NullConsolePrinter.java deleted file mode 100644 index bab9f02959d..00000000000 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/externaltool/NullConsolePrinter.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Google, Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Alex Ruiz (Google) - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.codan.internal.ui.externaltool; - -import org.eclipse.cdt.codan.core.externaltool.IConsolePrinter; - -/** - * No-op implementation of {@link IConsolePrinter}. - * - * @author alruiz@google.com (Alex Ruiz) - */ -class NullConsolePrinter implements IConsolePrinter { - @Override - public void clear() { - } - - @Override - public void println(String message) { - } - - @Override - public void println() { - } - - @Override - public void close() { - } -}