Browse Source

SONAR-6746 Drop Plugin interface + batch cleanup

tags/5.2-RC1
Julien HENRY 9 years ago
parent
commit
70c24eb376
31 changed files with 68 additions and 446 deletions
  1. 6
    7
      server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java
  2. 5
    7
      server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java
  3. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java
  4. 4
    4
      server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
  5. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
  6. BIN
      server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar
  7. BIN
      server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar
  8. BIN
      server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar
  9. 0
    38
      sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java
  10. 3
    6
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
  11. 7
    8
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java
  12. 2
    4
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java
  13. 3
    10
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
  14. 3
    4
      sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java
  15. 0
    24
      sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java
  16. 0
    23
      sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java
  17. 0
    49
      sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java
  18. 0
    28
      sonar-batch/src/main/java/org/sonar/batch/index/Data.java
  19. 0
    34
      sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java
  20. 0
    40
      sonar-batch/src/main/java/org/sonar/batch/index/StringData.java
  21. 6
    7
      sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java
  22. 0
    2
      sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
  23. 3
    3
      sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java
  24. 3
    5
      sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java
  25. 0
    47
      sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java
  26. 2
    2
      sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java
  27. 7
    7
      sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java
  28. 2
    2
      sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java
  29. 1
    2
      sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java
  30. 0
    64
      sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java
  31. 7
    15
      sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java

+ 6
- 7
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java View File

@@ -22,18 +22,17 @@ package org.sonar.server.debt;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
import org.picocontainer.Startable;
import org.sonar.api.Plugin;
import org.sonar.api.server.ServerSide;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;

import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import org.picocontainer.Startable;
import org.sonar.api.SonarPlugin;
import org.sonar.api.server.ServerSide;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;

import static com.google.common.collect.Lists.newArrayList;

