From: Simon Brandhof Date: Mon, 25 May 2015 19:38:15 +0000 (+0200) Subject: SONAR-6370 Decrease coupling of sonar-duplications with guava X-Git-Tag: 5.2-RC1~1809 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ab50f4f37d637e09de2a47872dfe9ea07ea07e64;p=sonarqube.git SONAR-6370 Decrease coupling of sonar-duplications with guava --- diff --git a/sonar-batch/src/main/java/org/sonar/batch/cpd/DefaultCpdEngine.java b/sonar-batch/src/main/java/org/sonar/batch/cpd/DefaultCpdEngine.java index 3674eca2ee0..93fc1726b46 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/cpd/DefaultCpdEngine.java +++ b/sonar-batch/src/main/java/org/sonar/batch/cpd/DefaultCpdEngine.java @@ -37,7 +37,6 @@ import org.sonar.api.resources.Project; import org.sonar.api.utils.SonarException; import org.sonar.batch.cpd.index.IndexFactory; import org.sonar.batch.cpd.index.SonarDuplicationsIndex; -import org.sonar.duplications.DuplicationPredicates; import org.sonar.duplications.block.Block; import org.sonar.duplications.index.CloneGroup; import org.sonar.duplications.internal.pmd.TokenizerBridge; diff --git a/sonar-batch/src/main/java/org/sonar/batch/cpd/DuplicationPredicates.java b/sonar-batch/src/main/java/org/sonar/batch/cpd/DuplicationPredicates.java new file mode 100644 index 00000000000..0e6567ea05d --- /dev/null +++ b/sonar-batch/src/main/java/org/sonar/batch/cpd/DuplicationPredicates.java @@ -0,0 +1,49 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.batch.cpd; + +import com.google.common.base.Predicate; +import org.sonar.duplications.index.CloneGroup; + +import javax.annotation.Nullable; + +public final class DuplicationPredicates { + + private DuplicationPredicates() { + } + + public static Predicate numberOfUnitsNotLessThan(int min) { + return new NumberOfUnitsNotLessThan(min); + } + + private static class NumberOfUnitsNotLessThan implements Predicate { + private final int min; + + public NumberOfUnitsNotLessThan(int min) { + this.min = min; + } + + @Override + public boolean apply(@Nullable CloneGroup input) { + return input != null && input.getLengthInUnits() >= min; + } + } + +} diff --git a/sonar-batch/src/test/java/org/sonar/batch/cpd/DuplicationPredicatesTest.java b/sonar-batch/src/test/java/org/sonar/batch/cpd/DuplicationPredicatesTest.java new file mode 100644 index 00000000000..d3e318ca13d --- /dev/null +++ b/sonar-batch/src/test/java/org/sonar/batch/cpd/DuplicationPredicatesTest.java @@ -0,0 +1,38 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.batch.cpd; + +import com.google.common.base.Predicate; +import org.junit.Test; +import org.sonar.duplications.index.CloneGroup; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DuplicationPredicatesTest { + + @Test + public void testNumberOfUnitsNotLessThan() { + Predicate predicate = DuplicationPredicates.numberOfUnitsNotLessThan(5); + assertThat(predicate.apply(CloneGroup.builder().setLengthInUnits(6).build())).isTrue(); + assertThat(predicate.apply(CloneGroup.builder().setLengthInUnits(5).build())).isTrue(); + assertThat(predicate.apply(CloneGroup.builder().setLengthInUnits(4).build())).isFalse(); + } + +} diff --git a/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/SourceCode.java b/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/SourceCode.java index 57501d25d7a..675c3f152f2 100644 --- a/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/SourceCode.java +++ b/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/SourceCode.java @@ -23,9 +23,12 @@ */ package net.sourceforge.pmd.cpd; -import com.google.common.io.Closeables; - -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.io.Reader; +import java.io.StringReader; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.List; @@ -59,9 +62,7 @@ public class SourceCode { protected abstract Reader getReader() throws Exception; protected List load() { - LineNumberReader lnr = null; - try { - lnr = new LineNumberReader(getReader()); + try (LineNumberReader lnr = new LineNumberReader(getReader())) { List lines = new ArrayList<>(); String currentLine; while ((currentLine = lnr.readLine()) != null) { @@ -70,8 +71,6 @@ public class SourceCode { return lines; } catch (Exception e) { throw new IllegalStateException("Problem while reading " + getFileName() + ":" + e.getMessage(), e); - } finally { - Closeables.closeQuietly(lnr); } } } diff --git a/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/TokenEntry.java b/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/TokenEntry.java index 395c9f9bdc2..0a18f175a79 100644 --- a/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/TokenEntry.java +++ b/sonar-duplications/src/main/java/net/sourceforge/pmd/cpd/TokenEntry.java @@ -23,11 +23,9 @@ */ package net.sourceforge.pmd.cpd; -import com.google.common.annotations.Beta; -import org.apache.commons.lang.builder.ToStringBuilder; - import java.util.HashMap; import java.util.Map; +import org.apache.commons.lang.builder.ToStringBuilder; /** * @since 2.2 @@ -81,7 +79,6 @@ public class TokenEntry implements Comparable { * * @since 2.14 */ - @Beta public String getValue() { return value; } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/CodeFragment.java b/sonar-duplications/src/main/java/org/sonar/duplications/CodeFragment.java index 42e30bfec13..375061dff8a 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/CodeFragment.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/CodeFragment.java @@ -19,7 +19,6 @@ */ package org.sonar.duplications; -import com.google.common.annotations.Beta; /** * TODO Enforce contracts of this interface in concrete classes by using preconditions, currently this leads to failures of tests. @@ -28,7 +27,6 @@ import com.google.common.annotations.Beta; * * @since 2.14 */ -@Beta public interface CodeFragment { /** diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/block/Block.java b/sonar-duplications/src/main/java/org/sonar/duplications/block/Block.java index 349ada7dd16..32167066a40 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/block/Block.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/block/Block.java @@ -19,7 +19,6 @@ */ package org.sonar.duplications.block; -import com.google.common.annotations.Beta; import org.sonar.duplications.CodeFragment; /** @@ -89,7 +88,6 @@ public final class Block implements CodeFragment { return this; } - @Beta public Builder setUnit(int start, int end) { this.startUnit = start; this.endUnit = end; @@ -142,7 +140,6 @@ public final class Block implements CodeFragment { /** * @since 2.14 */ - @Beta public int getStartUnit() { return startUnit; } @@ -150,7 +147,6 @@ public final class Block implements CodeFragment { /** * @since 2.14 */ - @Beta public int getEndUnit() { return endUnit; } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/block/BlockChunker.java b/sonar-duplications/src/main/java/org/sonar/duplications/block/BlockChunker.java index d7adf472f2f..31034f70f63 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/block/BlockChunker.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/block/BlockChunker.java @@ -19,7 +19,7 @@ */ package org.sonar.duplications.block; -import com.google.common.collect.Lists; +import java.util.ArrayList; import org.sonar.duplications.statement.Statement; import java.util.Collections; @@ -55,7 +55,7 @@ public class BlockChunker { } public List chunk(String resourceId, List statements) { - List filtered = Lists.newArrayList(); + List filtered = new ArrayList<>(); int i = 0; while (i < statements.size()) { Statement first = statements.get(i); @@ -75,7 +75,7 @@ public class BlockChunker { return Collections.emptyList(); } Statement[] statementsArr = statements.toArray(new Statement[statements.size()]); - List blocks = Lists.newArrayListWithCapacity(statementsArr.length - blockSize + 1); + List blocks = new ArrayList<>(statementsArr.length - blockSize + 1); long hash = 0; int first = 0; int last = 0; diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/BlocksGroup.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/BlocksGroup.java index 063d98891ac..67689f1e70c 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/BlocksGroup.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/BlocksGroup.java @@ -19,14 +19,12 @@ */ package org.sonar.duplications.detector.original; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; - import org.sonar.duplications.block.Block; import org.sonar.duplications.utils.FastStringComparator; -import com.google.common.collect.Lists; - /** * Set of {@link Block}s, which internally stored as a sorted list. */ @@ -44,7 +42,7 @@ final class BlocksGroup { protected final List blocks; private BlocksGroup() { - this.blocks = Lists.newArrayList(); + this.blocks = new ArrayList<>(); } public int size() { @@ -167,7 +165,7 @@ final class BlocksGroup { } private static List pairs(BlocksGroup beginGroup, BlocksGroup endGroup, int len) { - List result = Lists.newArrayList(); + List result = new ArrayList<>(); List beginBlocks = beginGroup.blocks; List endBlocks = endGroup.blocks; int i = 0; @@ -180,7 +178,7 @@ final class BlocksGroup { c = beginBlock.getIndexInFile() + len - 1 - endBlock.getIndexInFile(); } if (c == 0) { - result.add(new Block[] { beginBlock, endBlock }); + result.add(new Block[] {beginBlock, endBlock}); i++; j++; } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/Filter.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/Filter.java index 1ea553dfd41..4289f084b63 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/Filter.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/Filter.java @@ -20,15 +20,13 @@ package org.sonar.duplications.detector.original; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; - import org.sonar.duplications.detector.ContainsInComparator; import org.sonar.duplications.index.CloneGroup; import org.sonar.duplications.index.ClonePart; import org.sonar.duplications.utils.SortedListsUtils; -import com.google.common.collect.Lists; - /** * Performs incremental and brute force algorithm in order to filter clones, which are fully covered by other clones. * All clones for filtering must be of the same origin - there is no sanity check on this. @@ -48,7 +46,7 @@ final class Filter { * * @see #add(CloneGroup) */ - private final List filtered = Lists.newLinkedList(); + private final List filtered = new LinkedList<>(); /** * @return current results of filtering @@ -115,7 +113,7 @@ final class Filter { List firstParts = first.getCloneParts(); List secondParts = second.getCloneParts(); return SortedListsUtils.contains(secondParts, firstParts, new ContainsInComparator(second.getCloneUnitLength(), first.getCloneUnitLength())) - && SortedListsUtils.contains(firstParts, secondParts, ContainsInComparator.RESOURCE_ID_COMPARATOR); + && SortedListsUtils.contains(firstParts, secondParts, ContainsInComparator.RESOURCE_ID_COMPARATOR); } } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/OriginalCloneDetectionAlgorithm.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/OriginalCloneDetectionAlgorithm.java index 0c721b48a3a..bfd95e633b6 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/OriginalCloneDetectionAlgorithm.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/original/OriginalCloneDetectionAlgorithm.java @@ -19,19 +19,18 @@ */ package org.sonar.duplications.detector.original; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.sonar.duplications.block.Block; import org.sonar.duplications.block.ByteArray; import org.sonar.duplications.index.CloneGroup; import org.sonar.duplications.index.CloneIndex; import org.sonar.duplications.index.ClonePart; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - /** * Implementation of algorithm described in paper * Index-Based Code Clone Detection: Incremental, Distributed, Scalable @@ -69,7 +68,7 @@ public final class OriginalCloneDetectionAlgorithm { // Godin: create one group per unique hash // TODO Godin: can we create map with expected size? - Map groupsByHash = Maps.newHashMap(); + Map groupsByHash = new HashMap<>(); for (Block fileBlock : fileBlocks) { ByteArray hash = fileBlock.getBlockHash(); BlocksGroup sameHash = groupsByHash.get(hash); @@ -202,16 +201,16 @@ public final class OriginalCloneDetectionAlgorithm { List pairs = beginGroup.pairs(endGroup, cloneLength); ClonePart origin = null; - List parts = Lists.newArrayList(); + List parts = new ArrayList<>(); for (int i = 0; i < pairs.size(); i++) { Block[] pair = pairs.get(i); Block firstBlock = pair[0]; Block lastBlock = pair[1]; ClonePart part = new ClonePart(firstBlock.getResourceId(), - firstBlock.getIndexInFile(), - firstBlock.getStartLine(), - lastBlock.getEndLine()); + firstBlock.getIndexInFile(), + firstBlock.getStartLine(), + lastBlock.getEndLine()); if (originResourceId.equals(part.getResourceId())) { if (origin == null) { diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/DuplicationsCollector.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/DuplicationsCollector.java index a1b4d795fc4..70f1dce99b9 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/DuplicationsCollector.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/DuplicationsCollector.java @@ -19,16 +19,15 @@ */ package org.sonar.duplications.detector.suffixtree; -import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import org.sonar.duplications.block.Block; import org.sonar.duplications.detector.ContainsInComparator; import org.sonar.duplications.index.CloneGroup; import org.sonar.duplications.index.ClonePart; import org.sonar.duplications.utils.SortedListsUtils; -import java.util.Collections; -import java.util.List; - /** * Implementation of {@link Search.Collector}, which constructs {@link CloneGroup}s. */ @@ -37,7 +36,7 @@ public class DuplicationsCollector extends Search.Collector { private final TextSet text; private final String originResourceId; - private final List filtered = Lists.newArrayList(); + private final List filtered = new ArrayList<>(); private int length; private int count; @@ -66,7 +65,6 @@ public class DuplicationsCollector extends Search.Collector { * * @param start number of first block from text for this part * @param end number of last block from text for this part - * @param len number of blocks in this part */ @Override public void part(int start, int end) { @@ -84,15 +82,15 @@ public class DuplicationsCollector extends Search.Collector { CloneGroup.Builder builder = CloneGroup.builder().setLength(length); - List parts = Lists.newArrayListWithCapacity(count); + List parts = new ArrayList<>(count); for (int[] b : blockNumbers) { Block firstBlock = text.getBlock(b[0]); Block lastBlock = text.getBlock(b[1]); ClonePart part = new ClonePart( - firstBlock.getResourceId(), - firstBlock.getIndexInFile(), - firstBlock.getStartLine(), - lastBlock.getEndLine()); + firstBlock.getResourceId(), + firstBlock.getIndexInFile(), + firstBlock.getStartLine(), + lastBlock.getEndLine()); // TODO Godin: maybe use FastStringComparator here ? if (originResourceId.equals(part.getResourceId())) { diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/Search.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/Search.java index f010b4dbf01..5afde31f2d8 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/Search.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/Search.java @@ -19,9 +19,13 @@ */ package org.sonar.duplications.detector.suffixtree; -import com.google.common.collect.Lists; - -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; +import java.util.ListIterator; public final class Search { @@ -29,8 +33,8 @@ public final class Search { private final TextSet text; private final Collector reporter; - private final List list = Lists.newArrayList(); - private final List innerNodes = Lists.newArrayList(); + private final List list = new ArrayList<>(); + private final List innerNodes = new ArrayList<>(); public static void perform(TextSet text, Collector reporter) { new Search(SuffixTree.create(text), text, reporter).compute(); @@ -64,7 +68,7 @@ public final class Search { * Depth-first search (DFS). */ private void dfs() { - Deque stack = Lists.newLinkedList(); + Deque stack = new LinkedList<>(); stack.add(tree.getRootNode()); while (!stack.isEmpty()) { Node node = stack.removeLast(); diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/SuffixTreeCloneDetectionAlgorithm.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/SuffixTreeCloneDetectionAlgorithm.java index e95bb043b1a..aba733f1d3d 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/SuffixTreeCloneDetectionAlgorithm.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/SuffixTreeCloneDetectionAlgorithm.java @@ -19,24 +19,29 @@ */ package org.sonar.duplications.detector.suffixtree; -import java.util.*; - +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.sonar.duplications.block.Block; import org.sonar.duplications.block.ByteArray; import org.sonar.duplications.index.CloneGroup; import org.sonar.duplications.index.CloneIndex; -import com.google.common.collect.*; - public final class SuffixTreeCloneDetectionAlgorithm { public static List detect(CloneIndex cloneIndex, Collection fileBlocks) { if (fileBlocks.isEmpty()) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } TextSet text = createTextSet(cloneIndex, fileBlocks); if (text == null) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } DuplicationsCollector reporter = new DuplicationsCollector(text); Search.perform(text, reporter); @@ -47,7 +52,7 @@ public final class SuffixTreeCloneDetectionAlgorithm { } private static TextSet createTextSet(CloneIndex index, Collection fileBlocks) { - Set hashes = Sets.newHashSet(); + Set hashes = new HashSet<>(); for (Block fileBlock : fileBlocks) { hashes.add(fileBlock.getBlockHash()); } @@ -66,7 +71,7 @@ public final class SuffixTreeCloneDetectionAlgorithm { private static TextSet createTextSet(Collection fileBlocks, Map> fromIndex) { TextSet.Builder textSetBuilder = TextSet.builder(); // TODO Godin: maybe we can reduce size of tree and so memory consumption by removing non-repeatable blocks - List sortedFileBlocks = Lists.newArrayList(fileBlocks); + List sortedFileBlocks = new ArrayList<>(fileBlocks); Collections.sort(sortedFileBlocks, BLOCK_COMPARATOR); textSetBuilder.add(sortedFileBlocks); @@ -88,7 +93,7 @@ public final class SuffixTreeCloneDetectionAlgorithm { } private static Map> retrieveFromIndex(CloneIndex index, String originResourceId, Set hashes) { - Map> collection = Maps.newHashMap(); + Map> collection = new HashMap<>(); for (ByteArray hash : hashes) { Collection blocks = index.getBySequenceHash(hash); for (Block blockFromIndex : blocks) { @@ -97,7 +102,7 @@ public final class SuffixTreeCloneDetectionAlgorithm { if (!originResourceId.equals(resourceId)) { List list = collection.get(resourceId); if (list == null) { - list = Lists.newArrayList(); + list = new ArrayList<>(); collection.put(resourceId, list); } list.add(blockFromIndex); diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/TextSet.java b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/TextSet.java index 82ab1db55a6..4958bc0502e 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/TextSet.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/detector/suffixtree/TextSet.java @@ -19,11 +19,11 @@ */ package org.sonar.duplications.detector.suffixtree; +import java.util.ArrayList; import java.util.List; import org.sonar.duplications.block.Block; -import com.google.common.collect.Lists; /** * Simplifies construction of generalised suffix-tree. @@ -32,7 +32,7 @@ public final class TextSet extends AbstractText { public static final class Builder { - private List symbols = Lists.newArrayList(); + private List symbols = new ArrayList(); private Integer lengthOfOrigin; private int count; diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/index/CloneGroup.java b/sonar-duplications/src/main/java/org/sonar/duplications/index/CloneGroup.java index 05eab3dd108..0fec9682046 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/index/CloneGroup.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/index/CloneGroup.java @@ -19,10 +19,8 @@ */ package org.sonar.duplications.index; -import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; - import java.util.ArrayList; import java.util.List; @@ -104,7 +102,6 @@ public class CloneGroup { * * @since 2.14 */ - @Beta public int getLengthInUnits() { return length; } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java b/sonar-duplications/src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java index 21a0f890ab0..f0257cef0e2 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/index/PackedMemoryCloneIndex.java @@ -19,14 +19,13 @@ */ package org.sonar.duplications.index; -import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import org.sonar.duplications.block.Block; import org.sonar.duplications.block.ByteArray; import org.sonar.duplications.utils.FastStringComparator; -import java.util.Collection; -import java.util.List; - /** * Provides an index optimized by memory. *

@@ -102,7 +101,7 @@ public class PackedMemoryCloneIndex extends AbstractCloneIndex { int index = DataUtils.binarySearch(byResourceId); - List result = Lists.newArrayList(); + List result = new ArrayList<>(); int realIndex = resourceIdsIndex[index]; while (index < size && FastStringComparator.INSTANCE.compare(resourceIds[realIndex], resourceId) == 0) { // extract block (note that there is no need to extract resourceId) @@ -118,12 +117,12 @@ public class PackedMemoryCloneIndex extends AbstractCloneIndex { int endUnit = blockData[offset]; Block block = blockBuilder - .setResourceId(resourceId) - .setBlockHash(new ByteArray(hash)) - .setIndexInFile(indexInFile) - .setLines(firstLineNumber, lastLineNumber) - .setUnit(startUnit, endUnit) - .build(); + .setResourceId(resourceId) + .setBlockHash(new ByteArray(hash)) + .setIndexInFile(indexInFile) + .setLines(firstLineNumber, lastLineNumber) + .setUnit(startUnit, endUnit) + .build(); result.add(block); index++; @@ -151,7 +150,7 @@ public class PackedMemoryCloneIndex extends AbstractCloneIndex { int index = DataUtils.binarySearch(byBlockHash); - List result = Lists.newArrayList(); + List result = new ArrayList<>(); while (index < size && !isLessByHash(size, index)) { // extract block (note that there is no need to extract hash) String resourceId = resourceIds[index]; @@ -163,12 +162,12 @@ public class PackedMemoryCloneIndex extends AbstractCloneIndex { int endUnit = blockData[offset]; Block block = blockBuilder - .setResourceId(resourceId) - .setBlockHash(sequenceHash) - .setIndexInFile(indexInFile) - .setLines(firstLineNumber, lastLineNumber) - .setUnit(startUnit, endUnit) - .build(); + .setResourceId(resourceId) + .setBlockHash(sequenceHash) + .setIndexInFile(indexInFile) + .setLines(firstLineNumber, lastLineNumber) + .setUnit(startUnit, endUnit) + .build(); result.add(block); index++; } diff --git a/sonar-duplications/src/main/java/org/sonar/duplications/internal/pmd/PmdBlockChunker.java b/sonar-duplications/src/main/java/org/sonar/duplications/internal/pmd/PmdBlockChunker.java index 1d329208721..20208ed6b83 100644 --- a/sonar-duplications/src/main/java/org/sonar/duplications/internal/pmd/PmdBlockChunker.java +++ b/sonar-duplications/src/main/java/org/sonar/duplications/internal/pmd/PmdBlockChunker.java @@ -19,12 +19,11 @@ */ package org.sonar.duplications.internal.pmd; -import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.List; import org.sonar.duplications.block.Block; import org.sonar.duplications.block.ByteArray; -import java.util.List; - /** * Differences with {@link org.sonar.duplications.block.BlockChunker}: * works with {@link TokensLine}, @@ -51,7 +50,7 @@ public class PmdBlockChunker { * @return ArrayList as we need a serializable object */ public List chunk(String resourceId, List fragments) { - List filtered = Lists.newArrayList(); + List filtered = new ArrayList<>(); int i = 0; while (i < fragments.size()) { TokensLine first = fragments.get(i); @@ -68,10 +67,10 @@ public class PmdBlockChunker { fragments = filtered; if (fragments.size() < blockSize) { - return Lists.newArrayList(); + return new ArrayList<>(); } TokensLine[] fragmentsArr = fragments.toArray(new TokensLine[fragments.size()]); - List blocks = Lists.newArrayListWithCapacity(fragmentsArr.length - blockSize + 1); + List blocks = new ArrayList<>(fragmentsArr.length - blockSize + 1); long hash = 0; int first = 0; int last = 0;