This is a single-use utility method, move it to its sole user.
Change-Id: Icb5aec7e488b479bcad0c8e046d61cb4c5ec9ed1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
*/
package org.opendaylight.yangtools.yang2sources.plugin;
-import static org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.LOG_PREFIX;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.RepositorySystem;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
import org.opendaylight.yangtools.yang.model.api.ModuleLike;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
final class Util {
- private static final Logger LOG = LoggerFactory.getLogger(Util.class);
-
private Util() {
// Hidden on purpose
}
static @NonNull SourceIdentifier moduleToIdentifier(final ModuleLike module) {
return new SourceIdentifier(Unqualified.of(module.getName()), module.getRevision().orElse(null));
}
-
- /**
- * Read current project dependencies and check if it don't grab incorrect
- * artifacts versions which could be in conflict with plugin dependencies.
- *
- * @param project current project
- * @param repoSystem repository system
- * @param localRepo local repository
- * @param remoteRepos remote repositories
- */
- static void checkClasspath(final MavenProject project, final RepositorySystem repoSystem,
- final ArtifactRepository localRepo, final List<ArtifactRepository> remoteRepos) {
- final var plugin = project.getPlugin(YangToSourcesMojo.PLUGIN_NAME);
- if (plugin == null) {
- LOG.warn("{} {} not found, dependencies version check skipped", LOG_PREFIX, YangToSourcesMojo.PLUGIN_NAME);
- return;
- }
-
- final var projectDependencies = project.getDependencyArtifacts();
- for (var entry : getPluginTransitiveDependencies(plugin, repoSystem, localRepo, remoteRepos).entrySet()) {
- checkArtifact(entry.getKey(), projectDependencies);
- for (var dependency : entry.getValue()) {
- checkArtifact(dependency, projectDependencies);
- }
- }
- }
-
- /**
- * Read transitive dependencies of given plugin and store them in map.
- *
- * @param plugin plugin to read
- * @param repoSystem repository system
- * @param localRepository local repository
- * @param remoteRepos list of remote repositories
- * @return a Map of transitive dependencies
- */
- private static Map<Artifact, Set<Artifact>> getPluginTransitiveDependencies(final Plugin plugin,
- final RepositorySystem repoSystem, final ArtifactRepository localRepository,
- final List<ArtifactRepository> remoteRepos) {
- final var ret = new HashMap<Artifact, Set<Artifact>>();
- for (var dep : plugin.getDependencies()) {
- final var artifact = repoSystem.createDependencyArtifact(dep);
-
- final var request = new ArtifactResolutionRequest();
- request.setArtifact(artifact);
- request.setResolveTransitively(true);
- request.setLocalRepository(localRepository);
- request.setRemoteRepositories(remoteRepos);
-
- ret.put(artifact, repoSystem.resolve(request).getArtifacts());
- }
- return ret;
- }
-
- /**
- * Check artifact against collection of dependencies. If collection contains artifact with same groupId and
- * artifactId, but different version, logs a warning.
- *
- * @param artifact artifact to check
- * @param dependencies collection of dependencies
- */
- private static void checkArtifact(final Artifact artifact, final Set<Artifact> dependencies) {
- for (var dep : dependencies) {
- if (artifact.getGroupId().equals(dep.getGroupId()) && artifact.getArtifactId().equals(dep.getArtifactId())
- && !artifact.getVersion().equals(dep.getVersion())) {
- LOG.warn("{} Dependency resolution conflict:", LOG_PREFIX);
- LOG.warn("{} '{}' dependency [{}] has different version than one declared in current project [{}]"
- + ". It is recommended to fix this problem because it may cause compilation errors.",
- LOG_PREFIX, YangToSourcesMojo.PLUGIN_NAME, artifact, dep);
- }
- }
- }
}
*/
package org.opendaylight.yangtools.yang2sources.plugin;
+import static org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.LOG_PREFIX;
+
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
return;
}
- Util.checkClasspath(project, repoSystem, localRepository, remoteRepos);
+ checkClasspath(project, repoSystem, localRepository, remoteRepos);
// defaults to ${basedir}/src/main/yang
File yangFilesRootFile = processYangFilesRootDir(yangFilesRootDir, project.getBasedir());
Collection<File> excludedFiles = processExcludeFiles(excludeFiles, yangFilesRootFile);
inspectDependencies).execute();
}
+ /**
+ * Read current project dependencies and check if it don't grab incorrect
+ * artifacts versions which could be in conflict with plugin dependencies.
+ *
+ * @param project current project
+ * @param repoSystem repository system
+ * @param localRepo local repository
+ * @param remoteRepos remote repositories
+ */
+ @VisibleForTesting
+ static void checkClasspath(final MavenProject project, final RepositorySystem repoSystem,
+ final ArtifactRepository localRepo, final List<ArtifactRepository> remoteRepos) {
+ final var plugin = project.getPlugin(YangToSourcesMojo.PLUGIN_NAME);
+ if (plugin == null) {
+ LOG.warn("{} {} not found, dependencies version check skipped", LOG_PREFIX, YangToSourcesMojo.PLUGIN_NAME);
+ return;
+ }
+
+ final var projectDependencies = project.getDependencyArtifacts();
+ for (var entry : getPluginTransitiveDependencies(plugin, repoSystem, localRepo, remoteRepos).entrySet()) {
+ checkArtifact(entry.getKey(), projectDependencies);
+ for (var dependency : entry.getValue()) {
+ checkArtifact(dependency, projectDependencies);
+ }
+ }
+ }
+
+ /**
+ * Read transitive dependencies of given plugin and store them in map.
+ *
+ * @param plugin plugin to read
+ * @param repoSystem repository system
+ * @param localRepository local repository
+ * @param remoteRepos list of remote repositories
+ * @return a Map of transitive dependencies
+ */
+ private static Map<Artifact, Set<Artifact>> getPluginTransitiveDependencies(final Plugin plugin,
+ final RepositorySystem repoSystem, final ArtifactRepository localRepository,
+ final List<ArtifactRepository> remoteRepos) {
+ final var ret = new HashMap<Artifact, Set<Artifact>>();
+ for (var dep : plugin.getDependencies()) {
+ final var artifact = repoSystem.createDependencyArtifact(dep);
+
+ final var request = new ArtifactResolutionRequest();
+ request.setArtifact(artifact);
+ request.setResolveTransitively(true);
+ request.setLocalRepository(localRepository);
+ request.setRemoteRepositories(remoteRepos);
+
+ ret.put(artifact, repoSystem.resolve(request).getArtifacts());
+ }
+ return ret;
+ }
+
+ /**
+ * Check artifact against collection of dependencies. If collection contains artifact with same groupId and
+ * artifactId, but different version, logs a warning.
+ *
+ * @param artifact artifact to check
+ * @param dependencies collection of dependencies
+ */
+ private static void checkArtifact(final Artifact artifact, final Set<Artifact> dependencies) {
+ for (var dep : dependencies) {
+ if (artifact.getGroupId().equals(dep.getGroupId()) && artifact.getArtifactId().equals(dep.getArtifactId())
+ && !artifact.getVersion().equals(dep.getVersion())) {
+ LOG.warn("{} Dependency resolution conflict:", LOG_PREFIX);
+ LOG.warn("{} '{}' dependency [{}] has different version than one declared in current project [{}]"
+ + ". It is recommended to fix this problem because it may cause compilation errors.",
+ LOG_PREFIX, YangToSourcesMojo.PLUGIN_NAME, artifact, dep);
+ }
+ }
+ }
+
+
private static <T> List<T> arrayToList(final T[] array) {
return array == null ? ImmutableList.of() : Arrays.asList(array);
}
package org.opendaylight.yangtools.yang2sources.plugin;
import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import com.google.common.collect.ImmutableSet;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
import java.util.Set;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.repository.RepositorySystem;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
-@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class UtilTest {
@Test
- public void checkClasspathTest() throws Exception {
- final MavenProject project = mock(MavenProject.class);
- final Plugin plugin = mock(Plugin.class);
- final RepositorySystem repoSystem = mock(RepositorySystem.class);
- final ArtifactRepository localRepo = mock(ArtifactRepository.class);
- final ArtifactResolutionResult artifactResolResult = mock(ArtifactResolutionResult.class);
- final Artifact artifact = mock(Artifact.class);
- final Dependency dep = mock(Dependency.class);
-
- final List<ArtifactRepository> remoteRepos = new ArrayList<>();
- remoteRepos.add(localRepo);
-
- final Set<Artifact> artifacts = new HashSet<>();
- artifacts.add(artifact);
-
- final List<Dependency> listDepcy = new ArrayList<>();
- listDepcy.add(dep);
-
- doReturn(plugin).when(project).getPlugin(anyString());
- doReturn(listDepcy).when(plugin).getDependencies();
- doReturn("artifactId").when(artifact).getArtifactId();
- doReturn("groupId").when(artifact).getGroupId();
- doReturn("SNAPSHOT").when(artifact).getVersion();
- doReturn(artifact).when(repoSystem).createDependencyArtifact(dep);
- doReturn(artifactResolResult).when(repoSystem).resolve(any(ArtifactResolutionRequest.class));
- doReturn(artifacts).when(artifactResolResult).getArtifacts();
- doReturn(artifacts).when(project).getDependencyArtifacts();
-
- Util.checkClasspath(project, repoSystem, localRepo, remoteRepos);
- assertEquals(1, artifacts.size());
- assertEquals(1, remoteRepos.size());
- assertEquals(1, listDepcy.size());
- }
-
- @Test
- public void contextHolderTest() throws Exception {
- final EffectiveModelContext context = YangParserTestUtils.parseYangResources(getClass(), "/test.yang",
- "/test2.yang");
- final Set<Module> yangModules = new HashSet<>();
- final ContextHolder cxH = new ContextHolder(context, yangModules, ImmutableSet.of());
- assertEquals(context, cxH.getContext());
- assertEquals(yangModules, cxH.getYangModules());
+ public void contextHolderTest() {
+ final var context = YangParserTestUtils.parseYangResources(getClass(), "/test.yang", "/test2.yang");
+ final var holder = new ContextHolder(context, Set.of(), Set.of());
+ assertEquals(context, holder.getContext());
+ assertEquals(Set.of(), holder.getYangModules());
}
}
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang2sources.plugin;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+
+import java.util.List;
+import java.util.Set;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.RepositorySystem;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
+public class YangToSourcesMojoTest {
+ @Mock
+ private MavenProject project;
+ @Mock
+ private Plugin plugin;
+ @Mock
+ private RepositorySystem repoSystem;
+ @Mock
+ private ArtifactRepository localRepo;
+ @Mock
+ private ArtifactResolutionResult artifactResolResult;
+ @Mock
+ private Artifact artifact;
+ @Mock
+ private Dependency dep;
+
+ @Test
+ public void checkClasspathTest() {
+ final var artifacts = Set.of(artifact);
+
+ doReturn(plugin).when(project).getPlugin(anyString());
+ doReturn(List.of(dep)).when(plugin).getDependencies();
+ doReturn("artifactId").when(artifact).getArtifactId();
+ doReturn("groupId").when(artifact).getGroupId();
+ doReturn("SNAPSHOT").when(artifact).getVersion();
+ doReturn(artifact).when(repoSystem).createDependencyArtifact(dep);
+ doReturn(artifactResolResult).when(repoSystem).resolve(any(ArtifactResolutionRequest.class));
+ doReturn(artifacts).when(artifactResolResult).getArtifacts();
+ doReturn(artifacts).when(project).getDependencyArtifacts();
+
+ YangToSourcesMojo.checkClasspath(project, repoSystem, localRepo, List.of(localRepo));
+ }
+}