@@ -90,7 +89,7 @@ public class DebtModelPluginRepository implements Startable {
contributingPluginKeyToClassLoader.put(DEFAULT_MODEL, getClass().getClassLoader());
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
String pluginKey = pluginInfo.getKey();
Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
ClassLoader classLoader = plugin.getClass().getClassLoader();
if (classLoader.getResource(getXMLFilePath(pluginKey)) != null) {
contributingPluginKeyToClassLoader.put(pluginKey, classLoader);

+ 5
- 7
server/sonar-server/src/main/java/org/sonar/server/platform/RailsAppsDeployer.java View File

@@ -21,21 +21,19 @@ package org.sonar.server.platform;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.platform.ServerFileSystem;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;

import javax.annotation.Nullable;

import java.io.File;
import java.io.IOException;

/**
* Ruby on Rails requires the files to be on filesystem but not in Java classpath (JAR). This component extracts
* all the needed files from plugins and copy them to $SONAR_HOME/temp
@@ -62,7 +60,7 @@ public class RailsAppsDeployer implements Startable {

for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
String pluginKey = pluginInfo.getKey();
Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
try {
deployRailsApp(appsDir, pluginKey, plugin.getClass().getClassLoader());
} catch (Exception e) {

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java View File

@@ -24,7 +24,7 @@ import com.google.common.collect.ListMultimap;
import java.util.Map;
import org.sonar.api.Extension;
import org.sonar.api.ExtensionProvider;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.AnnotationUtils;
import org.sonar.core.platform.ComponentContainer;
@@ -49,7 +49,7 @@ public class ServerExtensionInstaller {
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
try {
String pluginKey = pluginInfo.getKey();
Plugin plugin = pluginRepository.getPluginInstance(pluginKey);
SonarPlugin plugin = pluginRepository.getPluginInstance(pluginKey);
container.addExtension(pluginInfo, plugin);

for (Object extension : plugin.getExtensions()) {

+ 4
- 4
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java View File

@@ -37,7 +37,7 @@ import java.util.Set;
import javax.annotation.Nonnull;
import org.apache.commons.io.FileUtils;
import org.picocontainer.Startable;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.platform.Server;
import org.sonar.api.platform.ServerUpgradeStatus;
import org.sonar.api.utils.MessageException;
@@ -83,7 +83,7 @@ public class ServerPluginRepository implements PluginRepository, Startable {

// following fields are available after startup
private final Map<String, PluginInfo> pluginInfosByKeys = new HashMap<>();
private final Map<String, Plugin> pluginInstancesByKeys = new HashMap<>();
private final Map<String, SonarPlugin> pluginInstancesByKeys = new HashMap<>();

public ServerPluginRepository(Server server, ServerUpgradeStatus upgradeStatus,
DefaultServerFileSystem fs, PluginLoader loader) {
@@ -348,8 +348,8 @@ public class ServerPluginRepository implements PluginRepository, Startable {
}

@Override
public Plugin getPluginInstance(String key) {
Plugin plugin = pluginInstancesByKeys.get(key);
public SonarPlugin getPluginInstance(String key) {
SonarPlugin plugin = pluginInstancesByKeys.get(key);
if (plugin == null) {
throw new IllegalArgumentException(format("Plugin [%s] does not exist", key));
}

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java View File

@@ -27,7 +27,7 @@ import java.util.List;
import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.config.License;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
@@ -285,7 +285,7 @@ public final class JRubyFacade {
}

public Object getComponentByClassname(String pluginKey, String className) {
Plugin plugin = get(PluginRepository.class).getPluginInstance(pluginKey);
SonarPlugin plugin = get(PluginRepository.class).getPluginInstance(pluginKey);
try {
Class componentClass = plugin.getClass().getClassLoader().loadClass(className);
return get(componentClass);

BIN
server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.0.jar View File


BIN
server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-decoy-plugin-1.1.jar View File


BIN
server/sonar-server/src/test/resources/org/sonar/server/plugins/ws/PluginsWsMediumTest/sonar-foo-plugin-1.0.jar View File


+ 0
- 38
sonar-batch/src/main/java/org/sonar/batch/ProfileLoader.java View File

@@ -1,38 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch;

import org.sonar.api.config.Settings;
import org.sonar.api.profiles.RulesProfile;

/**
* This interface is implemented by the views plugin!!
*
* @deprecated in 4.2
*/
@Deprecated
public interface ProfileLoader {

/**
* Loads quality profile for specified project.
*/
RulesProfile load(Settings settings);

}

+ 3
- 6
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java View File

@@ -19,21 +19,18 @@
*/
package org.sonar.batch.bootstrap;

import com.google.common.io.Files;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.CharUtils;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
@@ -82,7 +79,7 @@ public class BatchPluginInstaller implements PluginInstaller {
* @see org.sonar.batch.mediumtest.BatchMediumTester
*/
@Override
public Map<String, Plugin> installLocals() {
public Map<String, SonarPlugin> installLocals() {
return Collections.emptyMap();
}


+ 7
- 8
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java View File

@@ -21,15 +21,14 @@ package org.sonar.batch.bootstrap;

import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import java.util.Collection;
import java.util.Map;
import org.picocontainer.Startable;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginLoader;
import org.sonar.core.platform.PluginRepository;

import java.util.Collection;
import java.util.Map;

/**
* Orchestrates the installation and loading of plugins
*/
@@ -38,7 +37,7 @@ public class BatchPluginRepository implements PluginRepository, Startable {
private final PluginInstaller installer;
private final PluginLoader loader;

private Map<String, Plugin> pluginInstancesByKeys;
private Map<String, SonarPlugin> pluginInstancesByKeys;
private Map<String, PluginInfo> infosByKeys;

public BatchPluginRepository(PluginInstaller installer, PluginLoader loader) {
@@ -52,7 +51,7 @@ public class BatchPluginRepository implements PluginRepository, Startable {
pluginInstancesByKeys = Maps.newHashMap(loader.load(infosByKeys));

// this part is only used by tests
for (Map.Entry<String, Plugin> entry : installer.installLocals().entrySet()) {
for (Map.Entry<String, SonarPlugin> entry : installer.installLocals().entrySet()) {
String pluginKey = entry.getKey();
infosByKeys.put(pluginKey, new PluginInfo(pluginKey));
pluginInstancesByKeys.put(pluginKey, entry.getValue());
@@ -81,8 +80,8 @@ public class BatchPluginRepository implements PluginRepository, Startable {
}

@Override
public Plugin getPluginInstance(String key) {
Plugin instance = pluginInstancesByKeys.get(key);
public SonarPlugin getPluginInstance(String key) {
SonarPlugin instance = pluginInstancesByKeys.get(key);
Preconditions.checkState(instance != null, String.format("Plugin [%s] does not exist", key));
return instance;
}

+ 2
- 4
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java View File

@@ -20,11 +20,9 @@
package org.sonar.batch.bootstrap;

import java.util.List;

import javax.annotation.Nullable;

import org.sonar.api.ExtensionProvider;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;
@@ -51,7 +49,7 @@ public class ExtensionInstaller {

// plugin extensions
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
Plugin plugin = pluginRepository.getPluginInstance(pluginInfo.getKey());
SonarPlugin plugin = pluginRepository.getPluginInstance(pluginInfo.getKey());
for (Object extension : plugin.getExtensions()) {
doInstall(container, matcher, pluginInfo, extension);
}

+ 3
- 10
sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java View File

@@ -21,10 +21,8 @@ package org.sonar.batch.bootstrap;

import java.util.List;
import java.util.Map;

import org.sonar.api.CoreProperties;
import org.sonar.api.Plugin;
import org.sonar.api.utils.Durations;
import org.sonar.api.SonarPlugin;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.UriReader;
import org.sonar.batch.index.CachesManager;
@@ -41,8 +39,6 @@ import org.sonar.batch.repository.ServerIssuesLoader;
import org.sonar.batch.repository.user.UserRepository;
import org.sonar.batch.scan.ProjectScanContainer;
import org.sonar.core.config.Logback;
import org.sonar.core.i18n.DefaultI18n;
import org.sonar.core.i18n.RuleI18nManager;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginClassloaderFactory;
import org.sonar.core.platform.PluginInfo;
@@ -82,7 +78,7 @@ public class GlobalContainer extends ComponentContainer {
BatchPluginPredicate.class,
ExtensionInstaller.class,

CachesManager.class,
CachesManager.class,
GlobalMode.class,
GlobalSettings.class,
ServerClient.class,
@@ -95,9 +91,6 @@ public class GlobalContainer extends ComponentContainer {
new PersistentCacheProvider(),
new WSLoaderGlobalProvider(),
System2.INSTANCE,
DefaultI18n.class,
Durations.class,
RuleI18nManager.class,
new GlobalRepositoriesProvider(),
UserRepository.class);
addIfMissing(BatchPluginInstaller.class, PluginInstaller.class);
@@ -121,7 +114,7 @@ public class GlobalContainer extends ComponentContainer {
private void installPlugins() {
PluginRepository pluginRepository = getComponentByType(PluginRepository.class);
for (PluginInfo pluginInfo : pluginRepository.getPluginInfos()) {
Plugin instance = pluginRepository.getPluginInstance(pluginInfo.getKey());
SonarPlugin instance = pluginRepository.getPluginInstance(pluginInfo.getKey());
addExtension(pluginInfo, instance);
}
}

+ 3
- 4
sonar-batch/src/main/java/org/sonar/batch/bootstrap/PluginInstaller.java View File

@@ -19,12 +19,11 @@
*/
package org.sonar.batch.bootstrap;

import java.util.Map;
import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.BatchSide;
import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;

import java.util.Map;

@BatchSide
public interface PluginInstaller {

@@ -39,5 +38,5 @@ public interface PluginInstaller {
* Used only by tests.
* @see org.sonar.batch.mediumtest.BatchMediumTester
*/
Map<String, Plugin> installLocals();
Map<String, SonarPlugin> installLocals();
}

+ 0
- 24
sonar-batch/src/main/java/org/sonar/batch/compute/package-info.java View File

@@ -1,24 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.
*/
@ParametersAreNonnullByDefault
package org.sonar.batch.compute;

import javax.annotation.ParametersAreNonnullByDefault;


+ 0
- 23
sonar-batch/src/main/java/org/sonar/batch/debt/package-info.java View File

@@ -1,23 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.
*/
@ParametersAreNonnullByDefault
package org.sonar.batch.debt;

import javax.annotation.ParametersAreNonnullByDefault;

+ 0
- 49
sonar-batch/src/main/java/org/sonar/batch/deprecated/ResourceFilters.java View File

@@ -1,49 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch.deprecated;

import com.google.common.base.Joiner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.ResourceFilter;

/**
* @since 1.12
*/
public class ResourceFilters {

public ResourceFilters(ResourceFilter[] filters) {
this(LoggerFactory.getLogger(ResourceFilters.class), filters);
}

public ResourceFilters() {
// perfect
}

ResourceFilters(Logger logger, ResourceFilter[] filters) {
check(logger, filters);
}

private void check(Logger logger, ResourceFilter[] filters) {
if (filters.length > 0) {
logger.warn("ResourceFilters are not supported since version 4.2: " + Joiner.on(", ").join(filters));
}
}
}

+ 0
- 28
sonar-batch/src/main/java/org/sonar/batch/index/Data.java View File

@@ -1,28 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch.index;

import java.io.Serializable;

public interface Data extends Serializable {

String writeString();

}

+ 0
- 34
sonar-batch/src/main/java/org/sonar/batch/index/ResourceNotPersistedException.java View File

@@ -1,34 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch.index;

import org.sonar.api.resources.Resource;
import org.sonar.api.utils.SonarException;

/**
* @since 2.6
*/
public final class ResourceNotPersistedException extends SonarException {

public ResourceNotPersistedException(Resource resource) {
super(resource.toString());
}

}

+ 0
- 40
sonar-batch/src/main/java/org/sonar/batch/index/StringData.java View File

@@ -1,40 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch.index;

public class StringData implements Data {
private String data = null;

public StringData() {
}

public StringData(String s) {
this.data = s;
}

public String data() {
return data;
}

@Override
public String writeString() {
return data;
}
}

+ 6
- 7
sonar-batch/src/main/java/org/sonar/batch/mediumtest/FakePluginInstaller.java View File

@@ -19,25 +19,24 @@
*/
package org.sonar.batch.mediumtest;

import org.sonar.api.Plugin;
import org.sonar.batch.bootstrap.PluginInstaller;
import org.sonar.core.platform.PluginInfo;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.sonar.api.SonarPlugin;
import org.sonar.batch.bootstrap.PluginInstaller;
import org.sonar.core.platform.PluginInfo;

public class FakePluginInstaller implements PluginInstaller {

private final Map<String, PluginInfo> infosByKeys = new HashMap<>();
private final Map<String, Plugin> instancesByKeys = new HashMap<>();
private final Map<String, SonarPlugin> instancesByKeys = new HashMap<>();

public FakePluginInstaller add(String pluginKey, File jarFile) {
infosByKeys.put(pluginKey, PluginInfo.create(jarFile));
return this;
}

public FakePluginInstaller add(String pluginKey, Plugin instance) {
public FakePluginInstaller add(String pluginKey, SonarPlugin instance) {
instancesByKeys.put(pluginKey, instance);
return this;
}
@@ -48,7 +47,7 @@ public class FakePluginInstaller implements PluginInstaller {
}

@Override
public Map<String, Plugin> installLocals() {
public Map<String, SonarPlugin> installLocals() {
return instancesByKeys;
}
}

+ 0
- 2
sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java View File

@@ -35,7 +35,6 @@ import org.sonar.batch.bootstrap.ExtensionInstaller;
import org.sonar.batch.bootstrap.ExtensionMatcher;
import org.sonar.batch.bootstrap.ExtensionUtils;
import org.sonar.batch.deprecated.DeprecatedSensorContext;
import org.sonar.batch.deprecated.ResourceFilters;
import org.sonar.batch.deprecated.perspectives.BatchPerspectives;
import org.sonar.batch.events.EventBus;
import org.sonar.batch.index.DefaultIndex;
@@ -147,7 +146,6 @@ public class ModuleScanContainer extends ComponentContainer {
BatchExtensionDictionnary.class,
IssueFilters.class,
CoverageExclusions.class,
ResourceFilters.class,

// rules
ModuleQProfiles.class,

+ 3
- 3
sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginRepositoryTest.java View File

@@ -21,7 +21,7 @@ package org.sonar.batch.bootstrap;

import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginLoader;

@@ -42,7 +42,7 @@ public class BatchPluginRepositoryTest {
public void install_and_load_plugins() {
PluginInfo info = new PluginInfo("squid");
ImmutableMap<String, PluginInfo> infos = ImmutableMap.of("squid", info);
Plugin instance = mock(Plugin.class);
SonarPlugin instance = mock(SonarPlugin.class);
when(loader.load(infos)).thenReturn(ImmutableMap.of("squid", instance));
when(installer.installRemotes()).thenReturn(infos);

@@ -53,7 +53,7 @@ public class BatchPluginRepositoryTest {
assertThat(underTest.getPluginInstance("squid")).isSameAs(instance);

underTest.stop();
verify(loader).unload(anyCollectionOf(Plugin.class));
verify(loader).unload(anyCollectionOf(SonarPlugin.class));
}

@Test

+ 3
- 5
sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java View File

@@ -19,21 +19,19 @@
*/
package org.sonar.batch.bootstrap;

import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.ClassUtils;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.BatchExtension;
import org.sonar.api.ExtensionProvider;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.SupportedEnvironment;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -43,7 +41,7 @@ public class ExtensionInstallerTest {
GlobalMode mode;
BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class);

private static Plugin newPluginInstance(final Object... extensions) {
private static SonarPlugin newPluginInstance(final Object... extensions) {
return new SonarPlugin() {
public List getExtensions() {
return Arrays.asList(extensions);

+ 0
- 47
sonar-batch/src/test/java/org/sonar/batch/deprecated/ResourceFiltersTest.java View File

@@ -1,47 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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.batch.deprecated;

import org.junit.Test;
import org.slf4j.Logger;
import org.sonar.api.batch.ResourceFilter;

import static org.mockito.Matchers.startsWith;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class ResourceFiltersTest {
@Test
public void warn_on_resource_filters() {
Logger logger = mock(Logger.class);
ResourceFilter[] filters = {mock(ResourceFilter.class)};
new ResourceFilters(logger, filters);
verify(logger).warn(startsWith("ResourceFilters are not supported since version 4.2"));

// verify that the standard constructor does not fail
new ResourceFilters(filters);
}

@Test
public void ok_if_no_resource_filters() {
// just for verify that it does not fail. Should check that no warning is logged.
new ResourceFilters();
}
}

+ 2
- 2
sonar-core/src/main/java/org/sonar/core/i18n/I18nClassloader.java View File

@@ -24,7 +24,7 @@ import com.google.common.collect.Lists;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;

@@ -71,7 +71,7 @@ class I18nClassloader extends URLClassLoader {
// there may be duplicated classloaders in the list.
List<ClassLoader> list = Lists.newArrayList();
for (PluginInfo info : pluginRepository.getPluginInfos()) {
Plugin plugin = pluginRepository.getPluginInstance(info.getKey());
SonarPlugin plugin = pluginRepository.getPluginInstance(info.getKey());
list.add(plugin.getClass().getClassLoader());
}
list.add(I18nClassloader.class.getClassLoader());

+ 7
- 7
sonar-core/src/main/java/org/sonar/core/platform/PluginLoader.java View File

@@ -26,7 +26,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.SystemUtils;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.utils.log.Loggers;
import org.sonar.updatecenter.common.Version;

@@ -59,7 +59,7 @@ public class PluginLoader {
this.classloaderFactory = classloaderFactory;
}

public Map<String, Plugin> load(Map<String, PluginInfo> infoByKeys) {
public Map<String, SonarPlugin> load(Map<String, PluginInfo> infoByKeys) {
Collection<PluginClassloaderDef> defs = defineClassloaders(infoByKeys);
Map<PluginClassloaderDef, ClassLoader> classloaders = classloaderFactory.create(defs);
return instantiatePluginClasses(classloaders);
@@ -113,9 +113,9 @@ public class PluginLoader {
* @throws IllegalStateException if at least one plugin can't be correctly loaded
*/
@VisibleForTesting
Map<String, Plugin> instantiatePluginClasses(Map<PluginClassloaderDef, ClassLoader> classloaders) {
Map<String, SonarPlugin> instantiatePluginClasses(Map<PluginClassloaderDef, ClassLoader> classloaders) {
// instantiate plugins
Map<String, Plugin> instancesByPluginKey = new HashMap<>();
Map<String, SonarPlugin> instancesByPluginKey = new HashMap<>();
for (Map.Entry<PluginClassloaderDef, ClassLoader> entry : classloaders.entrySet()) {
PluginClassloaderDef def = entry.getKey();
ClassLoader classLoader = entry.getValue();
@@ -125,7 +125,7 @@ public class PluginLoader {
String pluginKey = mainClassEntry.getKey();
String mainClass = mainClassEntry.getValue();
try {
instancesByPluginKey.put(pluginKey, (Plugin) classLoader.loadClass(mainClass).newInstance());
instancesByPluginKey.put(pluginKey, (SonarPlugin) classLoader.loadClass(mainClass).newInstance());
} catch (UnsupportedClassVersionError e) {
throw new IllegalStateException(String.format("The plugin [%s] does not support Java %s",
pluginKey, SystemUtils.JAVA_VERSION_TRIMMED), e);
@@ -138,8 +138,8 @@ public class PluginLoader {
return instancesByPluginKey;
}

public void unload(Collection<Plugin> plugins) {
for (Plugin plugin : plugins) {
public void unload(Collection<SonarPlugin> plugins) {
for (SonarPlugin plugin : plugins) {
ClassLoader classLoader = plugin.getClass().getClassLoader();
if (classLoader instanceof Closeable && classLoader != classloaderFactory.baseClassloader()) {
try {

+ 2
- 2
sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java View File

@@ -20,7 +20,7 @@
package org.sonar.core.platform;

import java.util.Collection;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.api.batch.BatchSide;
import org.sonar.api.server.ServerSide;

@@ -38,7 +38,7 @@ public interface PluginRepository {
/**
* @return the instance of {@link Plugin} for the given plugin key. Never return null.
*/
Plugin getPluginInstance(String key);
SonarPlugin getPluginInstance(String key);

boolean hasPlugin(String key);
}

+ 1
- 2
sonar-core/src/test/java/org/sonar/core/platform/PluginLoaderTest.java View File

@@ -29,7 +29,6 @@ import org.assertj.core.data.MapEntry;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.Plugin;
import org.sonar.api.SonarPlugin;
import org.sonar.updatecenter.common.Version;

@@ -51,7 +50,7 @@ public class PluginLoaderTest {
PluginClassloaderDef def = new PluginClassloaderDef("fake");
def.addMainClass("fake", FakePlugin.class.getName());

Map<String, Plugin> instances = loader.instantiatePluginClasses(ImmutableMap.of(def, getClass().getClassLoader()));
Map<String, SonarPlugin> instances = loader.instantiatePluginClasses(ImmutableMap.of(def, getClass().getClassLoader()));
assertThat(instances).containsOnlyKeys("fake");
assertThat(instances.get("fake")).isInstanceOf(FakePlugin.class);
}

+ 0
- 64
sonar-plugin-api/src/main/java/org/sonar/api/Plugin.java View File

@@ -1,64 +0,0 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2014 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;

import java.util.List;

/**
* A plugin is a group of extensions. See <code>org.sonar.api.Extension</code> interface to browse
* available extension points.
* <p>The manifest property <code>Plugin-Class</code> must declare the name of the implementation class.
* It is automatically set by sonar-packaging-maven-plugin when building plugins.</p>
* <p>Implementation must declare a public constructor with no-parameters.</p>
*
* @see org.sonar.api.Extension
* @since 1.10
* @deprecated in 2.8. Use {@link SonarPlugin} instead.
*/
@Deprecated
public interface Plugin {

/**
* Unique key within sonar plugins
* @deprecated since 2.2. The key must be set in the manifest.
*/
@Deprecated
String getKey();

/**
* Descriptive name
* @deprecated since 2.2. The name must be set in the manifest.
*/
@Deprecated
String getName();

/**
* description of the plugin, can contains html or ruby code
* @deprecated since 2.2. The description must be set in the manifest.
*/
@Deprecated
String getDescription();

/**
* Classes of the implemented extensions.
*/
List getExtensions();

}

+ 7
- 15
sonar-plugin-api/src/main/java/org/sonar/api/SonarPlugin.java View File

@@ -19,6 +19,8 @@
*/
package org.sonar.api;

import java.util.List;

/**
* Plugin entry-point used to declare its extensions (see {@link org.sonar.api.Extension}.
* <p/>
@@ -27,22 +29,12 @@ package org.sonar.api;
*
* @since 2.8
*/
public abstract class SonarPlugin implements Plugin {

@Override
public final String getKey() {
throw new UnsupportedOperationException();
}
public abstract class SonarPlugin {

@Override
public final String getName() {
throw new UnsupportedOperationException();
}

@Override
public final String getDescription() {
throw new UnsupportedOperationException();
}
/**
* Classes of the implemented extensions.
*/
public abstract List getExtensions();

/**
* Returns a string representation of the plugin, suitable for debugging purposes only.

Loading…
Cancel
Save