/*
* Sonar PHP Plugin
* Copyright (C) 2010 Sonar PHP Plugin
* dev@sonar.codehaus.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.php.core;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_ANALYZE_ONLY_DESCRIPTION;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_ANALYZE_ONLY_KEY;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_ANALYZE_ONLY_MESSAGE;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_DEFAULT_ANALYZE_ONLY;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_DEFAULT_STANDARD_ARGUMENT;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_SKIP_KEY;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_STANDARD_DESCRIPTION;
import static org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration.PHPCS_STANDARD_MESSAGE;
import static org.sonar.plugins.php.core.PhpPlugin.DEFAULT_SUFFIXES;
import static org.sonar.plugins.php.core.PhpPlugin.FILE_SUFFIXES_KEY;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PDEPEND_EXECUTE_DESCRIPTION;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PDEPEND_EXECUTE_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCPD_EXECUTE_DESCRIPTION;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCPD_EXECUTE_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCPD_MIN_LINES_DESCRIPTION;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCPD_MIN_LINES_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCPD_MIN_TOKENS_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCS_EXECUTE_DESCRIPTION;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPCS_EXECUTE_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPUNIT_COVERAGE_EXECUTE_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHPUNIT_EXECUTE_MESSAGE;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHP_FILE_SUFFIXES_DESCRIPTION;
import static org.sonar.plugins.php.core.PhpPluginConfiguration.PHP_FILE_SUFFIXES_MESSAGE;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_ANALYZE_ONLY_DESCRIPTION;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_ANALYZE_ONLY_KEY;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_ANALYZE_ONLY_MESSAGE;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_DEFAULT_ANALYZE_ONLY;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_DEFAULT_MINIMUM_NUMBER_OF_IDENTICAL_LINES;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_DEFAULT_MINIMUM_NUMBER_OF_IDENTICAL_TOKENS;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_DEFAULT_SHOULD_RUN;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_MINIMUM_NUMBER_OF_IDENTICAL_LINES_KEY;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_MINIMUM_NUMBER_OF_IDENTICAL_TOKENS_KEY;
import static org.sonar.plugins.php.cpd.PhpCpdConfiguration.PHPCPD_SHOULD_RUN_PROPERTY_KEY;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_ANALYZE_ONLY_DESCRIPTION;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_ANALYZE_ONLY_MESSAGE;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_ANALYZE_ONLY_PROPERTY_KEY;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_DEFAULT_ANALYZE_ONLY;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_DEFAULT_SHOULD_RUN;
import static org.sonar.plugins.php.phpdepend.PhpDependConfiguration.PDEPEND_SHOULD_RUN_PROPERTY_KEY;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_ANALYZE_ONLY_DESCRIPTION;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_ANALYZE_ONLY_PROPERTY_KEY;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_DEFAULT_ANALYZE_ONLY;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_DEFAULT_MAIN_TEST_FILE;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_DEFAULT_SHOULD_RUN;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_DEFAULT_SHOULD_RUN_COVERAGE;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_MAIN_TEST_FILE_DESCRIPTION;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_MAIN_TEST_FILE_MESSAGE;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_MAIN_TEST_FILE_PROPERTY_KEY;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_SHOULD_RUN_COVERAGE_PROPERTY_KEY;
import static org.sonar.plugins.php.phpunit.PhpUnitConfiguration.PHPUNIT_SHOULD_RUN_PROPERTY_KEY;
import static org.sonar.plugins.php.pmd.PhpmdConfiguration.PHPMD_DEFAULT_SHOULD_RUN;
import static org.sonar.plugins.php.pmd.PhpmdConfiguration.PHPMD_SHOULD_RUN_DESCRIPTION;
import static org.sonar.plugins.php.pmd.PhpmdConfiguration.PHPMD_SHOULD_RUN_KEY;
import static org.sonar.plugins.php.pmd.PhpmdConfiguration.PHPMD_SHOULD_RUN_MESSAGE;
import java.util.ArrayList;
import java.util.List;
import org.sonar.api.Extension;
import org.sonar.api.Properties;
import org.sonar.api.Property;
import org.sonar.api.SonarPlugin;
import org.sonar.plugins.php.api.Php;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferConfiguration;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferExecutor;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferPriorityMapper;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferProfile;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferProfileExporter;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferProfileImporter;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferRuleRepository;
import org.sonar.plugins.php.codesniffer.PhpCodeSnifferViolationsXmlParser;
import org.sonar.plugins.php.codesniffer.PhpCodesnifferSensor;
import org.sonar.plugins.php.cpd.PhpCpdConfiguration;
import org.sonar.plugins.php.cpd.PhpCpdExecutor;
import org.sonar.plugins.php.cpd.PhpCpdResultParser;
import org.sonar.plugins.php.cpd.PhpCpdSensor;
import org.sonar.plugins.php.phpdepend.PhpDependConfiguration;
import org.sonar.plugins.php.phpdepend.PhpDependExecutor;
import org.sonar.plugins.php.phpdepend.PhpDependResultsParser;
import org.sonar.plugins.php.phpdepend.PhpDependSensor;
import org.sonar.plugins.php.phpunit.PhpUnitConfiguration;
import org.sonar.plugins.php.phpunit.PhpUnitCoverageResultParser;
import org.sonar.plugins.php.phpunit.PhpUnitExecutor;
import org.sonar.plugins.php.phpunit.PhpUnitResultParser;
import org.sonar.plugins.php.phpunit.PhpUnitSensor;
import org.sonar.plugins.php.pmd.PhpmdConfiguration;
import org.sonar.plugins.php.pmd.PhpmdExecutor;
import org.sonar.plugins.php.pmd.PhpmdProfile;
import org.sonar.plugins.php.pmd.PhpmdProfileExporter;
import org.sonar.plugins.php.pmd.PhpmdProfileImporter;
import org.sonar.plugins.php.pmd.PhpmdRuleRepository;
import org.sonar.plugins.php.pmd.PhpmdSensor;
import org.sonar.plugins.php.pmd.PmdRulePriorityMapper;
/**
* This class is the sonar entry point of this plugin. It declares all the extension that can be launched with this plugin
*/
@Properties({
// Global Php Configuration
@Property(key = FILE_SUFFIXES_KEY, defaultValue = DEFAULT_SUFFIXES, name = PHP_FILE_SUFFIXES_MESSAGE, project = true, global = true,
description = PHP_FILE_SUFFIXES_DESCRIPTION),
// Phpmd configuration: Disabling Phpmd is not a good idea cause almost all metrics rely on it.
@Property(key = PHPMD_SHOULD_RUN_KEY, defaultValue = PHPMD_DEFAULT_SHOULD_RUN, name = PHPMD_SHOULD_RUN_MESSAGE, project = true,
global = true, description = PHPMD_SHOULD_RUN_DESCRIPTION),
@Property(key = PhpmdConfiguration.PHPMD_ANALYZE_ONLY_KEY, defaultValue = PhpmdConfiguration.PHPMD_DEFAULT_ANALYZE_ONLY,
name = PhpmdConfiguration.PHPMD_ANALYZE_ONLY_MESSAGE, project = true, global = true,
description = PhpmdConfiguration.PHPMD_ANALYZE_ONLY_DESCRIPTION),
// PhpCodeSniffer configuration
@Property(key = PHPCS_SKIP_KEY, defaultValue = "false", name = PHPCS_EXECUTE_MESSAGE, project = true,
global = true, description = PHPCS_EXECUTE_DESCRIPTION),
@Property(key = PHPCS_ANALYZE_ONLY_KEY, defaultValue = PHPCS_DEFAULT_ANALYZE_ONLY, name = PHPCS_ANALYZE_ONLY_MESSAGE, project = true,
global = true, description = PHPCS_ANALYZE_ONLY_DESCRIPTION),
@Property(key = PhpCodeSnifferConfiguration.PHPCS_STANDARD_ARGUMENT_KEY, defaultValue = PHPCS_DEFAULT_STANDARD_ARGUMENT,
name = PHPCS_STANDARD_MESSAGE, project = true, global = true, description = PHPCS_STANDARD_DESCRIPTION),
// PhPdepend configuration
@Property(key = PDEPEND_SHOULD_RUN_PROPERTY_KEY, defaultValue = PDEPEND_DEFAULT_SHOULD_RUN, name = PDEPEND_EXECUTE_MESSAGE,
project = true, global = true, description = PDEPEND_EXECUTE_DESCRIPTION),
@Property(key = PDEPEND_ANALYZE_ONLY_PROPERTY_KEY, defaultValue = PDEPEND_DEFAULT_ANALYZE_ONLY, name = PDEPEND_ANALYZE_ONLY_MESSAGE,
project = true, global = true, description = PDEPEND_ANALYZE_ONLY_DESCRIPTION),
// Phpunit Configuration
@Property(key = PHPUNIT_SHOULD_RUN_PROPERTY_KEY, defaultValue = PHPUNIT_DEFAULT_SHOULD_RUN, name = PHPUNIT_EXECUTE_MESSAGE,
project = true, global = true, description = PHPUNIT_EXECUTE_MESSAGE),
@Property(key = PHPUNIT_SHOULD_RUN_COVERAGE_PROPERTY_KEY, defaultValue = PHPUNIT_DEFAULT_SHOULD_RUN_COVERAGE,
name = PHPUNIT_COVERAGE_EXECUTE_MESSAGE, project = true, global = true, description = PHPUNIT_COVERAGE_EXECUTE_MESSAGE),
@Property(key = PHPUNIT_ANALYZE_ONLY_PROPERTY_KEY, defaultValue = PHPUNIT_DEFAULT_ANALYZE_ONLY, name = PHPUNIT_ANALYZE_ONLY_DESCRIPTION,
project = true, global = true, description = PHPUNIT_COVERAGE_EXECUTE_MESSAGE),
@Property(key = PHPUNIT_MAIN_TEST_FILE_PROPERTY_KEY, defaultValue = PHPUNIT_DEFAULT_MAIN_TEST_FILE,
name = PHPUNIT_MAIN_TEST_FILE_MESSAGE, project = true, global = true, description = PHPUNIT_MAIN_TEST_FILE_DESCRIPTION),
// PhpCpd configuration
@Property(key = PHPCPD_SHOULD_RUN_PROPERTY_KEY, defaultValue = PHPCPD_DEFAULT_SHOULD_RUN, name = PHPCPD_EXECUTE_MESSAGE, project = true,
global = true, description = PHPCPD_EXECUTE_DESCRIPTION),
@Property(key = PHPCPD_ANALYZE_ONLY_KEY, defaultValue = PHPCPD_DEFAULT_ANALYZE_ONLY, name = PHPCPD_ANALYZE_ONLY_MESSAGE, project = true,
global = true, description = PHPCPD_ANALYZE_ONLY_DESCRIPTION),
@Property(key = PHPCPD_MINIMUM_NUMBER_OF_IDENTICAL_LINES_KEY, defaultValue = PHPCPD_DEFAULT_MINIMUM_NUMBER_OF_IDENTICAL_LINES,
name = PHPCPD_MIN_LINES_MESSAGE, project = true, global = true, description = PHPCPD_MIN_LINES_DESCRIPTION),
@Property(key = PHPCPD_MINIMUM_NUMBER_OF_IDENTICAL_TOKENS_KEY, defaultValue = PHPCPD_DEFAULT_MINIMUM_NUMBER_OF_IDENTICAL_TOKENS,
name = PHPCPD_MIN_TOKENS_MESSAGE, project = true, global = true, description = PHPCPD_MIN_TOKENS_MESSAGE) })
public class PhpPlugin extends SonarPlugin {
/** All the valid php files suffixes. */
public static final String DEFAULT_SUFFIXES = "php,php3,php4,php5,phtml,inc";
public static final String FILE_SUFFIXES_KEY = "sonar.php.file.suffixes";
/** The php plugin key. */
public static final String KEY = "PHP Language";
/** The PHPMD plugin KEY. */
public static final String PHPMD_PLUGIN_KEY = "PHPMD";
/** The CodeSniffer plugin KEY. */
public static final String CODESNIFFER_PLUGIN_KEY = "PHP_CodeSniffer";
public static final String PLUGIN_NAME = "PHP";
/**
* Gets the extensions.
*
* @return the extensions
* @see org.sonar.api.Plugin#getExtensions()
*/
public List<Class<? extends Extension>> getExtensions() {
List<Class<? extends Extension>> extensions = new ArrayList<Class<? extends Extension>>(); // Adds the language
extensions.add(Php.class);
// Source importer
extensions.add(PhpSourceImporter.class);
// Php Source Code Colorizer
extensions.add(PhpSourceCodeColorizer.class);
// PhpDepend
extensions.add(PhpDependExecutor.class);
extensions.add(PhpDependResultsParser.class);
extensions.add(PhpDependConfiguration.class);
extensions.add(PhpDependSensor.class);
// Phpmd
extensions.add(PhpmdSensor.class);
extensions.add(PhpmdRuleRepository.class);
extensions.add(PhpmdConfiguration.class);
extensions.add(PhpmdExecutor.class);
extensions.add(PhpmdProfile.class);
extensions.add(PmdRulePriorityMapper.class);
extensions.add(PhpmdProfileImporter.class);
extensions.add(PhpmdProfileExporter.class);
// Code sniffer
extensions.add(NoSonarAndCommentedOutLocSensor.class);
extensions.add(PhpCodeSnifferRuleRepository.class);
extensions.add(PhpCodeSnifferExecutor.class);
extensions.add(PhpCodeSnifferViolationsXmlParser.class);
extensions.add(PhpCodesnifferSensor.class);
extensions.add(PhpCodeSnifferProfile.class);
extensions.add(PhpCodeSnifferConfiguration.class);
extensions.add(PhpCodeSnifferPriorityMapper.class);
extensions.add(PhpCodeSnifferProfileExporter.class);
extensions.add(PhpCodeSnifferProfileImporter.class);
// PhpUnit
extensions.add(PhpUnitConfiguration.class);
extensions.add(PhpUnitSensor.class);
extensions.add(PhpUnitExecutor.class);
extensions.add(PhpUnitResultParser.class);
extensions.add(PhpUnitCoverageResultParser.class);
// Phpcpd
extensions.add(PhpCpdConfiguration.class);
extensions.add(PhpCpdExecutor.class);
extensions.add(PhpCpdResultParser.class);
extensions.add(PhpCpdSensor.class);
return extensions;
}
/**
* To string.
*
* @return the string
* @see java.lang.Object#toString()
*/
@Override
public final String toString() {
return getKey();
}
}