This is an automated email from the ASF dual-hosted git repository.
mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 4fe23db270 update to maven-indexer 7.0.3.
new a7b73e5800 Merge pull request #6089 from mbien/indexer703_optimizations
4fe23db270 is described below
commit 4fe23db2707ae7a23860b58bafdd6852b13b7f50
Author: Michael Bien <[email protected]>
AuthorDate: Sat Jun 17 10:39:19 2023 +0200
update to maven-indexer 7.0.3.
upstream indexer changes provide:
- significantly improved incremental update performance
- other index creation optimizations
group cache rebuild improvements and some code cleanup
- deprecation fixes
- improved logging
- code cleanup and optimizations
ClassDependencyIndexCreator
- CRC computation should be thread safe
---
java/maven.indexer/external/binaries-list | 6 +-
...-license.txt => indexer-core-7.0.3-license.txt} | 4 +-
....2-notice.txt => indexer-core-7.0.3-notice.txt} | 0
java/maven.indexer/nbproject/project.properties | 6 +-
java/maven.indexer/nbproject/project.xml | 12 +--
.../indexer/ArtifactDependencyIndexCreator.java | 2 +-
.../maven/indexer/ClassDependencyIndexCreator.java | 23 +++---
.../maven/indexer/NexusRepositoryIndexerImpl.java | 94 +++++++++++++---------
.../modules/maven/indexer/api/NBArtifactInfo.java | 1 +
.../modules/maven/indexer/api/NBGroupInfo.java | 1 +
.../modules/maven/indexer/api/RepositoryUtil.java | 30 ++-----
.../indexer/ClassDependencyIndexCreatorTest.java | 5 +-
.../indexer/NexusRepositoryIndexerImplTest.java | 7 +-
.../maven/indexer/api/RepositoryQueriesTest.java | 10 +--
14 files changed, 96 insertions(+), 105 deletions(-)
diff --git a/java/maven.indexer/external/binaries-list
b/java/maven.indexer/external/binaries-list
index 02a0f1941a..90524f0108 100644
--- a/java/maven.indexer/external/binaries-list
+++ b/java/maven.indexer/external/binaries-list
@@ -14,9 +14,9 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-C02F9C34FBC4C698BEF9D5074966545122908D06
org.apache.maven.indexer:indexer-core:7.0.2
-20AE1ED178C812FAA78DC83C9BF218D047FD01D0
org.apache.maven.indexer:search-api:7.0.2
-5967AEFBE9281C46155E73BBFC1E2BC4054CC92F
org.apache.maven.indexer:search-backend-smo:7.0.2
+D9086E551E71DC953FC989754500E9905AF3FB1B
org.apache.maven.indexer:indexer-core:7.0.3
+C3C93EF8FEAB7CE50FEFB3C3947A2F6A27E6B3F0
org.apache.maven.indexer:search-api:7.0.3
+BD0EAC88D46ED462BB62D074D8EA3227905C7391
org.apache.maven.indexer:search-backend-smo:7.0.3
2C08C7A491E9D033BB4806E0A45496E3A0667217 org.apache.lucene:lucene-core:9.6.0
A4819CA127C46A2759FDF091F41512C56C441FA7
org.apache.lucene:lucene-backward-codecs:9.6.0
B9E14451C73FA0BC8E71A2CFE12A442F37A53C69
org.apache.lucene:lucene-highlighter:9.6.0
diff --git a/java/maven.indexer/external/indexer-core-7.0.2-license.txt
b/java/maven.indexer/external/indexer-core-7.0.3-license.txt
similarity index 99%
rename from java/maven.indexer/external/indexer-core-7.0.2-license.txt
rename to java/maven.indexer/external/indexer-core-7.0.3-license.txt
index b23fed39ef..c50a347c13 100644
--- a/java/maven.indexer/external/indexer-core-7.0.2-license.txt
+++ b/java/maven.indexer/external/indexer-core-7.0.3-license.txt
@@ -1,11 +1,11 @@
Name: Maven Indexer
Description: Maven remote repository indexing engine.
-Version: 7.0.2
+Version: 7.0.3
Origin: Apache Software Foundation
License: Apache-2.0
URL: https://repo1.maven.org/maven2/org/apache/maven/indexer/
Source: https://github.com/apache/maven-indexer
-Files: indexer-core-7.0.2.jar search-api-7.0.2.jar search-backend-smo-7.0.2.jar
+Files: indexer-core-7.0.3.jar search-api-7.0.3.jar search-backend-smo-7.0.3.jar
Apache License
Version 2.0, January 2004
diff --git a/java/maven.indexer/external/indexer-core-7.0.2-notice.txt
b/java/maven.indexer/external/indexer-core-7.0.3-notice.txt
similarity index 100%
rename from java/maven.indexer/external/indexer-core-7.0.2-notice.txt
rename to java/maven.indexer/external/indexer-core-7.0.3-notice.txt
diff --git a/java/maven.indexer/nbproject/project.properties
b/java/maven.indexer/nbproject/project.properties
index fda5aa1a25..84ee23cbdc 100644
--- a/java/maven.indexer/nbproject/project.properties
+++ b/java/maven.indexer/nbproject/project.properties
@@ -20,9 +20,9 @@ is.autoload=true
javac.source=11
javac.target=11
javac.compilerargs=-Xlint -Xlint:-serial
-release.external/indexer-core-7.0.2.jar=modules/ext/maven/indexer-core-7.0.2.jar
-release.external/search-api-7.0.2.jar=modules/ext/maven/search-api-7.0.2.jar
-release.external/search-backend-smo-7.0.2.jar=modules/ext/maven/search-backend-smo-7.0.2.jar
+release.external/indexer-core-7.0.3.jar=modules/ext/maven/indexer-core-7.0.3.jar
+release.external/search-api-7.0.3.jar=modules/ext/maven/search-api-7.0.3.jar
+release.external/search-backend-smo-7.0.3.jar=modules/ext/maven/search-backend-smo-7.0.3.jar
release.external/gson-2.10.1.jar=modules/ext/maven/gson-2.10.1.jar
release.external/lucene-core-9.6.0.jar=modules/ext/maven/lucene-core-9.6.0.jar
release.external/lucene-backward-codecs-9.6.0.jar=modules/ext/maven/lucene-backward-codecs-9.6.0.jar
diff --git a/java/maven.indexer/nbproject/project.xml
b/java/maven.indexer/nbproject/project.xml
index fc2f00355b..19c22e0642 100644
--- a/java/maven.indexer/nbproject/project.xml
+++ b/java/maven.indexer/nbproject/project.xml
@@ -175,16 +175,16 @@
<package>org.netbeans.modules.maven.indexer.spi.impl</package>
</friend-packages>
<class-path-extension>
-
<runtime-relative-path>ext/maven/indexer-core-7.0.2.jar</runtime-relative-path>
- <binary-origin>external/indexer-core-7.0.2.jar</binary-origin>
+
<runtime-relative-path>ext/maven/indexer-core-7.0.3.jar</runtime-relative-path>
+ <binary-origin>external/indexer-core-7.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
-
<runtime-relative-path>ext/maven/search-api-7.0.2.jar</runtime-relative-path>
- <binary-origin>external/search-api-7.0.2.jar</binary-origin>
+
<runtime-relative-path>ext/maven/search-api-7.0.3.jar</runtime-relative-path>
+ <binary-origin>external/search-api-7.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
-
<runtime-relative-path>ext/maven/search-backend-smo-7.0.2.jar</runtime-relative-path>
-
<binary-origin>external/search-backend-smo-7.0.2.jar</binary-origin>
+
<runtime-relative-path>ext/maven/search-backend-smo-7.0.3.jar</runtime-relative-path>
+
<binary-origin>external/search-backend-smo-7.0.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/maven/lucene-core-9.6.0.jar</runtime-relative-path>
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ArtifactDependencyIndexCreator.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ArtifactDependencyIndexCreator.java
index 52964bf717..60b3c58021 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ArtifactDependencyIndexCreator.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ArtifactDependencyIndexCreator.java
@@ -114,7 +114,7 @@ class ArtifactDependencyIndexCreator extends
AbstractIndexCreator {
}
@Override public Collection<IndexerField> getIndexerFields() {
- return Arrays.asList(FLD_NB_DEPENDENCY_GROUP,
FLD_NB_DEPENDENCY_ARTIFACT, FLD_NB_DEPENDENCY_VERSION);
+ return List.of(FLD_NB_DEPENDENCY_GROUP, FLD_NB_DEPENDENCY_ARTIFACT,
FLD_NB_DEPENDENCY_VERSION);
}
private MavenProject load(ArtifactInfo ai) {
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreator.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreator.java
index 08a4bd8be8..3fc430635f 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreator.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreator.java
@@ -27,7 +27,6 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
@@ -43,6 +42,7 @@ import java.util.stream.Stream;
import java.util.zip.CRC32;
import org.apache.commons.codec.binary.Base32;
import org.apache.lucene.document.Document;
+import org.apache.lucene.index.StoredFields;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
@@ -172,11 +172,12 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
for (IndexingContext context : contexts) {
IndexSearcher searcher = context.acquireIndexSearcher();
try {
+ StoredFields storedFields = searcher.storedFields();
searcher.search(refClassQuery, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
LOG.log(Level.FINER, "for {0} ~ {1} found {2} hits", new
Object[] {className, searchString, hits.length});
for (ScoreDoc hit : hits) {
- Document d = searcher.doc(hit.doc);
+ Document d = storedFields.document(hit.doc);
String fldValue = d.get(NB_DEPENDENCY_CLASSES);
LOG.log(Level.FINER, "{0} uses: {1}", new Object[]
{className, fldValue});
Set<String> refClasses = parseField(searchString,
fldValue, d.get(ArtifactInfo.NAMES));
@@ -184,7 +185,7 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
ArtifactInfo ai = IndexUtils.constructArtifactInfo(d,
context);
if (ai != null) {
ai.setRepository(context.getRepositoryId());
- List<NBVersionInfo> version =
NexusRepositoryIndexerImpl.convertToNBVersionInfo(Collections.singleton(ai));
+ List<NBVersionInfo> version =
NexusRepositoryIndexerImpl.convertToNBVersionInfo(List.of(ai));
if (!version.isEmpty()) {
results.add(new ClassUsage(version.get(0),
refClasses));
}
@@ -196,7 +197,9 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
}
}
}
+
private static Set<String> parseField(String refereeCRC, String field,
String referrersNL) {
+ assert refereeCRC.length() == 7;
Set<String> referrers = new TreeSet<>();
int p = 0;
for (String referrer : referrersNL.split("\n")) {
@@ -205,7 +208,7 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
p++;
break;
}
- if (field.substring(p, p + 7).equals(refereeCRC)) {
+ if (field.regionMatches(p, refereeCRC, 0,
refereeCRC.length())) {
referrers.add(referrer.substring(1).replace('/', '.'));
}
p += 8;
@@ -269,12 +272,7 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
int shell = referrer.indexOf('$', referrer.lastIndexOf('/') + 1);
String referrerTopLevel = shell == -1 ? referrer :
referrer.substring(0, shell);
- Set<String> tmp = depsMap.get(referrerTopLevel);
- if (tmp == null) {
- tmp = new HashSet<>();
- depsMap.put(referrerTopLevel, tmp);
- }
- Set<String> referees = tmp;
+ Set<String> referees = depsMap.computeIfAbsent(referrerTopLevel, k ->
new HashSet<>());
dependenciesOf(classData)
.filter((referee) -> !referrer.equals(referee))
@@ -366,7 +364,7 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
.stream().unordered().map(ClassName::getInternalName).distinct();
}
- static final List<IndexerField> INDEXER_FIELDS =
Collections.singletonList(FLD_NB_DEPENDENCY_CLASS);
+ static final List<IndexerField> INDEXER_FIELDS =
List.of(FLD_NB_DEPENDENCY_CLASS);
@Override
public Collection<IndexerField> getIndexerFields() {
return INDEXER_FIELDS;
@@ -377,7 +375,7 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
* @return the CRC-32 of its UTF-8 representation, as big-endian Base-32
without padding (so seven chars), lower case (to not confuse maven-indexer)
*/
static String crc32base32(String s) {
- crc.reset();
+ CRC32 crc = new CRC32();
crc.update(s.getBytes(StandardCharsets.UTF_8));
long v = crc.getValue();
byte[] b32 = base32.encode(new byte[] {(byte) (v >> 24 & 0xFF), (byte)
(v >> 16 & 0xFF), (byte) (v >> 8 & 0xFF), (byte) (v & 0xFF)});
@@ -386,7 +384,6 @@ class ClassDependencyIndexCreator extends
AbstractIndexCreator {
return new String(b32, 0, 7,
StandardCharsets.ISO_8859_1).toLowerCase();
}
- private static final CRC32 crc = new CRC32();
private static final Base32 base32 = new Base32();
}
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
index a603cefb68..2402b12e48 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImpl.java
@@ -69,6 +69,7 @@ import
org.apache.maven.index.creator.MavenPluginArtifactInfoIndexCreator;
import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
import org.apache.maven.index.expr.StringSearchExpression;
import org.apache.maven.index.updater.IndexUpdateRequest;
+import org.apache.maven.index.updater.IndexUpdateResult;
import org.apache.maven.index.updater.IndexUpdater;
import org.apache.maven.index.updater.ResourceFetcher;
import org.apache.maven.search.SearchRequest;
@@ -134,6 +135,7 @@ import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders;
import org.openide.util.NbBundle.Messages;
import org.netbeans.modules.maven.indexer.spi.RepositoryIndexQueryProvider;
+
import static
org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator.FLD_LAST_MODIFIED;
@@ -230,18 +232,13 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
return this;
}
- private Mutex getRepoMutex(RepositoryInfo repo) {
+ private static Mutex getRepoMutex(RepositoryInfo repo) {
return getRepoMutex(repo.getId());
}
- private Mutex getRepoMutex(String repoId) {
+ private static Mutex getRepoMutex(String repoId) {
synchronized (repoMutexMap) {
- Mutex m = repoMutexMap.get(repoId);
- if (m == null) {
- m = new Mutex();
- repoMutexMap.put(repoId, m);
- }
- return m;
+ return repoMutexMap.computeIfAbsent(repoId, k -> new Mutex());
}
}
@@ -309,28 +306,13 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
/* indexers */ indexers);
// The allGroups and rootGroups properties of the IndexingContext are
- // not persistent anymore, so need to be save outside the context
- boolean needGroupCacheRebuild = false;
+ // not persistent anymore, so need to be saved outside the context
try {
context.setAllGroups(Files.readAllLines(getAllGroupCacheFile(repo)));
- } catch (IOException ex) {
- needGroupCacheRebuild = true;
- }
- try {
context.setRootGroups(Files.readAllLines(getRootGroupCacheFile(repo)));
} catch (IOException ex) {
- needGroupCacheRebuild = true;
- }
- // At least one of the group caches could not be loaded, so rebuild it
- if(needGroupCacheRebuild) {
- RP_LOCAL.submit(() -> {
- try {
- context.rebuildGroups();
- storeGroupCache(repo, context);
- } catch (IOException ex) {
- LOGGER.log(Level.WARNING, "Failed to store group caches
for repo: " + repo.getId(), ex);
- }
- });
+ // At least one of the group caches could not be loaded, so
rebuild it
+ rebuildGroupCache(repo, context);
}
indexingContexts.put(context.getId(), context);
return context;
@@ -503,6 +485,7 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
}
boolean fetchFailed = false;
long t = System.currentTimeMillis();
+ IndexUpdateResult fetchUpdateResult = null;
RemoteIndexTransferListener listener = null;
try {
IndexingContext indexingContext =
getIndexingContexts().get(repo.getId());
@@ -583,9 +566,8 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
nic.start(listener);
}
try {
- Files.deleteIfExists(getAllGroupCacheFile(repo));
- Files.deleteIfExists(getRootGroupCacheFile(repo));
- remoteIndexUpdater.fetchAndUpdateIndex(iur);
+ removeGroupCache(repo);
+ fetchUpdateResult =
remoteIndexUpdater.fetchAndUpdateIndex(iur);
storeGroupCache(repo, indexingContext);
} catch (IOException | AlreadyClosedException |
IllegalArgumentException ex) {
// AlreadyClosedException can happen in low storage
situations when lucene is trying to handle IOEs
@@ -595,6 +577,7 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
} catch (RuntimeException ex) {
// thread pools, like the one used in maven-indexer's
IndexDataReader, may suppress cancellation exceptions
// lets try to find them again
+ fetchFailed = true;
if (isCancellation(ex)) {
Cancellation cancellation = new Cancellation();
cancellation.addSuppressed(ex);
@@ -625,8 +608,7 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
RepositoryIndexerListener repoListener = new
RepositoryIndexerListener(indexingContext);
try {
// Ensure no stale cache files are left
- Files.deleteIfExists(getAllGroupCacheFile(repo));
- Files.deleteIfExists(getRootGroupCacheFile(repo));
+ removeGroupCache(repo);
scan(indexingContext, null, repoListener, updateLocal);
storeGroupCache(repo, indexingContext);
} finally {
@@ -667,7 +649,13 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
} catch (ComponentLookupException x) {
throw new IOException("could not find protocol handler for " +
repo.getRepositoryUrl(), x);
} finally {
- LOGGER.log(Level.INFO, "Indexing of {0} took {1}s.", new
Object[]{repo.getId(), String.format("%.2f", (System.currentTimeMillis() -
t)/1000.0f)});
+ String kind;
+ if (fetchUpdateResult != null) {
+ kind = fetchUpdateResult.isFullUpdate() ? "download, create" :
"incremental download, update";
+ } else {
+ kind = "scan";
+ }
+ LOGGER.log(Level.INFO, "Indexing [{0}] of {1} took {2}s.", new
Object[]{kind, repo.getId(), String.format("%.2f", (System.currentTimeMillis()
- t)/1000.0f)});
synchronized (indexingMutexes) {
indexingMutexes.remove(mutex);
}
@@ -820,7 +808,7 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
if (!tmpDir.mkdirs()) {
throw new IOException( "Cannot create temporary directory: " +
tmpDir );
}
- File tmpFile = new File(tmpDir, context.getId() + "-tmp");
+ File tmpFile = new File(tmpDir, context.getId() + "-tmp"); // TODO:
purpose of file?
IndexingContext tmpContext = null;
try {
@@ -1811,23 +1799,49 @@ public class NexusRepositoryIndexerImpl implements
RepositoryIndexerImplementati
return getIndexDirectory(info).resolve(GROUP_CACHE_ROOT_PREFIX + "." +
GROUP_CACHE_ROOT_SUFFIX);
}
- private void storeGroupCache(RepositoryInfo repoInfo, IndexingContext ic)
throws IOException {
-
- Path indexDir = getIndexDirectory(repoInfo);
+ private static void storeGroupCache(RepositoryInfo repo, IndexingContext
context) throws IOException {
+ Path indexDir = getIndexDirectory(repo);
Path tempAllCache = Files.createTempFile(indexDir,
GROUP_CACHE_ALL_PREFIX, GROUP_CACHE_ALL_SUFFIX);
Path tempRootCache = Files.createTempFile(indexDir,
GROUP_CACHE_ROOT_PREFIX, GROUP_CACHE_ROOT_SUFFIX);
try {
- Files.write(tempAllCache, ic.getAllGroups());
- Files.move(tempAllCache, getAllGroupCacheFile(repoInfo),
StandardCopyOption.REPLACE_EXISTING);
+ Files.write(tempAllCache, context.getAllGroups());
+ Files.move(tempAllCache, getAllGroupCacheFile(repo),
StandardCopyOption.REPLACE_EXISTING);
- Files.write(tempRootCache, ic.getRootGroups());
- Files.move(tempRootCache, getRootGroupCacheFile(repoInfo),
StandardCopyOption.REPLACE_EXISTING);
+ Files.write(tempRootCache, context.getRootGroups());
+ Files.move(tempRootCache, getRootGroupCacheFile(repo),
StandardCopyOption.REPLACE_EXISTING);
} finally {
Files.deleteIfExists(tempAllCache);
Files.deleteIfExists(tempRootCache);
}
}
+ private static void removeGroupCache(RepositoryInfo repo) throws
IOException {
+ Files.deleteIfExists(getAllGroupCacheFile(repo));
+ Files.deleteIfExists(getRootGroupCacheFile(repo));
+ }
+
+ private static void rebuildGroupCache(RepositoryInfo repo, IndexingContext
context) throws IOException {
+ removeGroupCache(repo);
+ (repo.isLocal() ? RP_LOCAL : RP_REMOTE).submit(() -> {
+ getRepoMutex(repo).writeAccess(() -> {
+ Path allGroupsPath = getAllGroupCacheFile(repo);
+ Path rootGroupsPath = getRootGroupCacheFile(repo);
+ if (Files.exists(allGroupsPath) &&
Files.exists(rootGroupsPath)) {
+ return; // already rebuilt
+ }
+ try {
+ LOGGER.log(Level.FINE, "Rebuilding group cache for {0}",
repo.getId());
+ long start = System.currentTimeMillis();
+ context.rebuildGroups();
+ storeGroupCache(repo, context);
+ LOGGER.log(Level.INFO, "Group cache rebuilding of {0} took
{1}s.", new Object[] {repo.getId(), (System.currentTimeMillis()-start)});
+ } catch (IOException e) {
+ LOGGER.log(Level.WARNING, "Failed to rebuild groups for
repo: " + repo.getId(), e);
+ }
+ });
+ });
+ }
+
// somewhat based on maven-indexer impl (in WagonHelper) prior to removal
in maven-indexer 7.0.0
private static class WagonFetcher implements ResourceFetcher {
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBArtifactInfo.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBArtifactInfo.java
index ebc9e40f22..3f63663f7d 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBArtifactInfo.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBArtifactInfo.java
@@ -40,6 +40,7 @@ public class NBArtifactInfo {
this.name = name;
}
+ @SuppressWarnings("element-type-mismatch")
public boolean removeVersionInfo(Object o) {
return versionInfos.remove(o);
}
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBGroupInfo.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBGroupInfo.java
index 8912a61d7b..ab8b179741 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBGroupInfo.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/NBGroupInfo.java
@@ -39,6 +39,7 @@ public class NBGroupInfo {
this.name = name;
}
+ @SuppressWarnings("element-type-mismatch")
public void removeArtifactInfo(Object o) {
artifactInfos.remove(o);
}
diff --git
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/RepositoryUtil.java
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/RepositoryUtil.java
index 6ad907f3c1..2eb247e179 100644
---
a/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/RepositoryUtil.java
+++
b/java/maven.indexer/src/org/netbeans/modules/maven/indexer/api/RepositoryUtil.java
@@ -22,13 +22,11 @@
package org.netbeans.modules.maven.indexer.api;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.math.BigInteger;
+import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import java.util.Collections;
import java.util.List;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -93,40 +91,26 @@ public final class RepositoryUtil {
List<ArtifactRepository> remotes;
RepositoryInfo repo =
RepositoryPreferences.getInstance().getRepositoryInfoById(info.getRepoId());
if (repo != null && repo.isRemoteDownloadable()) {
- remotes =
Collections.singletonList(online.createRemoteRepository(repo.getRepositoryUrl(),
repo.getId()));
+ remotes =
List.of(online.createRemoteRepository(repo.getRepositoryUrl(), repo.getId()));
} else {
- remotes =
Collections.singletonList(online.createRemoteRepository(RepositorySystem.DEFAULT_REMOTE_REPO_URL,
RepositorySystem.DEFAULT_REMOTE_REPO_ID));
+ remotes =
List.of(online.createRemoteRepository(RepositorySystem.DEFAULT_REMOTE_REPO_URL,
RepositorySystem.DEFAULT_REMOTE_REPO_ID));
}
online.resolve(a, remotes, online.getLocalRepository());
return a.getFile();
}
public static String calculateSHA1Checksum(File file) throws IOException {
- byte[] buffer = readFile(file);
+ if (!file.exists() || !file.isFile()) {
+ throw new IOException("file '"+file+"' does not exist or is not a
valid file");
+ }
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException x) {
throw new IOException(x);
}
- digest.update(buffer);
+ digest.update(Files.readAllBytes(file.toPath()));
return String.format("%040x", new BigInteger(1, digest.digest()));
}
- private static byte[] readFile(File file) throws IOException {
-
- byte[] bytes = new byte[(int) file.length()];
- try (InputStream is = new FileInputStream(file)) {
-
- int offset = 0;
- int numRead = 0;
-
- while (offset < bytes.length && (numRead = is.read(bytes, offset,
bytes.length - offset)) != -1) {
- offset += numRead;
- }
- }
-
- return bytes;
- }
-
}
diff --git
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreatorTest.java
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreatorTest.java
index 3e029a602e..83c3f102e9 100644
---
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreatorTest.java
+++
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/ClassDependencyIndexCreatorTest.java
@@ -23,7 +23,6 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -86,7 +85,7 @@ public class ClassDependencyIndexCreatorTest extends
NexusTestBase {
// repo set up, now index and query:
nrii.indexRepo(info);
- List<RepositoryInfo> repo = Collections.singletonList(info);
+ List<RepositoryInfo> repo = List.of(info);
List<ClassUsage> list = nrii.findClassUsages("mod1.API",
repo).getResults();
assertEquals("[test:mod2:0:test[mod2.Client, mod2.OtherClient],
test:mod3:0:test[mod3.Client]]", list.toString());
@@ -128,7 +127,7 @@ public class ClassDependencyIndexCreatorTest extends
NexusTestBase {
install(mod2v2, "test", "mod2", "43", "jar");
nrii.indexRepo(info);
- List<RepositoryInfo> repo = Collections.singletonList(info);
+ List<RepositoryInfo> repo = List.of(info);
// single version
List<NBVersionInfo> list = nrii.findVersionsByClass("mod1.API",
repo).getResults();
diff --git
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImplTest.java
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImplTest.java
index b704c9898c..536091b321 100644
---
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImplTest.java
+++
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/NexusRepositoryIndexerImplTest.java
@@ -20,7 +20,6 @@
package org.netbeans.modules.maven.indexer;
import java.io.File;
-import java.util.Collections;
import java.util.List;
import org.apache.maven.index.ArtifactInfo;
import org.netbeans.junit.MockServices;
@@ -43,7 +42,7 @@ public class NexusRepositoryIndexerImplTest extends
NexusTestBase {
install(File.createTempFile("whatever", ".txt", getWorkDir()), "test",
"spin", "1.1", "txt");
nrii.indexRepo(info);
// RepositoryQueries should handle the query via our
NexusRepositoryIndexerImpl
- RepositoryQueries.Result<String> res =
RepositoryQueries.getArtifactsResult("test", Collections.singletonList(info));
+ RepositoryQueries.Result<String> res =
RepositoryQueries.getArtifactsResult("test", List.of(info));
assertEquals("[spin]", res.getResults().toString());
}
@@ -56,7 +55,7 @@ public class NexusRepositoryIndexerImplTest extends
NexusTestBase {
qf.setValue("stuff");
qf.setOccur(QueryField.OCCUR_MUST);
qf.setMatch(QueryField.MATCH_EXACT);
- assertEquals("[test:plugin:0:test]",
nrii.find(Collections.singletonList(qf),
Collections.singletonList(info)).getResults().toString());
+ assertEquals("[test:plugin:0:test]", nrii.find(List.of(qf),
List.of(info)).getResults().toString());
}
public void testLastUpdated() throws Exception { // #197670
@@ -66,7 +65,7 @@ public class NexusRepositoryIndexerImplTest extends
NexusTestBase {
install(empty, "test", "art", "0", "pom.lastUpdated");
install(empty, "test", "art", "0", "jar.lastUpdated");
nrii.indexRepo(info);
- List<NBVersionInfo> versions = nrii.getVersions("test", "art",
Collections.singletonList(info)).getResults();
+ List<NBVersionInfo> versions = nrii.getVersions("test", "art",
List.of(info)).getResults();
assertEquals(1, versions.size());
NBVersionInfo v = versions.get(0);
assertEquals("test:art:0:test", v.toString());
diff --git
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/api/RepositoryQueriesTest.java
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/api/RepositoryQueriesTest.java
index 23405e1383..6fd97331a5 100644
---
a/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/api/RepositoryQueriesTest.java
+++
b/java/maven.indexer/test/unit/src/org/netbeans/modules/maven/indexer/api/RepositoryQueriesTest.java
@@ -42,11 +42,7 @@ public class RepositoryQueriesTest extends NbTestCase {
protected void setUp() throws Exception {
super.setUp();
}
-
- public void testAlternativeQueryProvider() throws URISyntaxException {
-
- }
-
+
public void testAlternativeResult() throws URISyntaxException {
MockServices.setServices(TestIndexer1.class);
@@ -59,7 +55,7 @@ public class RepositoryQueriesTest extends NbTestCase {
public void testTwoReposTwoQueryProviders() throws URISyntaxException {
MockServices.setServices(TestIndexer1.class, TestIndexer2.class);
- RepositoryQueries.Result<NBVersionInfo> result =
RepositoryQueries.findArchetypesResult(Arrays.asList(TestIndexer1.REPO,
TestIndexer2.REPO));
+ RepositoryQueries.Result<NBVersionInfo> result =
RepositoryQueries.findArchetypesResult(List.of(TestIndexer1.REPO,
TestIndexer2.REPO));
assertEquals(2, result.getTotalResultCount());
assertEquals(2, result.getReturnedResultCount());
assertArtefactIds(result.getResults(), new String[] {TestIndexer1.ID,
TestIndexer2.ID});
@@ -68,7 +64,7 @@ public class RepositoryQueriesTest extends NbTestCase {
public void testTwoReposOneAccepted() throws URISyntaxException {
MockServices.setServices(TestIndexer1.class);
- RepositoryQueries.Result<NBVersionInfo> result =
RepositoryQueries.findArchetypesResult(Arrays.asList(TestIndexer1.REPO,
TestIndexer2.REPO));
+ RepositoryQueries.Result<NBVersionInfo> result =
RepositoryQueries.findArchetypesResult(List.of(TestIndexer1.REPO,
TestIndexer2.REPO));
assertEquals(1, result.getTotalResultCount());
assertEquals(1, result.getReturnedResultCount());
assertArtefactIds(result.getResults(), new String[] {TestIndexer1.ID});
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists