All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wrightfully.sonar.plugins.dotnet.resharper.ReSharperConfiguration Maven / Gradle / Ivy

Go to download

Plugin to utilize JetBrain's ReSharper command-line code analyzer to check .NET source code against rule violations.

The newest version!
/*
 * Sonar .NET Plugin :: ReSharper
 * Copyright (C) 2013 John M. Wright
 * [email protected]
 *
 * 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 com.wrightfully.sonar.plugins.dotnet.resharper;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.BatchExtension;
import org.sonar.api.ServerExtension;
import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.config.Settings;

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

/**
 * Class that reads configuration related to all the .NET ReSharper plugin. It can be injected via the constructor.
*
* Important: It should be used over the original {@link Settings} as it takes care to maintain backward compatibility with the * previous plugin parameter names. */ @InstantiationStrategy(InstantiationStrategy.PER_BATCH) public class ReSharperConfiguration implements BatchExtension, ServerExtension { private static final Logger LOG = LoggerFactory.getLogger(ReSharperConfiguration.class); private Settings settings; private Map newToPreviousParamMap = Maps.newHashMap(); /** * Creates a new {@link ReSharperConfiguration} object that will use the inner {@link Settings} object to retrieve the required key * values, taking into account the name of the previous .NET plugin parameters. * * @param settings * the settings */ public ReSharperConfiguration(Settings settings) { this.settings = settings; newToPreviousParamMap.put(ReSharperConstants.REPORTS_PATH_KEY, "sonar.resharper.report.path"); } public Settings getSettings() { return this.settings;}; /** * @see Settings#getString(String) */ public String getString(String key) { // look if this key existed before Object rawPreviousKeys = newToPreviousParamMap.get(key); if (rawPreviousKeys instanceof String) { String conf = getConfig((String) rawPreviousKeys); if (StringUtils.isNotBlank(conf)) { return conf; } } else if (rawPreviousKeys instanceof Collection) { // should be a collection Collection prevousKeys = (Collection) rawPreviousKeys; for (String previousKey : prevousKeys) { String conf = getConfig((String) previousKey); if (StringUtils.isNotBlank(conf)) { return conf; } } } // if this key wasn't used before, or if no value for was for it, use the value of the current key return settings.getString(key); } private String getConfig(String previousKey) { if (StringUtils.isNotBlank(previousKey)) { String result = settings.getString(previousKey); if (StringUtils.isNotBlank(result)) { // a former parameter has been specified, let's take this value logInfo(result, previousKey); return result; } } return null; } /** * @see Settings#getStringArray(String) */ public String[] getStringArray(String key) { // look if this key existed before String previousKey = (String) newToPreviousParamMap.get(key); final String[] resultArray; if (StringUtils.isBlank(previousKey)) { // if this key wasn't used before, or if no value for was for it, // use the value of the current key String[] result = settings.getStringArray(key); if (result.length == 0) { resultArray = result; } else { // in the previous .NET plugin, parameters used to be split with a semi-colon resultArray = splitUsingSemiColon(result); } } else { String[] result = settings.getStringArray(previousKey); if (result.length == 0) { result = settings.getStringArray(key); resultArray = splitUsingSemiColon(result); } else { // a former parameter has been specified, let's take this value logInfo(result, previousKey); // in the previous .NET plugin, parameters used to be split with a semi-colon resultArray = splitUsingSemiColon(result); } } return resultArray; } public String[] getStringArray(String key, String defaultValue) { String[] result = getStringArray(key); if (result.length == 0) { if (StringUtils.isEmpty(defaultValue)) { result = new String[] {}; } else { result = new String[] {defaultValue}; } } return result; } private String[] splitUsingSemiColon(String[] strings) { Collection resultCollection = Lists.newArrayList(); for (int i = 0; i < strings.length; i++) { resultCollection.addAll(Arrays.asList(StringUtils.split(strings[i], ';'))); } return resultCollection.toArray(new String[resultCollection.size()]); } /** * @see Settings#getBoolean(String, Boolean) */ public boolean getBoolean(String key) { boolean result = false; // look if this key existed before String previousKey = (String) newToPreviousParamMap.get(key); if (StringUtils.isNotBlank(previousKey) && settings.hasKey(previousKey)) { result = settings.getBoolean(previousKey); // a former parameter has been specified, let's take this value logInfo(result, previousKey); return result; } // if this key wasn't used before, or if no value for was for it, use the value of the current key return settings.getBoolean(key); } /** * @see Settings#getInteger(String, Integer) */ public int getInt(String key) { int result = -1; // look if this key existed before String previousKey = (String) newToPreviousParamMap.get(key); if (StringUtils.isNotBlank(previousKey) && settings.hasKey(previousKey)) { result = settings.getInt(previousKey); // a former parameter has been specified, let's take this value logInfo(result, previousKey); return result; } // if this key wasn't used before, or if no value for was for it, use the value of the current key return settings.getInt(key); } protected void logInfo(Object result, String previousKey) { LOG.info("The old .NET parameter '{}' has been found and will be used. Its value: '{}'", previousKey, result); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy