001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.plugins.cpd;
021
022 import org.sonar.api.*;
023 import org.sonar.api.PropertyType;
024 import org.sonar.plugins.cpd.decorators.DuplicationDensityDecorator;
025 import org.sonar.plugins.cpd.decorators.SumDuplicationsDecorator;
026 import org.sonar.plugins.cpd.index.IndexFactory;
027
028 import java.util.Arrays;
029 import java.util.List;
030
031 @Properties({
032 @Property(
033 key = CoreProperties.CPD_ENGINE,
034 defaultValue = CoreProperties.CPD_ENGINE_DEFAULT_VALUE,
035 name = "Copy&Paste detection engine",
036 description = "Sonar embeds its own CPD engine since Sonar 2.11, but it's still possible to use the old PMD CPD engine (value 'pmd')." +
037 " Some Sonar users might want to keep on working with PMD CPD engine for instance to prevent any impact on measures during an upgrade of Sonar." +
038 " Moreover this Sonar CPD engine is not supported by all Sonar language plugins and when this support is not available," +
039 " the PMD CPD engine is automatically selected.",
040 project = true,
041 module = true,
042 global = true,
043 category = CoreProperties.CATEGORY_DUPLICATIONS,
044 type = PropertyType.SINGLE_SELECT_LIST,
045 options = {"sonar", "pmd"}),
046 @Property(
047 key = CoreProperties.CPD_CROSS_RPOJECT,
048 defaultValue = CoreProperties.CPD_CROSS_RPOJECT_DEFAULT_VALUE + "",
049 name = "Cross project duplicaton detection",
050 description = "Sonar supports the detection of cross project duplications." +
051 " Activating this property will slightly increase each Sonar analysis time." +
052 " This mode can't be used along with the PMD CPD engine.",
053 project = true,
054 module = true,
055 global = true,
056 category = CoreProperties.CATEGORY_DUPLICATIONS,
057 type = PropertyType.BOOLEAN),
058 @Property(
059 key = CoreProperties.CPD_MINIMUM_TOKENS_PROPERTY,
060 defaultValue = CoreProperties.CPD_MINIMUM_TOKENS_DEFAULT_VALUE + "",
061 name = "Minimum tokens",
062 description = "Deprecated property used only by the PMD CPD engine." +
063 " The number of duplicate tokens above which a block is considered as a duplication.",
064 project = true,
065 module = true,
066 global = true,
067 category = CoreProperties.CATEGORY_DUPLICATIONS,
068 type = PropertyType.INTEGER),
069 @Property(
070 key = CoreProperties.CPD_IGNORE_LITERALS_PROPERTY,
071 defaultValue = CoreProperties.CPD_IGNORE_LITERALS_DEFAULT_VALUE + "",
072 name = "Ignore literals",
073 description = "Deprecated property used only by the PMD CPD engine." +
074 " If true, PMD-CPD ignores literal value differences when evaluating a duplicate block." +
075 " This means that foo=\"first string\"; and foo=\"second string\"; will be seen as equivalent.",
076 project = true,
077 module = true,
078 global = true,
079 category = CoreProperties.CATEGORY_DUPLICATIONS,
080 type = PropertyType.BOOLEAN),
081 @Property(
082 key = CoreProperties.CPD_IGNORE_IDENTIFIERS_PROPERTY,
083 defaultValue = CoreProperties.CPD_IGNORE_IDENTIFIERS_DEFAULT_VALUE + "",
084 name = "Ignore identifiers",
085 description = "Deprecated property used only by the PMD CPD engine." +
086 " Similar to 'Ignore literals' but for identifiers; i.e., variable names, methods names, and so forth.",
087 project = true,
088 module = true,
089 global = true,
090 category = CoreProperties.CATEGORY_DUPLICATIONS,
091 type = PropertyType.BOOLEAN)
092 })
093 public final class CpdPlugin extends SonarPlugin {
094
095 public List getExtensions() {
096 return Arrays.asList(CpdSensor.class, SumDuplicationsDecorator.class, DuplicationDensityDecorator.class,
097 IndexFactory.class,
098 SonarEngine.class,
099 PmdEngine.class,
100 SonarBridgeEngine.class);
101 }
102
103 }