From bdee87ee4aa439e188604afd46d5c5b374599dbe Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Mon, 10 Feb 2014 15:12:30 +0100 Subject: SONAR-926 * Deprecated FileSystemFilter in favor of InputFileFilter * Return a fake language for Project::getLanguage to avoid some NPE in plugins * Try to remove use of deprecated InputFile attributes --- .../batch/DefaultFileLinesContextFactory.java | 13 +------- .../java/org/sonar/batch/DefaultSensorContext.java | 14 ++------- .../batch/index/DefaultResourcePersister.java | 17 +++++------ .../org/sonar/batch/phases/ProjectInitializer.java | 2 ++ .../batch/scan/filesystem/AttributeFilter.java | 4 +-- .../batch/scan/filesystem/ComponentIndexer.java | 9 ++++-- .../scan/filesystem/DeprecatedFileFilters.java | 4 +-- .../batch/scan/filesystem/ExclusionFilter.java | 4 +-- .../org/sonar/batch/scan/filesystem/FileIndex.java | 2 +- .../batch/scan/filesystem/FileQueryFilter.java | 4 +-- .../batch/scan/filesystem/InclusionFilter.java | 4 +-- .../batch/scan/filesystem/FileQueryFilterTest.java | 4 +-- .../main/java/org/sonar/api/resources/File.java | 3 +- .../main/java/org/sonar/api/resources/Project.java | 13 ++++++++ .../api/scan/filesystem/FileSystemFilter.java | 2 ++ .../sonar/api/scan/filesystem/InputFileFilter.java | 34 +++++++++++++++++++++ .../scan/filesystem/internal/InputFileFilter.java | 35 ---------------------- 17 files changed, 84 insertions(+), 84 deletions(-) create mode 100644 sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/InputFileFilter.java delete mode 100644 sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFileFilter.java diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java index 438c698abda..5d3b49e8e9f 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java +++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultFileLinesContextFactory.java @@ -23,11 +23,8 @@ import org.sonar.api.batch.SonarIndex; import org.sonar.api.measures.FileLinesContext; import org.sonar.api.measures.FileLinesContextFactory; import org.sonar.api.resources.File; -import org.sonar.api.resources.Java; -import org.sonar.api.resources.JavaFile; import org.sonar.api.resources.Resource; import org.sonar.api.scan.filesystem.InputFile; -import org.sonar.api.scan.filesystem.internal.DefaultInputFile; public class DefaultFileLinesContextFactory implements FileLinesContextFactory { @@ -46,15 +43,7 @@ public class DefaultFileLinesContextFactory implements FileLinesContextFactory { @Override public FileLinesContext createFor(InputFile inputFile) { - // FIXME remove that once DefaultFileLinesContext accept an InputFile - String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE); - boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE)); - Resource sonarFile; - if (Java.KEY.equals(languageKey)) { - sonarFile = JavaFile.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest); - } else { - sonarFile = File.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), null, unitTest); - } + File sonarFile = File.create(inputFile.path()); // Reload resource from index sonarFile = index.getResource(sonarFile); return new DefaultFileLinesContext(index, sonarFile); diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java index be1cedaaf91..26640dba5a3 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultSensorContext.java @@ -19,9 +19,6 @@ */ package org.sonar.batch; -import org.sonar.api.scan.filesystem.internal.DefaultInputFile; - -import org.sonar.api.scan.filesystem.InputFile; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,14 +30,13 @@ import org.sonar.api.measures.Measure; import org.sonar.api.measures.MeasuresFilter; import org.sonar.api.measures.Metric; import org.sonar.api.resources.File; -import org.sonar.api.resources.Java; -import org.sonar.api.resources.JavaFile; import org.sonar.api.resources.Languages; import org.sonar.api.resources.Project; import org.sonar.api.resources.ProjectLink; import org.sonar.api.resources.Resource; import org.sonar.api.resources.Scopes; import org.sonar.api.rules.Violation; +import org.sonar.api.scan.filesystem.InputFile; import org.sonar.api.utils.SonarException; import org.sonar.core.measure.MeasurementFilters; @@ -259,12 +255,6 @@ public class DefaultSensorContext implements SensorContext { } private Resource fromInputFile(InputFile inputFile) { - String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE); - boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE)); - if (Java.KEY.equals(languageKey)) { - return JavaFile.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest); - } else { - return File.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), languages.get(languageKey), unitTest); - } + return File.create(inputFile.path()); } } diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java index 61315db2d63..3397d3a05d8 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java +++ b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java @@ -25,9 +25,14 @@ import org.apache.commons.lang.StringUtils; import org.sonar.api.database.DatabaseSession; import org.sonar.api.database.model.ResourceModel; import org.sonar.api.database.model.Snapshot; -import org.sonar.api.resources.*; +import org.sonar.api.resources.File; +import org.sonar.api.resources.Library; +import org.sonar.api.resources.Project; +import org.sonar.api.resources.Qualifiers; +import org.sonar.api.resources.Resource; +import org.sonar.api.resources.ResourceUtils; +import org.sonar.api.resources.Scopes; import org.sonar.api.scan.filesystem.InputFile; -import org.sonar.api.scan.filesystem.internal.DefaultInputFile; import org.sonar.api.security.ResourcePermissions; import org.sonar.api.utils.SonarException; @@ -135,13 +140,7 @@ public final class DefaultResourcePersister implements ResourcePersister { } private Resource fromInputFile(InputFile inputFile) { - String languageKey = inputFile.attribute(InputFile.ATTRIBUTE_LANGUAGE); - boolean unitTest = InputFile.TYPE_TEST.equals(inputFile.attribute(InputFile.ATTRIBUTE_TYPE)); - if (Java.KEY.equals(languageKey)) { - return JavaFile.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), unitTest); - } else { - return File.create(inputFile.path(), inputFile.attribute(DefaultInputFile.ATTRIBUTE_SOURCE_RELATIVE_PATH), null, unitTest); - } + return File.create(inputFile.path()); } /** diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectInitializer.java b/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectInitializer.java index e4d76a7c899..5cca74cdd03 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectInitializer.java +++ b/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectInitializer.java @@ -54,6 +54,8 @@ public class ProjectInitializer implements BatchComponent { throw new SonarException("Language with key '" + languageKey + "' not found"); } project.setLanguage(language); + } else { + project.setLanguage(Project.NONE_LANGUAGE); } } } diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java index 1276c11168a..1e5e37cae09 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/AttributeFilter.java @@ -19,10 +19,10 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; +import org.sonar.api.scan.filesystem.InputFile; import com.google.common.annotations.VisibleForTesting; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; import java.util.Collection; diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java index 380f7ca026b..a0671818921 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java @@ -27,7 +27,12 @@ import org.sonar.api.BatchComponent; import org.sonar.api.CoreProperties; import org.sonar.api.batch.SonarIndex; import org.sonar.api.config.Settings; -import org.sonar.api.resources.*; +import org.sonar.api.resources.File; +import org.sonar.api.resources.Java; +import org.sonar.api.resources.JavaFile; +import org.sonar.api.resources.Languages; +import org.sonar.api.resources.Project; +import org.sonar.api.resources.Resource; import org.sonar.api.scan.filesystem.FileQuery; import org.sonar.api.scan.filesystem.InputFile; import org.sonar.api.scan.filesystem.internal.DefaultInputFile; @@ -120,7 +125,7 @@ public class ComponentIndexer implements BatchComponent { } else if (moduleLanguages.keys().size() > 1) { dto.setLanguage(StringUtils.join(moduleLanguages.keys(), ",")); } else { - dto.setLanguage("none"); + dto.setLanguage(Project.NONE_LANGUAGE.getKey()); } resourceDao.insertOrUpdate(dto); } diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java index 5ce26537016..146d309268e 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DeprecatedFileFilters.java @@ -19,10 +19,10 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.internal.DefaultInputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; +import org.sonar.api.scan.filesystem.internal.DefaultInputFile; import org.sonar.api.scan.filesystem.*; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; import java.io.File; diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java index 8ce2feff037..27ec3f53f7b 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilter.java @@ -19,9 +19,9 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; +import org.sonar.api.scan.filesystem.InputFile; class ExclusionFilter implements InputFileFilter { private final PathPattern pattern; diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndex.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndex.java index 1a0f0a9d08b..a6af93b1247 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndex.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndex.java @@ -33,11 +33,11 @@ import org.sonar.api.resources.JavaFile; import org.sonar.api.resources.Project; import org.sonar.api.scan.filesystem.InputDir; import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; import org.sonar.api.scan.filesystem.ModuleFileSystem; import org.sonar.api.scan.filesystem.PathResolver; import org.sonar.api.scan.filesystem.internal.DefaultInputDir; import org.sonar.api.scan.filesystem.internal.DefaultInputFile; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; import org.sonar.api.utils.PathUtils; import org.sonar.api.utils.SonarException; diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java index 38affb34c3e..e7e5a07396c 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileQueryFilter.java @@ -19,12 +19,12 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; +import org.sonar.api.scan.filesystem.InputFile; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import org.sonar.api.scan.filesystem.FileQuery; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; import org.sonar.batch.bootstrap.AnalysisMode; import java.util.Collection; diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java index c9fe825027c..38b56313cc4 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InclusionFilter.java @@ -19,9 +19,9 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; +import org.sonar.api.scan.filesystem.InputFile; class InclusionFilter implements InputFileFilter { private final PathPattern pattern; diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java index 791ec2f251b..443f7061f44 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileQueryFilterTest.java @@ -19,12 +19,12 @@ */ package org.sonar.batch.scan.filesystem; -import org.sonar.api.scan.filesystem.InputFile; +import org.sonar.api.scan.filesystem.InputFileFilter; +import org.sonar.api.scan.filesystem.InputFile; import org.junit.Before; import org.junit.Test; import org.sonar.api.scan.filesystem.FileQuery; -import org.sonar.api.scan.filesystem.internal.InputFileFilter; import org.sonar.batch.bootstrap.AnalysisMode; import static org.fest.assertions.Assertions.assertThat; import static org.mockito.Mockito.mock; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/File.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/File.java index 57c4f585c2c..f7445188f6c 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/File.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/File.java @@ -243,8 +243,9 @@ public class File extends Resource { * Create a File that is partially initialized. But that's enough to call for example * {@link SensorContext#saveMeasure(Resource, org.sonar.api.measures.Measure)} when resources are already indexed. * Internal use only. + * @since 4.2 */ - private static File create(String relativePathFromBasedir) { + public static File create(String relativePathFromBasedir) { File file = new File(); String normalizedPath = normalize(relativePathFromBasedir); file.setKey(normalizedPath); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java index e6287d1cf02..a4aaf28b342 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java @@ -40,6 +40,16 @@ import java.util.List; */ public class Project extends Resource implements Component { + /** + * Internal use + */ + public static final Language NONE_LANGUAGE = new AbstractLanguage("none", "None") { + @Override + public String[] getFileSuffixes() { + return null; + } + }; + private static final String MAVEN_KEY_FORMAT = "%s:%s"; private static final String BRANCH_KEY_FORMAT = "%s:%s"; @@ -239,6 +249,9 @@ public class Project extends Resource implements Component { return language; } + /** + * Internal use + */ public Project setLanguage(Language language) { this.language = language; return this; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java index 599b7db8595..2eacaf99bb4 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java @@ -31,7 +31,9 @@ import java.io.File; * * * @since 3.5 + * @deprecated since 4.2 use {@link InputFileFilter} */ +@Deprecated public interface FileSystemFilter extends BatchExtension { /** diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/InputFileFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/InputFileFilter.java new file mode 100644 index 00000000000..7c58519f9e9 --- /dev/null +++ b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/InputFileFilter.java @@ -0,0 +1,34 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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 02110-1301, USA. + */ +package org.sonar.api.scan.filesystem; + +import org.sonar.api.BatchExtension; + +/** + * Implement this extension to limit the set of files to be analyzed. Global file inclusion/exclusion patterns + * are already applied. + * + * @since 4.2 + */ +public interface InputFileFilter extends BatchExtension { + + boolean accept(InputFile inputFile); + +} diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFileFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFileFilter.java deleted file mode 100644 index d9c9adc8374..00000000000 --- a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/internal/InputFileFilter.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2013 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube 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. - * - * SonarQube 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 02110-1301, USA. - */ -package org.sonar.api.scan.filesystem.internal; - -import org.sonar.api.scan.filesystem.InputFile; - -import org.sonar.api.BatchExtension; - -/** - * TODO document lifecycle -> executed when initializing project - * - * @since 4.0 - */ -public interface InputFileFilter extends BatchExtension { - - boolean accept(InputFile inputFile); - -} -- cgit v1.2.3