Rehost checkClasspath() 35/104635/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 28 Feb 2023 23:41:39 +0000 (00:41 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 28 Feb 2023 23:43:19 +0000 (00:43 +0100)
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>
plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java
plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesMojo.java
plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/UtilTest.java
plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesMojoTest.java [new file with mode: 0644]

index 20dd43ca806d72aa9838eff474940c72d072305f..4e3e9fd4d1cf518ab90bc9b48c0e7f0b45ae9ca7 100644 (file)
@@ -7,28 +7,12 @@
  */
 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
     }
@@ -36,76 +20,4 @@ final class Util {
     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);
-            }
-        }
-    }
 }
index 4700e942cf3e97cda12ba942b4bcf8b9d72fd7da..0e738bd9cc2e28fec1a825b18fc7e65e67a455ed 100644 (file)
@@ -7,15 +7,23 @@
  */
 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;
@@ -112,7 +120,7 @@ public final class YangToSourcesMojo extends AbstractMojo {
             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);
@@ -121,6 +129,80 @@ public final class YangToSourcesMojo extends AbstractMojo {
             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);
     }
index 0f93da1993af5d6d8cf7c7eef00748a1530a2130..c8ec51f6023ca138e76954ac848354f28dc21a05 100644 (file)
@@ -8,75 +8,17 @@
 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());
     }
 }
diff --git a/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesMojoTest.java b/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesMojoTest.java
new file mode 100644 (file)
index 0000000..82b47cf
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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));
+    }
+}