]> source.dussan.org Git - sonarqube.git/commitdiff
Remove some usages of Guava in API
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 12 Apr 2017 20:43:10 +0000 (22:43 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 19 Jun 2017 11:29:45 +0000 (13:29 +0200)
73 files changed:
server/sonar-server/src/main/java/org/sonar/server/util/ClassLoaderUtils.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/debt/DebtRemediationFunction.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AbstractFilePredicate.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AndPredicate.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/DefaultFileSystem.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/RuleParam.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/Severity.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultRule.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/coverage/CoverageType.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokens.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/DefaultStorable.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/SensorContextTester.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTable.java
sonar-plugin-api/src/main/java/org/sonar/api/ce/measure/test/TestIssue.java
sonar-plugin-api/src/main/java/org/sonar/api/ce/measure/test/TestMeasureComputerDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/config/EmailSettings.java
sonar-plugin-api/src/main/java/org/sonar/api/config/Encryption.java
sonar-plugin-api/src/main/java/org/sonar/api/config/License.java
sonar-plugin-api/src/main/java/org/sonar/api/config/MapSettings.java
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinitions.java
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyFieldDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/config/Settings.java
sonar-plugin-api/src/main/java/org/sonar/api/database/model/User.java
sonar-plugin-api/src/main/java/org/sonar/api/design/Dependency.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/DefaultTransitions.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/NoSonarFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/Condition.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/HasIssuePropertyCondition.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/HasResolution.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/HasStatus.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/IsUnResolved.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/condition/NotCondition.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/CoverageMeasuresBuilder.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/Measure.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/RangeDistributionBuilder.java
sonar-plugin-api/src/main/java/org/sonar/api/notifications/Notification.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/NewUserHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/RulesProfile.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceType.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceTypeTree.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceTypes.java
sonar-plugin-api/src/main/java/org/sonar/api/rule/RuleKey.java
sonar-plugin-api/src/main/java/org/sonar/api/rule/Severity.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/ActiveRule.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/Rule.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/RuleType.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/XMLRuleParser.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileExclusions.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/PathResolver.java
sonar-plugin-api/src/main/java/org/sonar/api/security/Authenticator.java
sonar-plugin-api/src/main/java/org/sonar/api/server/authentication/UserIdentity.java
sonar-plugin-api/src/main/java/org/sonar/api/server/debt/internal/DefaultDebtRemediationFunction.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RuleParamType.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/SimpleGetRequest.java
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/FieldUtils2.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/LocalizedMessages.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/MessageException.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/UriReader.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/command/Command.java
sonar-plugin-api/src/main/java/org/sonar/api/web/Dashboard.java
sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/web/page/Page.java
sonar-plugin-api/src/test/java/org/sonar/api/batch/debt/DebtRemediationFunctionTest.java

index 49496730b6e36bed71d19017a82447ac7fd22250..76922996f03ab4656d05fddeb7bdfa6daf8704e0 100644 (file)
 package org.sonar.server.util;
 
 import com.google.common.base.Throwables;
-import com.google.common.collect.Lists;
 import java.net.URL;
 import java.net.URLDecoder;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.function.Predicate;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import javax.annotation.Nullable;
-import org.apache.commons.lang.CharEncoding;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.utils.log.Loggers;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 public class ClassLoaderUtils {
 
   private ClassLoaderUtils() {
@@ -62,7 +63,7 @@ public class ClassLoaderUtils {
     String jarPath = null;
     JarFile jar = null;
     try {
-      Collection<String> paths = Lists.newArrayList();
+      Collection<String> paths = new ArrayList<>();
       URL root = classLoader.getResource(rootPath);
       if (root != null) {
         checkJarFile(root);
@@ -78,7 +79,7 @@ public class ClassLoaderUtils {
         }
         // strip out only the JAR file
         jarPath = root.getPath().substring(5, root.getPath().indexOf('!'));
-        jar = new JarFile(URLDecoder.decode(jarPath, CharEncoding.UTF_8));
+        jar = new JarFile(URLDecoder.decode(jarPath, UTF_8.name()));
         Enumeration<JarEntry> entries = jar.entries();
         while (entries.hasMoreElements()) {
           String name = entries.nextElement().getName();
index caed8fb3749ffcfe2aa25b0c1216fd1f416c8630..602d8ebeb1aa70c478752e573b42a73b8a1acb0b 100644 (file)
  */
 package org.sonar.api.batch.debt;
 
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.utils.Duration;
-
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+import org.sonar.api.utils.Duration;
 
 /**
  * @since 4.3
@@ -85,25 +80,32 @@ public class DebtRemediationFunction {
     if (o == null || getClass() != o.getClass()) {
       return false;
     }
+
     DebtRemediationFunction that = (DebtRemediationFunction) o;
-    return new EqualsBuilder()
-      .append(type, that.type())
-      .append(coefficient, that.coefficient())
-      .append(offset, that.offset())
-      .isEquals();
+    if (type != that.type) {
+      return false;
+    }
+    if (coefficient != null ? !coefficient.equals(that.coefficient) : that.coefficient != null) {
+      return false;
+    }
+    return offset != null ? offset.equals(that.offset) : that.offset == null;
   }
 
   @Override
   public int hashCode() {
-    return new HashCodeBuilder(15, 31)
-      .append(type)
-      .append(coefficient)
-      .append(offset)
-      .toHashCode();
+    int result = type.hashCode();
+    result = 31 * result + (coefficient != null ? coefficient.hashCode() : 0);
+    result = 31 * result + (offset != null ? offset.hashCode() : 0);
+    return result;
   }
 
   @Override
   public String toString() {
-    return new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();
+    StringBuilder sb = new StringBuilder("DebtRemediationFunction{");
+    sb.append("type=").append(type);
+    sb.append(", coefficient=").append(coefficient);
+    sb.append(", offset=").append(offset);
+    sb.append('}');
+    return sb.toString();
   }
 }
index 9cb641b17f92ced287e7a0c93966f4fdd78979ac..a4de39904e53226801f28652c96569f167cfa1cb 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.fs.internal;
 
-import com.google.common.collect.Iterables;
+import java.util.stream.StreamSupport;
 import org.sonar.api.batch.fs.FileSystem.Index;
 import org.sonar.api.batch.fs.InputFile;
 
@@ -34,7 +34,9 @@ public abstract class AbstractFilePredicate implements OptimizedFilePredicate {
 
   @Override
   public Iterable<InputFile> filter(Iterable<InputFile> target) {
-    return Iterables.filter(target, this::apply);
+    return () -> StreamSupport.stream(target.spliterator(), false)
+      .filter(this::apply)
+      .iterator();
   }
 
   @Override
index 5c12e74c5a7d6c992bf1ad9d587d0fb421435789..863864c185c73cb7952ece3135aebdb4cef8dc9f 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.batch.fs.internal;
 
-import com.google.common.annotations.VisibleForTesting;
 import org.sonar.api.batch.fs.FilePredicate;
 import org.sonar.api.batch.fs.FileSystem.Index;
 import org.sonar.api.batch.fs.InputFile;
@@ -91,7 +90,6 @@ class AndPredicate extends AbstractFilePredicate {
     return result;
   }
 
-  @VisibleForTesting
   Collection<OptimizedFilePredicate> predicates() {
     return predicates;
   }
index dda12ece0fdb46a78c178ed3384ce6b24be397c9..f7d2858a7a30789f98bdb83e90c65238163decd7 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.batch.fs.internal;
 
-import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.SetMultimap;
 import java.io.File;
@@ -36,7 +35,6 @@ import java.util.TreeSet;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
-
 import javax.annotation.Nullable;
 import org.sonar.api.batch.fs.FilePredicate;
 import org.sonar.api.batch.fs.FilePredicates;
@@ -175,7 +173,9 @@ public class DefaultFileSystem implements FileSystem {
   @Override
   public Iterable<File> files(FilePredicate predicate) {
     doPreloadFiles();
-    return Iterables.transform(inputFiles(predicate), InputFile::file);
+    return () -> StreamSupport.stream(inputFiles(predicate).spliterator(), false)
+      .map(InputFile::file)
+      .iterator();
   }
 
   @Override
index 83e96fe9d74457b65c4fda8e049ef7b840e752d5..7c06501dfbed96306b0afa99b2412a953ca9d672 100644 (file)
  */
 package org.sonar.api.batch.rule;
 
-import com.google.common.annotations.Beta;
-
 /**
  * @since 4.2
  */
-@Beta
 public interface RuleParam {
   String key();
   String description();
index aa849c680527a8658596845bcd16d06ae4016720..d0e708e53e1196ce4ee8e54eda474c9fff3b21f9 100644 (file)
  */
 package org.sonar.api.batch.rule;
 
-import com.google.common.annotations.Beta;
-
 /**
  * @since 5.2
  */
-@Beta
 public enum Severity {
   INFO,
   MINOR,
index f84f33f3a099a348b31810d7c83030b3bb816382..fe94301af85b2dec47b43ada1ff4a6b40edf5e58 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch.rule.internal;
 
-import com.google.common.collect.ImmutableMap;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 import javax.annotation.concurrent.Immutable;
 import org.sonar.api.batch.rule.ActiveRule;
@@ -40,7 +41,7 @@ public class DefaultActiveRule implements ActiveRule {
     this.internalKey = newActiveRule.internalKey;
     this.templateRuleKey = newActiveRule.templateRuleKey;
     this.ruleKey = newActiveRule.ruleKey;
-    this.params = ImmutableMap.copyOf(newActiveRule.params);
+    this.params = Collections.unmodifiableMap(new HashMap<>(newActiveRule.params));
     this.language = newActiveRule.language;
     this.createdAt = newActiveRule.createdAt;
   }
index 7d9ae403b1d3a515796f6f596d53cea148e7ded7..d3bb39702a2656159cef8f20d7d093029edaa9b5 100644 (file)
  */
 package org.sonar.api.batch.rule.internal;
 
-import com.google.common.collect.ImmutableMap;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.concurrent.Immutable;
 import org.sonar.api.batch.debt.DebtRemediationFunction;
 import org.sonar.api.batch.rule.Rule;
 import org.sonar.api.batch.rule.RuleParam;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.concurrent.Immutable;
-
-import java.util.Collection;
-import java.util.Map;
-
 @Immutable
 public class DefaultRule implements Rule {
 
@@ -55,11 +54,11 @@ public class DefaultRule implements Rule {
     this.internalKey = newRule.internalKey;
     this.status = newRule.status;
 
-    ImmutableMap.Builder<String, RuleParam> builder = ImmutableMap.builder();
+    Map<String, RuleParam> builder = new HashMap<>();
     for (NewRuleParam newRuleParam : newRule.params.values()) {
       builder.put(newRuleParam.key, new DefaultRuleParam(newRuleParam));
     }
-    params = builder.build();
+    params = Collections.unmodifiableMap(builder);
   }
 
   @Override
index 913449c521e0f4f0f65a2d0d2585300b388004b2..b0f397623fcb5caf309e4a012f3eaded605f1fdf 100644 (file)
@@ -19,7 +19,9 @@
  */
 package org.sonar.api.batch.sensor.coverage;
 
-import com.google.common.collect.ImmutableSet;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashSet;
 import java.util.Set;
 import org.sonar.api.measures.Metric;
 
@@ -77,7 +79,8 @@ public enum CoverageType {
     this.uncoveredConditions = uncoveredConditions;
     this.coveredConditionsByLine = coveredConditionsByLine;
     this.conditionsByLine = conditionsByLine;
-    this.all = ImmutableSet.of(linesToCover, uncoveredLines, lineHitsData, conditionsToCover, uncoveredConditions, coveredConditionsByLine, conditionsByLine);
+    this.all = Collections
+      .unmodifiableSet(new LinkedHashSet<>(Arrays.asList(linesToCover, uncoveredLines, lineHitsData, conditionsToCover, uncoveredConditions, coveredConditionsByLine, conditionsByLine)));
   }
 
   public Set<Metric> allMetrics() {
index 78a4d7001517227ff72543b1d8e847939813d4d9..3ff672988da61ba931d65e5d8d5252336b139850 100644 (file)
@@ -19,8 +19,7 @@
  */
 package org.sonar.api.batch.sensor.cpd.internal;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
 import java.util.List;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.fs.InputFile;
@@ -32,12 +31,14 @@ import org.sonar.api.batch.sensor.internal.SensorStorage;
 import org.sonar.api.config.Settings;
 import org.sonar.duplications.internal.pmd.TokensLine;
 
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.Collections.unmodifiableList;
 import static java.util.Objects.requireNonNull;
 
 public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
 
   private final Settings settings;
-  private final ImmutableList.Builder<TokensLine> result = ImmutableList.builder();
+  private final ArrayList<TokensLine> result = new ArrayList<>();
   private InputFile inputFile;
   private int startLine = Integer.MIN_VALUE;
   private int startIndex = 0;
@@ -87,7 +88,7 @@ public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
     if (excluded) {
       return this;
     }
-    Preconditions.checkState(lastRange == null || lastRange.end().compareTo(range.start()) <= 0,
+    checkState(lastRange == null || lastRange.end().compareTo(range.start()) <= 0,
       "Tokens of file %s should be provided in order.\nPrevious token: %s\nLast token: %s", inputFile, lastRange, range);
 
     String value = image;
@@ -106,10 +107,10 @@ public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
   }
 
   public List<TokensLine> getTokenLines() {
-    return result.build();
+    return unmodifiableList(new ArrayList<>(result));
   }
 
-  private static void addNewTokensLine(ImmutableList.Builder<TokensLine> result, int startUnit, int endUnit, int startLine, StringBuilder sb) {
+  private static void addNewTokensLine(List<TokensLine> result, int startUnit, int endUnit, int startLine, StringBuilder sb) {
     if (sb.length() != 0) {
       result.add(new TokensLine(startUnit, endUnit, startLine, sb.toString()));
       sb.setLength(0);
@@ -118,7 +119,7 @@ public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
 
   @Override
   protected void doSave() {
-    Preconditions.checkState(inputFile != null, "Call onFile() first");
+    checkState(inputFile != null, "Call onFile() first");
     if (excluded) {
       return;
     }
@@ -127,6 +128,6 @@ public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
   }
 
   private void checkInputFileNotNull() {
-    Preconditions.checkState(inputFile != null, "Call onFile() first");
+    checkState(inputFile != null, "Call onFile() first");
   }
 }
index 784f057ee385de1d8426d434ee496732dfe08a82..9b37630425b91e50857c347774cdc7222150227f 100644 (file)
@@ -24,6 +24,8 @@ import javax.annotation.Nullable;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
 
+import static java.util.Objects.requireNonNull;
+
 public abstract class DefaultStorable {
 
   protected final transient SensorStorage storage;
@@ -38,7 +40,7 @@ public abstract class DefaultStorable {
   }
 
   public final void save() {
-    Preconditions.checkNotNull(this.storage, "No persister on this object");
+    requireNonNull(this.storage, "No persister on this object");
     Preconditions.checkState(!saved, "This object was already saved");
     doSave();
     this.saved = true;
index b423754a1e607589baa3f2991b88121ffa2d491b..4a3d60763ec26d5879d9f58d7c237ed6ebec8fa9 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.api.batch.sensor.internal;
 
-import com.google.common.collect.ImmutableMap;
-
 import java.io.File;
 import java.io.Serializable;
 import java.nio.file.Path;
@@ -75,6 +73,8 @@ import org.sonar.api.utils.System2;
 import org.sonar.api.utils.Version;
 import org.sonar.duplications.internal.pmd.TokensLine;
 
+import static java.util.Collections.unmodifiableMap;
+
 /**
  * Utility class to help testing {@link Sensor}. This is not an API and method signature may evolve.
  * 
@@ -337,7 +337,7 @@ public class SensorContextTester implements SensorContext {
    * @since 6.1
    */
   public Map<String, String> getContextProperties() {
-    return ImmutableMap.copyOf(sensorStorage.contextProperties);
+    return unmodifiableMap(sensorStorage.contextProperties);
   }
 
   @Override
index fda7d8805650dc4b88fad1df35b6460c4382a0f9..d2522731106ac24d3be515a815176812b35f9582 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.api.batch.sensor.issue.internal;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -36,6 +35,7 @@ import org.sonar.api.rule.RuleKey;
 
 import static com.google.common.base.Preconditions.checkState;
 import static java.lang.String.format;
+import static java.util.Collections.unmodifiableList;
 import static java.util.Objects.requireNonNull;
 import static java.util.stream.Collectors.toList;
 
@@ -137,7 +137,7 @@ public class DefaultIssue extends DefaultStorable implements Issue, NewIssue {
   @Override
   public List<Flow> flows() {
     return this.flows.stream()
-      .<Flow>map(l -> () -> ImmutableList.copyOf(l))
+      .<Flow>map(l -> () -> unmodifiableList(new ArrayList<>(l)))
       .collect(toList());
   }
 
index e199d79cf79c5fc5d851300416ce36bafae2ea3b..f95bf82c817727bcc775813cf941e8280270ce3a 100644 (file)
@@ -31,6 +31,8 @@ import org.sonar.api.batch.sensor.internal.SensorStorage;
 import org.sonar.api.batch.sensor.measure.Measure;
 import org.sonar.api.batch.sensor.measure.NewMeasure;
 
+import static java.util.Objects.requireNonNull;
+
 public class DefaultMeasure<G extends Serializable> extends DefaultStorable implements Measure<G>, NewMeasure<G> {
 
   private InputComponent component;
@@ -57,7 +59,7 @@ public class DefaultMeasure<G extends Serializable> extends DefaultStorable impl
   @Override
   public DefaultMeasure<G> forMetric(Metric<G> metric) {
     Preconditions.checkState(this.metric == null, "Metric already defined");
-    Preconditions.checkNotNull(metric, "metric should be non null");
+    requireNonNull(metric, "metric should be non null");
     this.metric = metric;
     return this;
   }
@@ -65,7 +67,7 @@ public class DefaultMeasure<G extends Serializable> extends DefaultStorable impl
   @Override
   public DefaultMeasure<G> withValue(G value) {
     Preconditions.checkState(this.value == null, "Measure value already defined");
-    Preconditions.checkNotNull(value, "Measure value can't be null");
+    requireNonNull(value, "Measure value can't be null");
     this.value = value;
     return this;
   }
@@ -87,8 +89,8 @@ public class DefaultMeasure<G extends Serializable> extends DefaultStorable impl
 
   @Override
   public void doSave() {
-    Preconditions.checkNotNull(this.value, "Measure value can't be null");
-    Preconditions.checkNotNull(this.metric, "Measure metric can't be null");
+    requireNonNull(this.value, "Measure value can't be null");
+    requireNonNull(this.metric, "Measure metric can't be null");
     Preconditions.checkState(this.metric.valueType().equals(this.value.getClass()), "Measure value should be of type %s", this.metric.valueType());
     storage.store(this);
   }
index 9045923c7b3d8e4ec3f151db0c5987ea213dbf12..8a355709dc71fa799ca008af77e64484a2115f56 100644 (file)
@@ -33,6 +33,8 @@ import org.sonar.api.batch.sensor.internal.SensorStorage;
 import org.sonar.api.batch.sensor.symbol.NewSymbol;
 import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
 
+import static java.util.Objects.requireNonNull;
+
 public class DefaultSymbolTable extends DefaultStorable implements NewSymbolTable {
 
   private final Map<TextRange, Set<TextRange>> referencesBySymbol;
@@ -49,7 +51,7 @@ public class DefaultSymbolTable extends DefaultStorable implements NewSymbolTabl
 
   @Override
   public DefaultSymbolTable onFile(InputFile inputFile) {
-    Preconditions.checkNotNull(inputFile, "file can't be null");
+    requireNonNull(inputFile, "file can't be null");
     this.inputFile = (DefaultInputFile) inputFile;
     return this;
   }
@@ -126,7 +128,7 @@ public class DefaultSymbolTable extends DefaultStorable implements NewSymbolTabl
 
     @Override
     public NewSymbol newReference(TextRange range) {
-      Preconditions.checkNotNull(range, "Provided range is null");
+      requireNonNull(range, "Provided range is null");
       Preconditions.checkArgument(!declaration.overlap(range), "Overlapping symbol declaration and reference for symbol at %s", declaration);
       references.add(range);
       return this;
index e81dee6efa0f60c5d2178c4c97af3a4e7dcc165e..e25a964cc8191a07fe43fc501c017d0e256cd290 100644 (file)
@@ -29,7 +29,7 @@ import org.sonar.api.rules.RuleType;
 import org.sonar.api.utils.Duration;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.Objects.requireNonNull;
 
 @Immutable
 public class TestIssue implements Issue {
@@ -163,12 +163,12 @@ public class TestIssue implements Issue {
     }
 
     private static String validateKey(String key) {
-      checkNotNull(key, "key cannot be null");
+      requireNonNull(key, "key cannot be null");
       return key;
     }
 
     private static RuleKey validateRuleKey(RuleKey ruleKey) {
-      checkNotNull(ruleKey, "ruleKey cannot be null");
+      requireNonNull(ruleKey, "ruleKey cannot be null");
       return ruleKey;
     }
 
@@ -178,19 +178,19 @@ public class TestIssue implements Issue {
     }
 
     private static String validateSeverity(String severity) {
-      checkNotNull(severity, "severity cannot be null");
+      requireNonNull(severity, "severity cannot be null");
       checkArgument(Severity.ALL.contains(severity), String.format("severity '%s' is invalid", severity));
       return severity;
     }
 
     private static String validateStatus(String status) {
-      checkNotNull(status, "status cannot be null");
+      requireNonNull(status, "status cannot be null");
       checkArgument(org.sonar.api.issue.Issue.STATUSES.contains(status), String.format("status '%s' is invalid", status));
       return status;
     }
 
     private static RuleType validateType(RuleType type) {
-      checkNotNull(type, "type cannot be null");
+      requireNonNull(type, "type cannot be null");
       return type;
     }
 
index 0b6d54e93b74dfb36e744558e10020f17c76f79f..f1b5c41435f1f62963591b3914d48ea4e5d145ef 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.ce.measure.test;
 
-import com.google.common.collect.ImmutableSet;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.sonar.api.ce.measure.MeasureComputer;
@@ -28,6 +28,7 @@ import org.sonar.api.measures.Metric;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Arrays.asList;
+import static java.util.Collections.unmodifiableSet;
 import static java.util.Objects.requireNonNull;
 
 public class TestMeasureComputerDefinition implements MeasureComputer.MeasureComputerDefinition {
@@ -36,8 +37,8 @@ public class TestMeasureComputerDefinition implements MeasureComputer.MeasureCom
   private final Set<String> outputMetrics;
 
   private TestMeasureComputerDefinition(MeasureComputerDefinitionBuilderImpl builder) {
-    this.inputMetricKeys = ImmutableSet.copyOf(builder.inputMetricKeys);
-    this.outputMetrics = ImmutableSet.copyOf(builder.outputMetrics);
+    this.inputMetricKeys = unmodifiableSet(new HashSet<>(asList(builder.inputMetricKeys)));
+    this.outputMetrics = unmodifiableSet(new HashSet<>(asList(builder.outputMetrics)));
   }
 
   @Override
index 043809b73351dbd40e4091df87d21929453fb356..dc4498845220a99bdb101ddbad9278da3b4e4b3b 100644 (file)
  */
 package org.sonar.api.config;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableList;
 import java.util.List;
 import org.sonar.api.PropertyType;
 import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.ce.ComputeEngineSide;
 import org.sonar.api.server.ServerSide;
 
+import static java.util.Arrays.asList;
 import static org.sonar.api.CoreProperties.CATEGORY_GENERAL;
 import static org.sonar.api.CoreProperties.SERVER_BASE_URL;
 import static org.sonar.api.CoreProperties.SERVER_BASE_URL_DEFAULT_VALUE;
@@ -97,14 +96,15 @@ public class EmailSettings {
   }
 
   private String get(String key, String defaultValue) {
-    return MoreObjects.firstNonNull(settings.getString(key), defaultValue);
+    String value = settings.getString(key);
+    return value != null ? value : defaultValue;
   }
 
   /**
    * @since 6.1
    */
   public static List<PropertyDefinition> definitions() {
-    return ImmutableList.of(
+    return asList(
       PropertyDefinition.builder(SMTP_HOST)
         .name("SMTP host")
         .description("For example \"smtp.gmail.com\". Leave blank to disable email sending.")
index 837a098f292873ca3fc8ba403ef246c2d9e0501a..2ae93590224423692a3854942ce38cbb4cac9e5a 100644 (file)
  */
 package org.sonar.api.config;
 
-import com.google.common.collect.ImmutableMap;
-
-import javax.annotation.Nullable;
-
+import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 
 /**
  * @since 3.0
@@ -43,9 +41,9 @@ public final class Encryption {
 
   public Encryption(@Nullable String pathToSecretKey) {
     aesCipher = new AesCipher(pathToSecretKey);
-    ciphers = ImmutableMap.of(
-      BASE64_ALGORITHM, new Base64Cipher(),
-      AES_ALGORITHM, aesCipher);
+    ciphers = new HashMap<>();
+    ciphers.put(BASE64_ALGORITHM, new Base64Cipher());
+    ciphers.put(AES_ALGORITHM, aesCipher);
   }
 
   public void setPathToSecretKey(@Nullable String pathToSecretKey) {
index a55afbed25aa8b2209be06f4f0466e516c36dda1..6b3facf42bde9ec057955b76037f7c982c6a4268 100644 (file)
 package org.sonar.api.config;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Maps;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.utils.DateUtils;
-
-import javax.annotation.Nullable;
-
 import java.io.IOException;
 import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
@@ -36,6 +28,11 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.utils.DateUtils;
 
 /**
  * SonarSource license. This class aims to extract metadata but not to validate or - of course -
@@ -130,10 +127,9 @@ public final class License {
 
   @VisibleForTesting
   static License readPlainText(String data) {
-    Map<String, String> props = Maps.newHashMap();
-    StringReader reader = new StringReader(data);
+    Map<String, String> props = new HashMap<>();
     try {
-      List<String> lines = IOUtils.readLines(reader);
+      List<String> lines = IOUtils.readLines(new StringReader(data));
       for (String line : lines) {
         if (StringUtils.isNotBlank(line) && line.indexOf(':') > 0) {
           String key = StringUtils.substringBefore(line, ":");
@@ -144,9 +140,6 @@ public final class License {
 
     } catch (IOException e) {
       // silently ignore
-
-    } finally {
-      IOUtils.closeQuietly(reader);
     }
     return new License(props);
   }
index 346f00568fb66ddfaa60dfea03188bcaaba5dbe5..5a73567a8083cff5f1235c0cb9c2328a6b62cf61 100644 (file)
  */
 package org.sonar.api.config;
 
-import com.google.common.collect.ImmutableMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
+import static java.util.Collections.unmodifiableMap;
+
 /**
  * In-memory map-based implementation of {@link Settings}. It must be used
  * <b>only for unit tests</b>. This is not the implementation
@@ -61,7 +62,7 @@ public class MapSettings extends Settings {
 
   @Override
   public Map<String, String> getProperties() {
-    return ImmutableMap.copyOf(props);
+    return unmodifiableMap(props);
   }
 
   /**
index 305fb5492c299dc29d355972873d2a3e60d92658..02d64853e8e51fcad7bc58d0051f5ad9378dd14a 100644 (file)
  */
 package org.sonar.api.config;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.EnumMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Function;
@@ -46,8 +42,12 @@ import org.sonar.api.server.ServerSide;
 import org.sonarsource.api.sonarlint.SonarLintSide;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Arrays.asList;
+import static java.util.Arrays.stream;
+import static java.util.Collections.unmodifiableSet;
 import static java.util.Objects.requireNonNull;
 import static org.apache.commons.lang.StringUtils.isBlank;
+import static org.apache.commons.lang.StringUtils.isEmpty;
 import static org.sonar.api.PropertyType.BOOLEAN;
 import static org.sonar.api.PropertyType.FLOAT;
 import static org.sonar.api.PropertyType.INTEGER;
@@ -93,7 +93,7 @@ import static org.sonar.api.PropertyType.SINGLE_SELECT_LIST;
 @ExtensionPoint
 public final class PropertyDefinition {
 
-  private static final Set<String> SUPPORTED_QUALIFIERS = ImmutableSet.of(Qualifiers.PROJECT, Qualifiers.VIEW, Qualifiers.MODULE, Qualifiers.SUBVIEW);
+  private static final Set<String> SUPPORTED_QUALIFIERS = unmodifiableSet(new LinkedHashSet<>(asList(Qualifiers.PROJECT, Qualifiers.VIEW, Qualifiers.MODULE, Qualifiers.SUBVIEW)));
 
   private String key;
   private String defaultValue;
@@ -147,7 +147,7 @@ public final class PropertyDefinition {
       .description(annotation.description())
       .category(annotation.category())
       .type(annotation.type())
-      .options(Arrays.asList(annotation.options()))
+      .options(asList(annotation.options()))
       .multiValues(annotation.multiValues())
       .propertySetKey(annotation.propertySetKey())
       .fields(PropertyFieldDefinition.create(annotation.fields()))
@@ -332,7 +332,7 @@ public final class PropertyDefinition {
 
   @Override
   public String toString() {
-    if (StringUtils.isEmpty(propertySetKey)) {
+    if (isEmpty(propertySetKey)) {
       return key;
     }
     return new StringBuilder().append(propertySetKey).append('|').append(key).toString();
@@ -504,7 +504,7 @@ public final class PropertyDefinition {
     }
 
     private static void addQualifiers(List<String> target, String first, String... rest) {
-      Stream.concat(Stream.of(first), Arrays.stream(rest)).peek(PropertyDefinition.Builder::validateQualifier).forEach(target::add);
+      Stream.concat(Stream.of(first), stream(rest)).peek(PropertyDefinition.Builder::validateQualifier).forEach(target::add);
     }
 
     private static void addQualifiers(List<String> target, List<String> qualifiers) {
@@ -525,12 +525,13 @@ public final class PropertyDefinition {
     }
 
     public Builder options(String first, String... rest) {
-      this.options.addAll(Lists.asList(first, rest));
+      this.options.add(first);
+      stream(rest).forEach(o -> options.add(o));
       return this;
     }
 
     public Builder options(List<String> options) {
-      this.options.addAll(ImmutableList.copyOf(options));
+      this.options.addAll(options);
       return this;
     }
 
@@ -549,12 +550,13 @@ public final class PropertyDefinition {
     }
 
     public Builder fields(PropertyFieldDefinition first, PropertyFieldDefinition... rest) {
-      this.fields.addAll(Lists.asList(first, rest));
+      this.fields.add(first);
+      this.fields.addAll(asList(rest));
       return this;
     }
 
     public Builder fields(List<PropertyFieldDefinition> fields) {
-      this.fields.addAll(ImmutableList.copyOf(fields));
+      this.fields.addAll(fields);
       return this;
     }
 
@@ -582,7 +584,7 @@ public final class PropertyDefinition {
     }
 
     public PropertyDefinition build() {
-      checkArgument(!Strings.isNullOrEmpty(key), "Key must be set");
+      checkArgument(!isEmpty(key), "Key must be set");
       fixType(key, type);
       checkArgument(onQualifiers.isEmpty() || onlyOnQualifiers.isEmpty(), "Cannot define both onQualifiers and onlyOnQualifiers");
       checkArgument(!hidden || (onQualifiers.isEmpty() && onlyOnQualifiers.isEmpty()), "Cannot be hidden and defining qualifiers on which to display");
index 195a9a34977c3f1e4a5b3e2ad45ca2e64a4f91b0..9a0834b62be4bed0b4aaa43ea8a399179e5e1417 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.config;
 
-import com.google.common.base.Strings;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -111,7 +110,7 @@ public final class PropertyDefinitions {
       categories.put(definition.key(), new Category(category));
       String subcategory = StringUtils.defaultIfBlank(definition.subCategory(), category);
       subcategories.put(definition.key(), new SubCategory(subcategory));
-      if (!Strings.isNullOrEmpty(definition.deprecatedKey()) && !definition.deprecatedKey().equals(definition.key())) {
+      if (!StringUtils.isEmpty(definition.deprecatedKey()) && !definition.deprecatedKey().equals(definition.key())) {
         deprecatedKeys.put(definition.deprecatedKey(), definition.key());
       }
     }
index 4886c474bc0c6ee4042798c8e514943d30e2191d..cc82c60087f946cc9eed4f553df8828ece97f0d4 100644 (file)
 package org.sonar.api.config;
 
 import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Nullable;
+import org.apache.commons.lang.StringUtils;
 import org.sonar.api.PropertyField;
 import org.sonar.api.PropertyType;
 
+import static java.util.Arrays.asList;
+
 /**
  * @since 3.3
  */
@@ -57,8 +58,7 @@ public final class PropertyFieldDefinition {
         .indicativeSize(field.indicativeSize())
         .type(field.type())
         .options(field.options())
-        .build()
-        );
+        .build());
     }
     return definitions;
   }
@@ -141,18 +141,18 @@ public final class PropertyFieldDefinition {
     }
 
     public Builder options(String... options) {
-      this.options.addAll(ImmutableList.copyOf(options));
+      this.options.addAll(asList(options));
       return this;
     }
 
     public Builder options(List<String> options) {
-      this.options.addAll(ImmutableList.copyOf(options));
+      this.options.addAll(options);
       return this;
     }
 
     public PropertyFieldDefinition build() {
-      Preconditions.checkArgument(!Strings.isNullOrEmpty(key), "Key must be set");
-      Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "Name must be set");
+      Preconditions.checkArgument(!StringUtils.isEmpty(key), "Key must be set");
+      Preconditions.checkArgument(!StringUtils.isEmpty(name), "Name must be set");
       return new PropertyFieldDefinition(this);
     }
   }
index 1cf9f489f1d1d3824eb423150103e3bde480581e..7e182dcd55561489516172f4db62b6b730de372c 100644 (file)
@@ -19,9 +19,7 @@
  */
 package org.sonar.api.config;
 
-import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -342,8 +340,8 @@ public abstract class Settings {
    */
   public String[] getStringLines(String key) {
     String value = getString(key);
-    if (Strings.isNullOrEmpty(value)) {
-      return ArrayUtils.EMPTY_STRING_ARRAY;
+    if (StringUtils.isEmpty(value)) {
+      return new String[0];
     }
     return value.split("\r?\n|\r", -1);
   }
@@ -392,7 +390,7 @@ public abstract class Settings {
         }
       }
 
-      String escapedValue = Joiner.on(',').join(escaped);
+      String escapedValue = escaped.stream().collect(Collectors.joining(","));
       text = trim(escapedValue);
     }
     return setProperty(key, text);
index 7a14f1fcb58421c752158bd68da61d2baf1b5947..63cd167693b6bd41eae278ace98ba382aa98af35 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.api.database.model;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
 import org.sonar.api.database.BaseIdentifiable;
 
 /**
@@ -78,6 +76,11 @@ public class User extends BaseIdentifiable {
 
   @Override
   public String toString() {
-    return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
+    StringBuilder sb = new StringBuilder("User{");
+    sb.append("login='").append(login).append('\'');
+    sb.append(", name='").append(name).append('\'');
+    sb.append(", email='").append(email).append('\'');
+    sb.append('}');
+    return sb.toString();
   }
 }
index 0d95b7427d0945b8517ed84a4a5a7bb44c11ad3b..ab1a0314381633a3ac815c68c1ea54f08f130157 100644 (file)
@@ -19,9 +19,6 @@
  */
 package org.sonar.api.design;
 
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
 import org.sonar.api.resources.Resource;
 import org.sonar.graph.Edge;
 
@@ -114,35 +111,37 @@ public class Dependency implements Edge<Resource> {
   }
 
   @Override
-  public boolean equals(Object obj) {
-    if (!(obj instanceof Dependency)) {
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
       return false;
     }
-    if (this == obj) {
-      return true;
+    Dependency that = (Dependency) o;
+    if (!from.equals(that.from)) {
+      return false;
     }
-    Dependency other = (Dependency) obj;
-    return new EqualsBuilder()
-      .append(from, other.from)
-      .append(to, other.to)
-      .isEquals();
+    return to.equals(that.to);
   }
 
   @Override
   public int hashCode() {
-    return new HashCodeBuilder(17, 37)
-      .append(from)
-      .append(to)
-      .toHashCode();
+    int result = from.hashCode();
+    result = 31 * result + to.hashCode();
+    return result;
   }
 
   @Override
   public String toString() {
-    return new ToStringBuilder(this)
-      .append("from", from)
-      .append("to", to)
-      .append("weight", weight)
-      .append("usage", usage)
-      .toString();
+    StringBuilder sb = new StringBuilder("Dependency{");
+    sb.append("from=").append(from);
+    sb.append(", to=").append(to);
+    sb.append(", usage='").append(usage).append('\'');
+    sb.append(", weight=").append(weight);
+    sb.append(", parent=").append(parent);
+    sb.append(", id=").append(id);
+    sb.append('}');
+    return sb.toString();
   }
 }
index 726f72dadd3f1ff9c49af5108ad0e6389831f1de..47aebc9e8b028d33009fbc4eae82cb5a1b26c280 100644 (file)
  */
 package org.sonar.api.issue;
 
-import com.google.common.collect.ImmutableList;
-
 import java.util.List;
 
+import static java.util.Arrays.asList;
+
 /**
  * @since 3.6
  */
@@ -43,5 +43,5 @@ public interface DefaultTransitions {
   /**
    * @since 4.4
    */
-  List<String> ALL = ImmutableList.of(CONFIRM, UNCONFIRM, REOPEN, RESOLVE, FALSE_POSITIVE, WONT_FIX, CLOSE);
+  List<String> ALL = asList(CONFIRM, UNCONFIRM, REOPEN, RESOLVE, FALSE_POSITIVE, WONT_FIX, CLOSE);
 }
index 001a08dd7f9554466cfd4778e56ba06b00733c91..314d704cba2ff04d8a5c2f73917da6bcdb2702a6 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.issue;
 
-import com.google.common.collect.ImmutableList;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Date;
@@ -30,6 +29,8 @@ import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.utils.Duration;
 
+import static java.util.Arrays.asList;
+
 /**
  * @since 3.6
  */
@@ -67,14 +68,14 @@ public interface Issue extends Serializable {
    */
   String RESOLUTION_WONT_FIX = "WONTFIX";
 
-  List<String> RESOLUTIONS = ImmutableList.of(RESOLUTION_FALSE_POSITIVE, RESOLUTION_WONT_FIX, RESOLUTION_FIXED, RESOLUTION_REMOVED);
+  List<String> RESOLUTIONS = asList(RESOLUTION_FALSE_POSITIVE, RESOLUTION_WONT_FIX, RESOLUTION_FIXED, RESOLUTION_REMOVED);
 
   /**
    * Return all available statuses
    *
    * @since 4.4
    */
-  List<String> STATUSES = ImmutableList.of(STATUS_OPEN, STATUS_CONFIRMED, STATUS_REOPENED, STATUS_RESOLVED, STATUS_CLOSED);
+  List<String> STATUSES = asList(STATUS_OPEN, STATUS_CONFIRMED, STATUS_REOPENED, STATUS_RESOLVED, STATUS_CLOSED);
 
   /**
    * Unique generated key. It looks like "d2de809c-1512-4ae2-9f34-f5345c9f1a13".
index 02020400c945c9a48c45331f8b7fa32e64ab43e4..d5b3a59a33a2957b6a7588eab7daf1016430a4ca 100644 (file)
  */
 package org.sonar.api.issue;
 
-import org.sonar.api.scan.issue.filter.FilterableIssue;
-
-import org.sonar.api.scan.issue.filter.IssueFilter;
-import com.google.common.collect.Maps;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
+import org.sonar.api.scan.issue.filter.FilterableIssue;
+import org.sonar.api.scan.issue.filter.IssueFilter;
 import org.sonar.api.scan.issue.filter.IssueFilterChain;
 
-import java.util.Map;
-import java.util.Set;
-
 /**
  * Issue filter used to ignore issues created on lines commented with the tag "NOSONAR".
  * <br>
@@ -43,7 +41,7 @@ import java.util.Set;
  */
 public class NoSonarFilter implements IssueFilter {
 
-  private final Map<String, Set<Integer>> noSonarLinesByResource = Maps.newHashMap();
+  private final Map<String, Set<Integer>> noSonarLinesByResource = new HashMap<>();
 
   /**
    * @deprecated since 5.0 use {@link #noSonarInFile(InputFile, Set)}
index 41c865c11a87caf4d4899614a2ff2165110dc051..6de331f3026cf71941dd58344540c95a1f56ae86 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
 import org.sonar.api.issue.Issue;
 
 /**
  * @since 3.6
  */
-@Beta
 public interface Condition {
 
   boolean matches(Issue issue);
index 345125214175c3bcafd04fd5d0c73a30636d59bc..e84980371e0db683349d1637d44e3536cad72090 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
+import org.apache.commons.lang.StringUtils;
 import org.sonar.api.issue.Issue;
 
+import static org.apache.commons.lang.StringUtils.isEmpty;
+
 /**
  * @since 3.6
  */
-@Beta
 public final class HasIssuePropertyCondition implements Condition {
 
   private final String propertyKey;
 
   public HasIssuePropertyCondition(String propertyKey) {
-    Preconditions.checkArgument(!Strings.isNullOrEmpty(propertyKey));
+    Preconditions.checkArgument(!isEmpty(propertyKey));
     this.propertyKey = propertyKey;
   }
 
@@ -43,6 +43,6 @@ public final class HasIssuePropertyCondition implements Condition {
 
   @Override
   public boolean matches(Issue issue) {
-    return !Strings.isNullOrEmpty(issue.attribute(propertyKey));
+    return !StringUtils.isEmpty(issue.attribute(propertyKey));
   }
 }
index faf9461b7c94873524a36955f6b78658f31a1e4d..8ccd0ff91b3c1d1eb1a8bbf6f7c55e4c1d2fceec 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableSet;
+import java.util.HashSet;
+import java.util.Set;
 import org.sonar.api.issue.Issue;
 
-import java.util.Set;
+import static java.util.Arrays.asList;
 
 /**
  * @since 3.6
  */
-@Beta
 public class HasResolution implements Condition {
 
   private final Set<String> resolutions;
 
   public HasResolution(String first, String... others) {
-    this.resolutions = ImmutableSet.<String>builder().add(first).add(others).build();
+    this.resolutions = new HashSet<>();
+    this.resolutions.add(first);
+    this.resolutions.addAll(asList(others));
   }
 
   @Override
index 7ac7436d66ecc27e23c5051eb9469969d0dee661..bf24ff96782bd72c764d5b0e98b42b8af86c4057 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableSet;
+import java.util.HashSet;
+import java.util.Set;
 import org.sonar.api.issue.Issue;
 
-import java.util.Set;
+import static java.util.Arrays.asList;
 
 /**
  * @since 3.6
  */
-@Beta
 public class HasStatus implements Condition {
 
-  private final Set<String> status;
+  private final Set<String> statuses;
 
   public HasStatus(String first, String... others) {
-    this.status = ImmutableSet.<String>builder().add(first).add(others).build();
+    this.statuses = new HashSet<>();
+    this.statuses.add(first);
+    this.statuses.addAll(asList(others));
   }
 
   @Override
   public boolean matches(Issue issue) {
-    return issue.status() != null && status.contains(issue.status());
+    return issue.status() != null && statuses.contains(issue.status());
   }
 }
index 4ff29ac17dc31b9fb3ff33cd954d7e00487b0068..063a32e84763d2fba4f7f610fed2fbea83961bec 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
 import org.sonar.api.issue.Issue;
 
 /**
  * @since 3.6
  */
-@Beta
 public class IsUnResolved implements Condition {
 
   @Override
index 65bee54da3fb6c0d1fa6b94c6a7a5a2bfd14fcee..15cc2b6aa35b23c5ae918ed26dac56afd71b51ca 100644 (file)
  */
 package org.sonar.api.issue.condition;
 
-import com.google.common.annotations.Beta;
 import org.sonar.api.issue.Issue;
 
 /**
  * @since 3.6
  */
-@Beta
 public class NotCondition implements Condition {
   private final Condition condition;
 
index 4a94a89890cf623a1786bc6b15726b685919587c..484055b570bebce28a977caed13d16f7a0c14523 100644 (file)
  */
 package org.sonar.api.measures;
 
-import com.google.common.collect.Maps;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.SortedMap;
+import java.util.TreeMap;
 import org.sonar.api.batch.sensor.SensorContext;
 import org.sonar.api.utils.KeyValueFormat;
 
@@ -47,9 +47,9 @@ public final class CoverageMeasuresBuilder {
   private int totalCoveredLines = 0;
   private int totalConditions = 0;
   private int totalCoveredConditions = 0;
-  private SortedMap<Integer, Integer> hitsByLine = Maps.newTreeMap();
-  private SortedMap<Integer, Integer> conditionsByLine = Maps.newTreeMap();
-  private SortedMap<Integer, Integer> coveredConditionsByLine = Maps.newTreeMap();
+  private SortedMap<Integer, Integer> hitsByLine = new TreeMap<>();
+  private SortedMap<Integer, Integer> conditionsByLine = new TreeMap<>();
+  private SortedMap<Integer, Integer> coveredConditionsByLine = new TreeMap<>();
 
   private CoverageMeasuresBuilder() {
     // use the factory
index cb33540a68fa223fc0e0582524d62c8eb3f2c7f0..58dec513e1661276b2e1af7311538aa1cdba0171 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.measures;
 
-import com.google.common.annotations.Beta;
 import java.io.Serializable;
 import java.util.Date;
 import javax.annotation.CheckForNull;
@@ -612,7 +611,6 @@ public class Measure<G extends Serializable> implements Serializable {
    * @since 2.14
    */
   @CheckForNull
-  @Beta
   public Integer getPersonId() {
     return personId;
   }
@@ -620,7 +618,6 @@ public class Measure<G extends Serializable> implements Serializable {
   /**
    * @since 2.14
    */
-  @Beta
   public Measure<G> setPersonId(@Nullable Integer i) {
     this.personId = i;
     return this;
index 44f44912bd12aaa2a9013792c10f3389f41d8201..eb15f033dd6f6eca0fbb3babc7cd85a45dc019c7 100644 (file)
  */
 package org.sonar.api.measures;
 
-import com.google.common.base.Function;
 import com.google.common.collect.SortedMultiset;
 import com.google.common.collect.TreeMultiset;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 import javax.annotation.Nullable;
 import org.apache.commons.lang.NumberUtils;
 import org.sonar.api.utils.KeyValueFormat;
index 91f48b5a9365b4236c6c0010ff991598244f088a..a68a307b00210047f8f2b2272510aab90e933336 100644 (file)
  */
 package org.sonar.api.notifications;
 
-import com.google.common.collect.Maps;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
 
 /**
  * This class represents a notification that will be delivered to users. This is a general concept and it has no
@@ -43,7 +41,7 @@ public class Notification implements Serializable {
   private static final String DEFAULT_MESSAGE_KEY = "default_message";
 
   private final String type;
-  private final Map<String, String> fields = Maps.newHashMap();
+  private final Map<String, String> fields = new HashMap<>();
 
   /**
    * <p>
index aa39e70881f1a6e0778086d4798d94a4143ef356..3bbea912c464f1df6922e8d6fef772dc6eb87a46 100644 (file)
  */
 package org.sonar.api.platform;
 
-import com.google.common.base.Preconditions;
+import javax.annotation.Nullable;
 import org.sonar.api.ExtensionPoint;
 import org.sonar.api.server.ServerSide;
 
-import javax.annotation.Nullable;
+import static java.util.Objects.requireNonNull;
 
 /**
  * @since 3.2
@@ -38,8 +38,8 @@ public interface NewUserHandler {
     private String email;
 
     private Context(String login, String name, @Nullable String email) {
-      Preconditions.checkNotNull(login);
-      Preconditions.checkNotNull(name);
+      requireNonNull(login);
+      requireNonNull(name);
       this.login = login;
       this.name = name;
       this.email = email;
index 36e058071dd0dc14397566a649e9cc078402d939..fa85ab21af470f0ab9f1a413ff15e36ca4e0c198 100644 (file)
  */
 package org.sonar.api.profiles;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.apache.commons.lang.StringUtils;
@@ -306,7 +304,7 @@ public class RulesProfile implements Cloneable {
    * @param optionalSeverity if null, then the default rule severity is used
    */
   public ActiveRule activateRule(final Rule rule, @Nullable RulePriority optionalSeverity) {
-    if (Iterables.any(activeRules, new MatchRule(rule))) {
+    if (activeRules.stream().anyMatch(ar -> ar.getRule().equals(rule))) {
       throw MessageException.of(String.format(
         "The definition of the profile '%s' (language '%s') contains multiple occurrences of the '%s:%s' rule. The plugin which declares this profile should fix this.",
         getName(), getLanguage(), rule.getRepositoryKey(), rule.getKey()));
@@ -341,7 +339,9 @@ public class RulesProfile implements Cloneable {
     RulesProfile clone = RulesProfile.create(getName(), getLanguage());
     clone.setDefaultProfile(getDefaultProfile());
     if (activeRules != null && !activeRules.isEmpty()) {
-      clone.setActiveRules(Lists.transform(activeRules, CloneFunction.INSTANCE));
+      clone.setActiveRules(activeRules.stream()
+        .map(ar -> (ActiveRule) ar.clone())
+        .collect(Collectors.toList()));
     }
     return clone;
   }
@@ -367,16 +367,8 @@ public class RulesProfile implements Cloneable {
     }
 
     @Override
-    public boolean apply(ActiveRule input) {
+    public boolean test(ActiveRule input) {
       return input.getRule().equals(rule);
     }
   }
-
-  private enum CloneFunction implements Function<ActiveRule, ActiveRule> {
-    INSTANCE;
-    @Override
-    public ActiveRule apply(ActiveRule input) {
-      return (ActiveRule) input.clone();
-    }
-  }
 }
index 0cfc1d8d9b8d64bfb0ad94db599c43710cd46810..19d90b8ddef2fcd944e8aa2651a6ccad102fb703 100644 (file)
  */
 package org.sonar.api.resources;
 
-import com.google.common.collect.Maps;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.lang.ArrayUtils;
@@ -44,7 +44,7 @@ public class Languages {
 
   private static final Logger LOG = Loggers.get(Languages.class);
 
-  private final Map<String, Language> map = Maps.newLinkedHashMap();
+  private final Map<String, Language> map = new LinkedHashMap<>();
 
   /**
    * Creates a list of languages
index 14c8cf1082067e09f34efb0e54a2cda608ec2a51..53c8bd4090331758acfd15a86d809c297a7a7b26 100644 (file)
 package org.sonar.api.resources;
 
 import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import com.google.common.collect.Maps;
+import java.util.HashMap;
 import java.util.Map;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
 
+import static java.util.Objects.requireNonNull;
+import static org.apache.commons.lang.StringUtils.isEmpty;
+
 /**
  * <p>Experimental extension to declare types of resources.
  * <p>
@@ -60,7 +62,7 @@ public class ResourceType {
     this.qualifier = builder.qualifier;
     this.iconPath = builder.iconPath;
     this.hasSourceCode = builder.hasSourceCode;
-    this.properties = Maps.newHashMap(builder.properties);
+    this.properties = new HashMap<>(builder.properties);
   }
 
   /**
@@ -91,7 +93,7 @@ public class ResourceType {
   }
 
   public boolean hasProperty(String key) {
-    Preconditions.checkNotNull(key);
+    requireNonNull(key);
     return properties.containsKey(key);
   }
 
@@ -102,7 +104,7 @@ public class ResourceType {
    * @since 3.0
    */
   public String getStringProperty(String key) {
-    Preconditions.checkNotNull(key);
+    requireNonNull(key);
     return properties.get(key);
   }
 
@@ -113,7 +115,7 @@ public class ResourceType {
    * @since 3.0
    */
   public boolean getBooleanProperty(String key) {
-    Preconditions.checkNotNull(key);
+    requireNonNull(key);
     String value = properties.get(key);
     return value != null && Boolean.parseBoolean(value);
   }
@@ -145,7 +147,7 @@ public class ResourceType {
    * Creates a new {@link Builder}
    */
   public static Builder builder(String qualifier) {
-    Preconditions.checkNotNull(qualifier);
+    requireNonNull(qualifier);
     Preconditions.checkArgument(qualifier.length() <= 10, "Qualifier is limited to 10 characters");
     return new Builder(qualifier);
   }
@@ -157,7 +159,7 @@ public class ResourceType {
     private String qualifier;
     private String iconPath;
     private boolean hasSourceCode = false;
-    private final Map<String, String> properties = Maps.newHashMap();
+    private final Map<String, String> properties = new HashMap<>();
 
     /**
      * Creates a new {@link Builder}
@@ -198,8 +200,8 @@ public class ResourceType {
      * @since 3.0
      */
     public Builder setProperty(String key, String value) {
-      Preconditions.checkNotNull(key);
-      Preconditions.checkNotNull(value);
+      requireNonNull(key);
+      requireNonNull(value);
       properties.put(key, value);
       return this;
     }
@@ -215,7 +217,7 @@ public class ResourceType {
      * Creates an instance of {@link ResourceType} based on all information given to the builder.
      */
     public ResourceType build() {
-      if (Strings.isNullOrEmpty(iconPath)) {
+      if (isEmpty(iconPath)) {
         iconPath = "/images/q/" + qualifier + ".png";
       }
       return new ResourceType(this);
index 2fbaf86d22ff3e1c75f9db1087a4524856d81434..11c689ea8d4cb1787b5b19662d25af0713219065 100644 (file)
  */
 package org.sonar.api.resources;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ListMultimap;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.ce.ComputeEngineSide;
 import org.sonar.api.server.ServerSide;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Objects.requireNonNull;
+
 /**
  * @since 2.14
  */
@@ -47,7 +48,7 @@ public class ResourceTypeTree {
   private final ResourceType root;
 
   private ResourceTypeTree(Builder builder) {
-    this.types = ImmutableList.copyOf(builder.types);
+    this.types = unmodifiableList(new ArrayList<>(builder.types));
     this.relations = ImmutableListMultimap.copyOf(builder.relations);
     this.root = builder.root;
   }
@@ -65,12 +66,10 @@ public class ResourceTypeTree {
   }
 
   public List<String> getLeaves() {
-    return ImmutableList.copyOf(Collections2.filter(relations.values(), new Predicate<String>() {
-      @Override
-      public boolean apply(String qualifier) {
-        return relations.get(qualifier).isEmpty();
-      }
-    }));
+    return unmodifiableList(relations.values()
+      .stream()
+      .filter(qualifier -> relations.get(qualifier).isEmpty())
+      .collect(Collectors.toList()));
   }
 
   @Override
@@ -91,16 +90,16 @@ public class ResourceTypeTree {
     }
 
     public Builder addType(ResourceType type) {
-      Preconditions.checkNotNull(type);
-      Preconditions.checkArgument(!types.contains(type), String.format("%s is already registered", type.getQualifier()));
+      requireNonNull(type);
+      checkArgument(!types.contains(type), String.format("%s is already registered", type.getQualifier()));
       types.add(type);
       return this;
     }
 
     public Builder addRelations(String parentQualifier, String... childrenQualifiers) {
-      Preconditions.checkNotNull(parentQualifier);
-      Preconditions.checkNotNull(childrenQualifiers);
-      Preconditions.checkArgument(childrenQualifiers.length > 0, "childrenQualifiers can't be empty");
+      requireNonNull(parentQualifier);
+      requireNonNull(childrenQualifiers);
+      checkArgument(childrenQualifiers.length > 0, "childrenQualifiers can't be empty");
       relations.putAll(parentQualifier, Arrays.asList(childrenQualifiers));
       return this;
     }
index 10c15a143465b35fd22afa57e587401ed65ac722..dcbfe98c801610f362539e7d66b78ab7a37e4616 100644 (file)
 package org.sonar.api.resources;
 
 import com.google.common.annotations.Beta;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import javax.annotation.Nullable;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import org.sonar.api.ce.ComputeEngineSide;
 import org.sonar.api.server.ServerSide;
 
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
+import static java.util.Collections.unmodifiableSet;
+import static java.util.Objects.requireNonNull;
+
 /**
  * @since 2.14
  */
@@ -59,11 +58,11 @@ public class ResourceTypes {
   }
 
   public ResourceTypes(ResourceTypeTree[] trees) {
-    Preconditions.checkNotNull(trees);
+    requireNonNull(trees);
 
-    Map<String, ResourceTypeTree> treeMap = Maps.newHashMap();
-    Map<String, ResourceType> typeMap = Maps.newLinkedHashMap();
-    Collection<ResourceType> rootsSet = Sets.newHashSet();
+    Map<String, ResourceTypeTree> treeMap = new LinkedHashMap<>();
+    Map<String, ResourceType> typeMap = new LinkedHashMap<>();
+    Collection<ResourceType> rootsSet = new LinkedHashSet<>();
 
     for (ResourceTypeTree tree : trees) {
       rootsSet.add(tree.getRootType());
@@ -75,9 +74,9 @@ public class ResourceTypes {
         typeMap.put(type.getQualifier(), type);
       }
     }
-    treeByQualifier = ImmutableMap.copyOf(treeMap);
-    typeByQualifier = ImmutableMap.copyOf(typeMap);
-    rootTypes = ImmutableList.copyOf(rootsSet);
+    treeByQualifier = unmodifiableMap(new LinkedHashMap<>(treeMap));
+    typeByQualifier = unmodifiableMap(new LinkedHashMap<>(typeMap));
+    rootTypes = unmodifiableList(new ArrayList<>(rootsSet));
 
     List<ResourceType> mutableOrderedTypes = new ArrayList<>();
     ResourceType view = null;
@@ -98,7 +97,7 @@ public class ResourceTypes {
       mutableOrderedTypes.add(0, view);
     }
 
-    orderedTypes = ImmutableSet.copyOf(mutableOrderedTypes);
+    orderedTypes = unmodifiableSet(new LinkedHashSet<>(mutableOrderedTypes));
   }
 
   public ResourceType get(String qualifier) {
@@ -119,62 +118,33 @@ public class ResourceTypes {
   }
 
   public Collection<ResourceType> getAll(Predicate<ResourceType> predicate) {
-    return Collections2.filter(typeByQualifier.values(), predicate);
-  }
-
-  private static class PropertyKeyPredicate implements Predicate<ResourceType> {
-    private final String propertyKey;
-
-    public PropertyKeyPredicate(String propertyKey) {
-      this.propertyKey = propertyKey;
-    }
-
-    @Override
-    public boolean apply(@Nullable ResourceType input) {
-      return input != null && input.hasProperty(propertyKey);
-    }
+    return typeByQualifier.values().stream()
+      .filter(predicate)
+      .collect(Collectors.toList());
   }
 
-  public Collection<ResourceType> getAllWithPropertyKey(final String propertyKey) {
-    return Collections2.filter(typeByQualifier.values(), new PropertyKeyPredicate(propertyKey));
+  public Collection<ResourceType> getAllWithPropertyKey(String propertyKey) {
+    return typeByQualifier.values()
+      .stream()
+      .filter(Objects::nonNull)
+      .filter(input -> input.hasProperty(propertyKey))
+      .collect(Collectors.toList());
   }
 
-  private static class StringPropertyValuePredicate implements Predicate<ResourceType> {
-    private final String propertyValue;
-    private final String propertyKey;
-
-    public StringPropertyValuePredicate(String propertyValue, String propertyKey) {
-      this.propertyValue = propertyValue;
-      this.propertyKey = propertyKey;
-    }
-
-    @Override
-    public boolean apply(@Nullable ResourceType input) {
-      return input != null && Objects.equals(propertyValue, input.getStringProperty(propertyKey));
-    }
-  }
-
-  public Collection<ResourceType> getAllWithPropertyValue(final String propertyKey, final String propertyValue) {
-    return Collections2.filter(typeByQualifier.values(), new StringPropertyValuePredicate(propertyValue, propertyKey));
-  }
-
-  private static class BooleanPropertyValuePredicate implements Predicate<ResourceType> {
-    private final String propertyKey;
-    private final boolean propertyValue;
-
-    public BooleanPropertyValuePredicate(String propertyKey, boolean propertyValue) {
-      this.propertyKey = propertyKey;
-      this.propertyValue = propertyValue;
-    }
-
-    @Override
-    public boolean apply(@Nullable ResourceType input) {
-      return input != null && input.getBooleanProperty(propertyKey) == propertyValue;
-    }
+  public Collection<ResourceType> getAllWithPropertyValue(String propertyKey, String propertyValue) {
+    return typeByQualifier.values()
+      .stream()
+      .filter(Objects::nonNull)
+      .filter(input -> Objects.equals(propertyValue, input.getStringProperty(propertyKey)))
+      .collect(Collectors.toList());
   }
 
-  public Collection<ResourceType> getAllWithPropertyValue(final String propertyKey, final boolean propertyValue) {
-    return Collections2.filter(typeByQualifier.values(), new BooleanPropertyValuePredicate(propertyKey, propertyValue));
+  public Collection<ResourceType> getAllWithPropertyValue(String propertyKey, boolean propertyValue) {
+    return typeByQualifier.values()
+      .stream()
+      .filter(Objects::nonNull)
+      .filter(input -> input.getBooleanProperty(propertyKey) == propertyValue)
+      .collect(Collectors.toList());
   }
 
   public List<String> getChildrenQualifiers(String qualifier) {
@@ -186,7 +156,10 @@ public class ResourceTypes {
   }
 
   public List<ResourceType> getChildren(String qualifier) {
-    return Lists.transform(getChildrenQualifiers(qualifier), typeByQualifier::get);
+    return getChildrenQualifiers(qualifier)
+      .stream()
+      .map(typeByQualifier::get)
+      .collect(Collectors.toList());
   }
 
   public List<String> getLeavesQualifiers(String qualifier) {
index 69f3cce12d2f663cce31956b9d3aec0ec570130a..04a78395077deae654ebf52debbf26ca0beeaaaf 100644 (file)
 package org.sonar.api.rule;
 
 import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
 import java.io.Serializable;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
 
+import static org.apache.commons.lang.StringUtils.isEmpty;
+
 /**
  * Key of a rule. Unique among all the rule repositories.
  *
@@ -51,8 +52,8 @@ public class RuleKey implements Serializable, Comparable<RuleKey> {
    * Create a key. Parameters are NOT null.
    */
   public static RuleKey of(String repository, String rule) {
-    Preconditions.checkArgument(!Strings.isNullOrEmpty(repository), "Repository must be set");
-    Preconditions.checkArgument(!Strings.isNullOrEmpty(rule), "Rule must be set");
+    Preconditions.checkArgument(!isEmpty(repository), "Repository must be set");
+    Preconditions.checkArgument(!isEmpty(rule), "Rule must be set");
     return new RuleKey(repository, rule);
   }
 
index 9b43fb3fea471c1d864727d7e22d63884273aed1..385b3a2b32e6cd84114f6df215a1278162132e43 100644 (file)
  */
 package org.sonar.api.rule;
 
-import com.google.common.collect.ImmutableList;
-
 import java.util.List;
 
+import static java.util.Arrays.asList;
+
 /**
  * @since 3.6
  */
@@ -37,7 +37,7 @@ public final class Severity {
   /**
    * All the supported severity values, ordered from {@link #INFO} to {@link #BLOCKER}.
    */
-  public static final List<String> ALL = ImmutableList.of(INFO, MINOR, MAJOR, CRITICAL, BLOCKER);
+  public static final List<String> ALL = asList(INFO, MINOR, MAJOR, CRITICAL, BLOCKER);
 
   private Severity() {
     // utility
index fd79d081ca355ceb26ba781520ba1d37da536261..d4d73b831f0cb90307cc657ccbbfad40a31e25a6 100644 (file)
  */
 package org.sonar.api.rules;
 
-import com.google.common.collect.Lists;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.annotation.CheckForNull;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
@@ -287,11 +287,14 @@ public class ActiveRule implements Cloneable {
     final ActiveRule clone = new ActiveRule(getRulesProfile(), getRule(), getSeverity());
     clone.setInheritance(getInheritance());
     if (activeRuleParams != null && !activeRuleParams.isEmpty()) {
-      clone.setActiveRuleParams(Lists.transform(activeRuleParams, input -> {
-        ActiveRuleParam activeRuleParamClone = (ActiveRuleParam) input.clone();
-        activeRuleParamClone.setActiveRule(clone);
-        return activeRuleParamClone;
-      }));
+      clone.setActiveRuleParams(activeRuleParams
+        .stream()
+        .map(input -> {
+          ActiveRuleParam activeRuleParamClone = (ActiveRuleParam) input.clone();
+          activeRuleParamClone.setActiveRule(clone);
+          return activeRuleParamClone;
+        })
+        .collect(Collectors.toList()));
     }
     return clone;
   }
index 073b18bc5cc9a628433ec587105dcedc566f3e91..edf566ad40330221e8b53f6b8399c2585c697a81 100644 (file)
@@ -23,8 +23,8 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
 import java.lang.reflect.Field;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import org.apache.commons.lang.StringUtils;
@@ -49,7 +49,7 @@ public final class AnnotationRuleParser {
   private static final Logger LOG = Loggers.get(AnnotationRuleParser.class);
 
   public List<Rule> parse(String repositoryKey, Collection<Class> annotatedClasses) {
-    List<Rule> rules = Lists.newArrayList();
+    List<Rule> rules = new ArrayList<>();
     for (Class annotatedClass : annotatedClasses) {
       rules.add(create(repositoryKey, annotatedClass));
     }
index 0a5d9f589b19072a56c8ff46421a91d5695f6442..f09f0d35c8c8309e33823480a7fbdbe2f6c70469 100644 (file)
@@ -20,9 +20,9 @@
 package org.sonar.api.rules;
 
 import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import javax.annotation.CheckForNull;
@@ -36,6 +36,9 @@ import org.sonar.api.rule.RuleKey;
 import org.sonar.api.utils.SonarException;
 import org.sonar.check.Cardinality;
 
+import static java.util.Arrays.asList;
+import static java.util.Collections.unmodifiableSet;
+
 public class Rule {
 
   /**
@@ -63,7 +66,7 @@ public class Rule {
    *
    * @since 3.6
    */
-  private static final Set<String> STATUS_LIST = ImmutableSet.of(STATUS_READY, STATUS_BETA, STATUS_DEPRECATED, STATUS_REMOVED);
+  private static final Set<String> STATUS_LIST = unmodifiableSet(new LinkedHashSet<>(asList(STATUS_READY, STATUS_BETA, STATUS_DEPRECATED, STATUS_REMOVED)));
 
   private Integer id;
 
index 4ecab3affd29ecb1e4ed15bb3b7bd5a4e9d263ad..db40c28879dee7770104580960a4cdb64672fc4b 100644 (file)
  */
 package org.sonar.api.rules;
 
-import com.google.common.base.Function;
-import java.util.Arrays;
+import java.util.LinkedHashSet;
 import java.util.Set;
-import javax.annotation.Nonnull;
 
-import static com.google.common.collect.FluentIterable.from;
 import static java.lang.String.format;
+import static java.util.Arrays.stream;
+import static java.util.Collections.unmodifiableSet;
+import static java.util.stream.Collectors.toList;
 
 public enum RuleType {
   CODE_SMELL(1), BUG(2), VULNERABILITY(3);
 
-  private static final Set<String> ALL_NAMES = from(Arrays.asList(values())).transform(ToName.INSTANCE).toSet();
+  private static final Set<String> ALL_NAMES = unmodifiableSet(new LinkedHashSet<>(stream(values())
+    .map(Enum::name)
+    .collect(toList())));
 
   private final int dbConstant;
 
@@ -59,13 +61,4 @@ public enum RuleType {
     throw new IllegalArgumentException(format("Unsupported type value : %d", dbConstant));
   }
 
-  private enum ToName implements Function<RuleType, String> {
-    INSTANCE;
-
-    @Override
-    public String apply(@Nonnull RuleType input) {
-      return input.name();
-    }
-  }
-
 }
index 95c4b55ecdb0f25bd66618fb1f82ea5964944cff..093e3db899f00825952658f9cf70c662ca949a14 100644 (file)
@@ -21,21 +21,18 @@ package org.sonar.api.rules;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.io.Closeables;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.CharEncoding;
 import org.apache.commons.lang.StringUtils;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
@@ -46,6 +43,8 @@ import org.sonar.api.server.ServerSide;
 import org.sonar.api.utils.SonarException;
 import org.sonar.check.Cardinality;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 /**
  * @since 2.3
  * @deprecated in 4.2. Replaced by org.sonar.api.server.rule.RulesDefinition and org.sonar.api.server.rule.RulesDefinitionXmlLoader
@@ -57,16 +56,11 @@ public final class XMLRuleParser {
   private static final Map<String, String> TYPE_MAP = typeMapWithDeprecatedValues();
 
   public List<Rule> parse(File file) {
-    Reader reader = null;
-    try {
-      reader = new InputStreamReader(FileUtils.openInputStream(file), CharEncoding.UTF_8);
+    try (Reader reader = new InputStreamReader(FileUtils.openInputStream(file), UTF_8)) {
       return parse(reader);
 
     } catch (IOException e) {
       throw new SonarException("Fail to load the file: " + file, e);
-
-    } finally {
-      Closeables.closeQuietly(reader);
     }
   }
 
@@ -74,16 +68,11 @@ public final class XMLRuleParser {
    * Warning : the input stream is closed in this method
    */
   public List<Rule> parse(InputStream input) {
-    Reader reader = null;
-    try {
-      reader = new InputStreamReader(input, CharEncoding.UTF_8);
+    try (Reader reader = new InputStreamReader(input, UTF_8)) {
       return parse(reader);
 
     } catch (IOException e) {
       throw new SonarException("Fail to load the xml stream", e);
-
-    } finally {
-      Closeables.closeQuietly(reader);
     }
   }
 
@@ -128,7 +117,7 @@ public final class XMLRuleParser {
       rule.setSeverity(RulePriority.valueOf(StringUtils.trim(priorityAttribute)));
     }
 
-    List<String> tags = Lists.newArrayList();
+    List<String> tags = new ArrayList<>();
     SMInputCursor cursor = ruleC.childElementCursor();
 
     while (cursor.getNext() != null) {
@@ -200,13 +189,13 @@ public final class XMLRuleParser {
         param.setDefaultValue(propText);
       }
     }
-    if (Strings.isNullOrEmpty(param.getKey())) {
+    if (StringUtils.isEmpty(param.getKey())) {
       throw new SonarException("Node <key> is missing in <param>");
     }
   }
 
   private static Map<String, String> typeMapWithDeprecatedValues() {
-    Map<String, String> map = Maps.newHashMap();
+    Map<String, String> map = new HashMap<>();
     map.put("i", PropertyType.INTEGER.name());
     map.put("s", PropertyType.STRING.name());
     map.put("b", PropertyType.BOOLEAN.name());
index e0788edf563fde43ac1d749581837b5b4b6d497c..1a071e6275893dda450df69d9362a45ea8035271 100644 (file)
  */
 package org.sonar.api.scan.filesystem;
 
-import com.google.common.collect.ObjectArrays;
+import java.util.Arrays;
+import java.util.stream.Stream;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.CoreProperties;
+import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.config.Settings;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Configuration of file inclusions and exclusions.
  * <p>Plugins must not extend nor instantiate this class. An instance is injected at
@@ -52,14 +50,11 @@ public class FileExclusions {
   }
 
   private String[] inclusions(String propertyKey) {
-    String[] patterns = sanitize(settings.getStringArray(propertyKey));
-    List<String> list = new ArrayList<>();
-    for (String pattern : patterns) {
-      if (!"**/*".equals(pattern) && !"file:**/*".equals(pattern)) {
-        list.add(pattern);
-      }
-    }
-    return list.toArray(new String[list.size()]);
+    return Arrays.stream(settings.getStringArray(propertyKey))
+      .map(StringUtils::trim)
+      .filter(s -> !"**/*".equals(s))
+      .filter(s -> !"file:**/*".equals(s))
+      .toArray(String[]::new);
   }
 
   public String[] sourceExclusions() {
@@ -73,13 +68,8 @@ public class FileExclusions {
   private String[] exclusions(String globalExclusionsProperty, String exclusionsProperty) {
     String[] globalExclusions = settings.getStringArray(globalExclusionsProperty);
     String[] exclusions = settings.getStringArray(exclusionsProperty);
-    return sanitize(ObjectArrays.concat(globalExclusions, exclusions, String.class));
-  }
-
-  private static String[] sanitize(String[] patterns) {
-    for (int i = 0; i < patterns.length; i++) {
-      patterns[i] = StringUtils.trim(patterns[i]);
-    }
-    return patterns;
+    return Stream.concat(Arrays.stream(globalExclusions), Arrays.stream(exclusions))
+      .map(StringUtils::trim)
+      .toArray(String[]::new);
   }
 }
index 65d565f6f25d6e989c3d1110e2705eb5dab40188..fdc1dd19afd0f902e2bac78500fd3e8d792a30ac 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.api.scan.filesystem;
 
-import com.google.common.base.Joiner;
 import java.io.File;
 import java.nio.file.Path;
 import java.util.ArrayList;
@@ -30,6 +29,8 @@ import org.apache.commons.io.FilenameUtils;
 import org.sonar.api.batch.ScannerSide;
 import org.sonar.api.utils.PathUtils;
 
+import static java.util.stream.Collectors.joining;
+
 /**
  * @since 3.5
  */
@@ -59,7 +60,7 @@ public class PathResolver {
     while (cursor != null) {
       File parentDir = parentDir(dirs, cursor);
       if (parentDir != null) {
-        return new RelativePath(parentDir, Joiner.on("/").join(stack));
+        return new RelativePath(parentDir, stack.stream().collect(joining("/")));
       }
       stack.add(0, cursor.getName());
       cursor = cursor.getParentFile();
index 879d840887d73efd9d0d923dba28e8a3f97dbf56..cd1b37f1bf47ffa567154cb37c1862671d7359a2 100644 (file)
  */
 package org.sonar.api.security;
 
-import com.google.common.base.Preconditions;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.sonar.api.ExtensionPoint;
 import org.sonar.api.server.ServerSide;
 
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
+import static java.util.Objects.requireNonNull;
 
 /**
  * @see SecurityRealm
@@ -46,7 +46,7 @@ public abstract class Authenticator {
     private HttpServletRequest request;
 
     public Context(@Nullable String username, @Nullable String password, HttpServletRequest request) {
-      Preconditions.checkNotNull(request);
+      requireNonNull(request);
       this.request = request;
       this.username = username;
       this.password = password;
index f26c4491b78679eb1bbb936121fb9b46ac468e17..e491d3c58613103b30c619b6387158f8d1681380 100644 (file)
  */
 package org.sonar.api.server.authentication;
 
-import com.google.common.base.Predicate;
 import java.util.HashSet;
 import java.util.Set;
 import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.Immutable;
+import org.sonar.api.user.UserGroupValidation;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.FluentIterable.from;
+import static java.util.Objects.requireNonNull;
 import static org.apache.commons.lang.StringUtils.isNotBlank;
-import static org.sonar.api.user.UserGroupValidation.validateGroupName;
 
 /**
  * User information provided by the Identity Provider to be register into the platform.
@@ -170,8 +167,8 @@ public final class UserIdentity {
      * @since 5.5
      */
     public Builder setGroups(Set<String> groups) {
-      checkNotNull(groups, "Groups cannot be null, please don't use this method if groups should not be synchronized.");
-      from(groups).filter(ValidateGroupName.INSTANCE).toList();
+      requireNonNull(groups, "Groups cannot be null, please don't use this method if groups should not be synchronized.");
+      groups.forEach(UserGroupValidation::validateGroupName);
       this.groupsProvided = true;
       this.groups = groups;
       return this;
@@ -204,14 +201,4 @@ public final class UserIdentity {
       checkArgument(email == null || email.length() <= 100, "User email size is too big (100 characters max)");
     }
   }
-
-  private enum ValidateGroupName implements Predicate<String> {
-    INSTANCE;
-
-    @Override
-    public boolean apply(@Nonnull String input) {
-      validateGroupName(input);
-      return true;
-    }
-  }
 }
index b975510a8f5939697ebc5c95482692bc23ae3266..b999d9b5265e3f4bf97db8b5e94710d6bcf1f02f 100644 (file)
@@ -136,6 +136,7 @@ public class DefaultDebtRemediationFunction implements DebtRemediationFunction {
     return result;
   }
 
+  
   @Override
   public String toString() {
     return MoreObjects.toStringHelper(DebtRemediationFunction.class)
index 40cdb3545d5a15fd2bd74e97187ec5d04838878b..fb729ced3390b6146e1615adc4051e12c9dcc142 100644 (file)
@@ -24,7 +24,8 @@ import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.PropertyType;
 
-import static com.google.common.collect.Lists.newArrayList;
+import static java.util.Arrays.asList;
+
 
 /**
  * @since 4.2
@@ -57,7 +58,7 @@ public final class RuleParamType {
 
   private RuleParamType(String type, boolean multiple, String... values) {
     this.type = type;
-    this.values = newArrayList(values);
+    this.values = asList(values);
     StringBuilder sb = new StringBuilder();
     sb.append(type);
     if (multiple) {
index cf8e80236ce33140662a7eff9d3f39d5f21ef32d..ce2c76818bc8b3fee6d4de7b2cae83a1516972a4 100644 (file)
 package org.sonar.api.server.rule;
 
 import com.google.common.base.MoreObjects;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +50,11 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.lang.String.format;
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
+import static org.apache.commons.lang.StringUtils.defaultIfEmpty;
+import static org.apache.commons.lang.StringUtils.isEmpty;
 import static org.apache.commons.lang.StringUtils.trimToNull;
 
 /**
@@ -381,7 +383,7 @@ public interface RulesDefinition {
    * Instantiated by core but not by plugins, except for their tests.
    */
   class Context {
-    private final Map<String, Repository> repositoriesByKey = Maps.newHashMap();
+    private final Map<String, Repository> repositoriesByKey = new HashMap<>();
 
     /**
      * New builder for {@link org.sonar.api.server.rule.RulesDefinition.Repository}.
@@ -408,7 +410,7 @@ public interface RulesDefinition {
     }
 
     public List<Repository> repositories() {
-      return ImmutableList.copyOf(repositoriesByKey.values());
+      return unmodifiableList(new ArrayList<>(repositoriesByKey.values()));
     }
 
     /**
@@ -417,7 +419,7 @@ public interface RulesDefinition {
      */
     @Deprecated
     public List<ExtendedRepository> extendedRepositories(String repositoryKey) {
-      return Collections.emptyList();
+      return emptyList();
     }
 
     /**
@@ -426,7 +428,7 @@ public interface RulesDefinition {
      */
     @Deprecated
     public List<ExtendedRepository> extendedRepositories() {
-      return Collections.emptyList();
+      return emptyList();
     }
 
     private void registerRepository(NewRepositoryImpl newRepository) {
@@ -468,7 +470,7 @@ public interface RulesDefinition {
     private final String key;
     private String language;
     private String name;
-    private final Map<String, NewRule> newRules = Maps.newHashMap();
+    private final Map<String, NewRule> newRules = new HashMap<>();
 
     private NewRepositoryImpl(Context context, String key, String language) {
       this.context = context;
@@ -570,7 +572,7 @@ public interface RulesDefinition {
         newRule.validate();
         ruleBuilder.put(newRule.key, new Rule(this, newRule));
       }
-      this.rulesByKey = ImmutableMap.copyOf(ruleBuilder);
+      this.rulesByKey = unmodifiableMap(ruleBuilder);
     }
 
     @Override
@@ -596,7 +598,7 @@ public interface RulesDefinition {
 
     @Override
     public List<Rule> rules() {
-      return ImmutableList.copyOf(rulesByKey.values());
+      return unmodifiableList(new ArrayList<>(rulesByKey.values()));
     }
 
     @Override
@@ -674,7 +676,7 @@ public interface RulesDefinition {
     private DebtRemediationFunction debtRemediationFunction;
     private String gapDescription;
     private final Set<String> tags = Sets.newTreeSet();
-    private final Map<String, NewParam> paramsByKey = Maps.newHashMap();
+    private final Map<String, NewParam> paramsByKey = new HashMap<>();
     private final DebtRemediationFunctions functions;
     private boolean activatedByDefault;
 
@@ -898,10 +900,10 @@ public interface RulesDefinition {
     }
 
     private void validate() {
-      if (Strings.isNullOrEmpty(name)) {
+      if (isEmpty(name)) {
         throw new IllegalStateException(format("Name of rule %s is empty", this));
       }
-      if (Strings.isNullOrEmpty(htmlDescription) && Strings.isNullOrEmpty(markdownDescription)) {
+      if (isEmpty(htmlDescription) && isEmpty(markdownDescription)) {
         throw new IllegalStateException(format("One of HTML description or Markdown description must be defined for rule %s", this));
       }
     }
@@ -1040,7 +1042,7 @@ public interface RulesDefinition {
     }
 
     public List<Param> params() {
-      return ImmutableList.copyOf(params.values());
+      return unmodifiableList(new ArrayList<>(params.values()));
     }
 
     public Set<String> tags() {
@@ -1118,7 +1120,7 @@ public interface RulesDefinition {
      * Empty default value will be converted to null. Max length is 4000 characters.
      */
     public NewParam setDefaultValue(@Nullable String s) {
-      this.defaultValue = Strings.emptyToNull(s);
+      this.defaultValue = defaultIfEmpty(s, null);
       return this;
     }
   }
index bcf44b3dcb9069b31e01913cd49ccdec745f1855..c958463ee22fd0ce3f3fa9a8d44286e11f310c0c 100644 (file)
@@ -22,15 +22,14 @@ package org.sonar.api.server.ws;
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import java.io.IOException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -52,6 +51,7 @@ import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static java.lang.String.format;
 import static java.util.Arrays.asList;
+import static java.util.Arrays.stream;
 import static java.util.Objects.requireNonNull;
 
 /**
@@ -100,7 +100,7 @@ import static java.util.Objects.requireNonNull;
 public interface WebService extends Definable<WebService.Context> {
 
   class Context {
-    private final Map<String, Controller> controllers = Maps.newHashMap();
+    private final Map<String, Controller> controllers = new HashMap<>();
 
     /**
      * Create a new controller.
@@ -139,7 +139,7 @@ public interface WebService extends Definable<WebService.Context> {
     private final String path;
     private String description;
     private String since;
-    private final Map<String, NewAction> actions = Maps.newHashMap();
+    private final Map<String, NewAction> actions = new HashMap<>();
 
     private NewController(Context context, String path) {
       if (StringUtils.isBlank(path)) {
@@ -254,7 +254,7 @@ public interface WebService extends Definable<WebService.Context> {
     private boolean post = false;
     private boolean isInternal = false;
     private RequestHandler handler;
-    private Map<String, NewParam> newParams = Maps.newHashMap();
+    private Map<String, NewParam> newParams = new HashMap<>();
     private URL responseExample = null;
     private List<Change> changelog = new ArrayList<>();
 
@@ -337,7 +337,7 @@ public interface WebService extends Definable<WebService.Context> {
      * @since 6.4
      */
     public NewAction setChangelog(Change... changes) {
-      this.changelog = Arrays.stream(requireNonNull(changes))
+      this.changelog = stream(requireNonNull(changes))
         .filter(Objects::nonNull)
         .collect(Collectors.toList());
 
@@ -776,7 +776,8 @@ public interface WebService extends Definable<WebService.Context> {
 
     private final String paramValue;
 
-    private static final Map<String, SelectionMode> BY_VALUE = Maps.uniqueIndex(asList(values()), input -> input.paramValue);
+    private static final Map<String, SelectionMode> BY_VALUE = stream(values())
+      .collect(Collectors.toMap(v -> v.paramValue, v -> v));
 
     SelectionMode(String paramValue) {
       this.paramValue = paramValue;
index ac3b607fe3167f98c1e811a45d2c32b4f88dde69..ce65867be76a37b51f1e799cff6c5f075ada4d39 100644 (file)
@@ -20,9 +20,8 @@
 package org.sonar.api.server.ws.internal;
 
 import com.google.common.base.Splitter;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import java.io.InputStream;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.annotation.CheckForNull;
@@ -31,10 +30,10 @@ import org.apache.commons.io.IOUtils;
 import org.sonar.api.server.ws.LocalConnector;
 import org.sonar.api.server.ws.Request;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Collections.emptyList;
 import static java.util.Collections.singletonList;
+import static java.util.Objects.requireNonNull;
 
 /**
  * Fake implementation of {@link org.sonar.api.server.ws.Request} used
@@ -43,8 +42,8 @@ import static java.util.Collections.singletonList;
  */
 public class SimpleGetRequest extends Request {
 
-  private final Map<String, String> params = Maps.newHashMap();
-  private final Map<String, Part> parts = Maps.newHashMap();
+  private final Map<String, String> params = new HashMap<>();
+  private final Map<String, Part> parts = new HashMap<>();
   private String mediaType = "application/json";
   private String path;
 
@@ -59,7 +58,7 @@ public class SimpleGetRequest extends Request {
   }
 
   public SimpleGetRequest setMediaType(String mediaType) {
-    checkNotNull(mediaType);
+    requireNonNull(mediaType);
     this.mediaType = mediaType;
     return this;
   }
@@ -87,7 +86,7 @@ public class SimpleGetRequest extends Request {
     if (value == null) {
       return null;
     }
-    return Lists.newArrayList(Splitter.on(',').omitEmptyStrings().trimResults().split(value));
+    return Splitter.on(',').omitEmptyStrings().trimResults().splitToList(value);
   }
 
   @Override
index 440bf232ca25a863e806cfd7247255bfad6c9e48..79e76d501829cb42a51fb09efa3d90d32e4990a0 100644 (file)
@@ -32,9 +32,9 @@ import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.WebService;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
 import static java.util.Collections.emptyList;
 import static java.util.Collections.singletonList;
+import static java.util.Objects.requireNonNull;
 import static org.apache.commons.lang.StringUtils.defaultString;
 
 /**
@@ -56,7 +56,7 @@ public abstract class ValidatingRequest extends Request {
 
   @Override
   public LocalConnector localConnector() {
-    checkNotNull(localConnector, "Local connector has not been set");
+    requireNonNull(localConnector, "Local connector has not been set");
     return localConnector;
   }
 
index 825e7371975ffd4afde568af9cd4a2efc62b65e4..23018c5a19efb9b01375af5d4e11c259e510d77a 100644 (file)
@@ -28,20 +28,21 @@ import java.util.Collections;
 import java.util.List;
 
 /**
- * Add features missing in org.apache.commons.lang.reflect.FieldUtils
+ * Add features missing in {@code org.apache.commons.lang.reflect.FieldUtils}.
  *
  * @since 2.14
  */
 public final class FieldUtils2 {
   private FieldUtils2() {
+    // only statics
   }
 
   /**
-   * Get accessible <code>Field</code> breaking scope if requested. Superclasses/interfaces are considered.
+   * Get accessible {@code Field} breaking scope if requested. Superclasses/interfaces are considered.
    *
    * @param clazz       the class to reflect, must not be null
-   * @param forceAccess whether to break scope restrictions using the <code>setAccessible</code> method.
-   *                    <code>False</code> only matches public fields.
+   * @param forceAccess whether to break scope restrictions using the {@code setAccessible} method.
+   *                    {@code False} only matches public fields.
    */
   public static List<Field> getFields(Class clazz, boolean forceAccess) {
     List<Field> result = new ArrayList<>();
@@ -50,7 +51,7 @@ public final class FieldUtils2 {
       for (Field declaredField : c.getDeclaredFields()) {
         if (!Modifier.isPublic(declaredField.getModifiers())) {
           if (forceAccess) {
-            declaredField.setAccessible(true);// NOSONAR only works from sufficiently privileged code
+            declaredField.setAccessible(true);
           } else {
             continue;
           }
index 0ee2a85e669e9e97f866f039cb3a861c64046ee8..6f0a1c9e59cf6b01dc21cafca592051940d859f1 100644 (file)
  */
 package org.sonar.api.utils;
 
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Lists;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashSet;
@@ -33,6 +28,8 @@ import java.util.Locale;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 import java.util.Set;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
 
 public class LocalizedMessages extends ResourceBundle {
 
@@ -91,17 +88,17 @@ public class LocalizedMessages extends ResourceBundle {
   }
 
   /*
-    * (non-Javadoc)
-    *
-    * @see java.util.ResourceBundle#handleGetObject(java.lang.String)
-    */
+   * (non-Javadoc)
+   *
+   * @see java.util.ResourceBundle#handleGetObject(java.lang.String)
+   */
   @Override
   protected Object handleGetObject(String key) {
     for (ResourceBundle b : bundles) {
       try {
         return b.getObject(key);
       } catch (MissingResourceException mre) {
-        // iterate 
+        // iterate
       }
     }
     throw new MissingResourceException(null, null, key);
@@ -116,7 +113,10 @@ public class LocalizedMessages extends ResourceBundle {
     // Constructor
     {
       for (ResourceBundle b : bundles) {
-        keys.addAll(Lists.newArrayList(Iterators.forEnumeration(b.getKeys())));
+        Enumeration<String> bundleKeys = b.getKeys();
+        while (bundleKeys.hasMoreElements()) {
+          keys.add(bundleKeys.nextElement());
+        }
       }
       i = keys.iterator();
     }
index 584dc5962522f7ff5d09d753c5e6163a5be3ea8a..c853494e2dc75a6623a259cae86fc1de8cc58b0b 100644 (file)
  */
 package org.sonar.api.utils;
 
+import java.util.Collection;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.Collection;
-import java.util.Collections;
-
-import static com.google.common.collect.Lists.newArrayList;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
 
 /**
  * Runtime exception for "functional" error. It aims to be displayed to end-users, without any technical information
@@ -57,13 +56,13 @@ public class MessageException extends RuntimeException {
   private MessageException(@Nullable String message, @Nullable String l10nKey, @Nullable Object[] l10nParams) {
     super(message);
     this.l10nKey = l10nKey;
-    this.l10nParams = l10nParams == null ? Collections.emptyList() : Collections.unmodifiableCollection(newArrayList(l10nParams));
+    this.l10nParams = l10nParams == null ? emptyList() : asList(l10nParams);
   }
 
   private MessageException(String message, Throwable cause) {
     super(message, cause);
     l10nKey = null;
-    l10nParams = Collections.emptyList();
+    l10nParams = emptyList();
   }
 
   public static MessageException of(String message, Throwable cause) {
index 7a5aca0d435d92d4926ed421d788791764e4ef80..b62ea204118a4d2cfadc108326f279a55dcb9447 100644 (file)
@@ -23,12 +23,12 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.io.Files;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.nio.charset.Charset;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -46,7 +46,7 @@ import org.sonar.api.server.ServerSide;
 @ComputeEngineSide
 public class UriReader {
 
-  private final Map<String, SchemeProcessor> processorsByScheme = Maps.newHashMap();
+  private final Map<String, SchemeProcessor> processorsByScheme = new HashMap<>();
 
   public UriReader(SchemeProcessor[] processors) {
     List<SchemeProcessor> allProcessors = Lists.asList(new FileProcessor(), processors);
index 8e472823ee03713648fcc2a8080dce101e376c71..9584b3faa952aa4ff78b34d7fb5e37bb133fdf1b 100644 (file)
@@ -21,17 +21,17 @@ package org.sonar.api.utils.command;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.utils.System2;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.utils.System2;
+
+import static java.util.Collections.unmodifiableList;
+import static java.util.Collections.unmodifiableMap;
 
 /**
  * @since 2.7
@@ -48,7 +48,7 @@ public class Command {
   Command(String executable, System2 system) {
     Preconditions.checkArgument(!StringUtils.isBlank(executable), "Command executable can not be blank");
     this.executable = executable;
-    this.env = Maps.newHashMap(system.envVariables());
+    this.env = new HashMap<>(system.envVariables());
     this.system = system;
   }
 
@@ -66,7 +66,7 @@ public class Command {
   }
 
   public List<String> getArguments() {
-    return ImmutableList.copyOf(arguments);
+    return unmodifiableList(arguments);
   }
 
   public Command addArgument(String arg) {
@@ -122,7 +122,7 @@ public class Command {
    * @since 3.2
    */
   public Map<String, String> getEnvironmentVariables() {
-    return ImmutableMap.copyOf(env);
+    return unmodifiableMap(env);
   }
 
   /**
@@ -150,17 +150,19 @@ public class Command {
   }
 
   List<String> toStrings(boolean forLogs) {
-    ImmutableList.Builder<String> command = ImmutableList.builder();
+    List<String> command = new ArrayList<>();
     if (newShell) {
       if (system.isOsWindows()) {
-        command.add("cmd", "/C", "call");
+        command.add("cmd");
+        command.add("/C");
+        command.add("call");
       } else {
         command.add("sh");
       }
     }
     command.add(executable);
     command.addAll(forLogs ? argumentsForLogs : arguments);
-    return command.build();
+    return unmodifiableList(command);
   }
 
   public String toCommandLine() {
index d969085e1c6361dbe8a3321c64d3dbcc8dd2aa72..55e6d7820561f8195d799b2bc2030ad35e32a7e5 100644 (file)
@@ -21,8 +21,8 @@ package org.sonar.api.web;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Maps;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -171,7 +171,7 @@ public final class Dashboard {
 
     Widget(String id) {
       this.id = id;
-      this.properties = Maps.newHashMap();
+      this.properties = new HashMap<>();
     }
 
     public Widget setProperty(String key, String value) {
index c71ec53ee43ebf48dfe409379fb4c2db717735e2..da8f4dfe0fcfdd5b026a2f092a856f49b2ae62a3 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.api.web;
 
 import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
@@ -34,6 +35,7 @@ import org.sonar.api.server.ServerSide;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Arrays.asList;
+import static java.util.Collections.unmodifiableList;
 
 /**
  * @since 3.1
@@ -59,8 +61,8 @@ public abstract class ServletFilter implements Filter {
     private final Predicate<String>[] exclusionPredicates;
 
     private UrlPattern(Builder builder) {
-      this.inclusions = ImmutableList.copyOf(builder.inclusions);
-      this.exclusions = ImmutableList.copyOf(builder.exclusions);
+      this.inclusions = unmodifiableList(new ArrayList<>(builder.inclusions));
+      this.exclusions = unmodifiableList(new ArrayList<>(builder.exclusions));
       if (builder.inclusionPredicates.isEmpty()) {
         // because Stream#anyMatch() returns false if stream is empty
         this.inclusionPredicates = new Predicate[] {s -> true};
index 5e6391c2405191c8c89018144eba8ba5cecbf276..785f7c29b5dd7dc7519747691637432ad6f99690 100644 (file)
 package org.sonar.api.web.page;
 
 import java.util.Arrays;
+import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.annotation.CheckForNull;
 
 import static java.lang.String.format;
-import static java.util.Collections.unmodifiableSet;
 import static java.util.Objects.requireNonNull;
 import static org.sonar.api.web.page.Page.Scope.COMPONENT;
 import static org.sonar.api.web.page.Page.Scope.GLOBAL;
@@ -45,7 +45,7 @@ public final class Page {
   private Page(Builder builder) {
     this.key = builder.key;
     this.name = builder.name;
-    this.qualifiers = unmodifiableSet(Stream.of(builder.qualifiers).sorted().collect(Collectors.toSet()));
+    this.qualifiers = Stream.of(builder.qualifiers).sorted().collect(Collectors.toCollection(LinkedHashSet::new));
     this.isAdmin = builder.isAdmin;
     this.scope = builder.scope;
   }
index 6176136db397371895e3b6b9e7a15775cd169023..fa276281650489c07c70fad342d7ff05915c5148 100644 (file)
@@ -71,6 +71,7 @@ public class DebtRemediationFunctionTest {
 
   @Test
   public void test_to_string() throws Exception {
-    assertThat(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5)).toString()).isNotNull();
+    assertThat(DebtRemediationFunction.createLinearWithOffset(Duration.create(10), Duration.create(5)).toString())
+      .isEqualTo("DebtRemediationFunction{type=LINEAR_OFFSET, coefficient=Duration[durationInMinutes=10], offset=Duration[durationInMinutes=5]}");
   }
 }