Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MNG-8180] Handle NPE due non-existent tags #1639

Merged
merged 3 commits into from
Aug 11, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import java.util.LinkedHashMap;
import java.util.List;

import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.annotations.Nullable;
import org.apache.maven.api.metadata.Metadata;
import org.apache.maven.api.metadata.Plugin;

Expand All @@ -32,12 +34,16 @@
*/
final class PluginsMetadata extends MavenMetadata {
static final class PluginInfo {
@Nonnull
final String groupId;

@Nonnull
private final String artifactId;

@Nullable
private final String goalPrefix;

@Nullable
private final String name;

PluginInfo(String groupId, String artifactId, String goalPrefix, String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,14 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
// - maven-plugin-api (for model)
// - Plexus Container (for model supporting classes and exceptions)
XmlNode root = XmlNodeStaxBuilder.build(is, null);
String groupId = root.getChild("groupId").getValue();
String artifactId = root.getChild("artifactId").getValue();
String goalPrefix = root.getChild("goalPrefix").getValue();
String name = root.getChild("name").getValue();
String groupId = mayGetChild(root, "groupId");
String artifactId = mayGetChild(root, "artifactId");
String goalPrefix = mayGetChild(root, "goalPrefix");
String name = mayGetChild(root, "name");
// sanity check: plugin descriptor extracted from artifact must have same GA
if (Objects.equals(artifact.getGroupId(), groupId)
&& Objects.equals(artifact.getArtifactId(), artifactId)) {
// here groupId and artifactId cannot be null
return new PluginInfo(groupId, artifactId, goalPrefix, name);
} else {
throw new InvalidArtifactPluginMetadataException(
Expand All @@ -148,8 +149,6 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
}
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
// here we can have: IO. ZIP or Plexus Conf Ex: but we should not interfere with user intent
}
Expand All @@ -158,6 +157,14 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
return null;
}

private static String mayGetChild(XmlNode node, String child) {
XmlNode c = node.getChild(child);
if (c != null) {
return c.getValue();
}
return null;
}

public static final class InvalidArtifactPluginMetadataException extends IllegalArgumentException {
InvalidArtifactPluginMetadataException(String s) {
super(s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import java.util.LinkedHashMap;
import java.util.List;

import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.annotations.Nullable;
import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.Plugin;

Expand All @@ -33,12 +35,16 @@
*/
final class PluginsMetadata extends MavenMetadata {
static final class PluginInfo {
@Nonnull
final String groupId;

@Nonnull
private final String artifactId;

@Nullable
private final String goalPrefix;

@Nullable
private final String name;

PluginInfo(String groupId, String artifactId, String goalPrefix, String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,14 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
// - maven-plugin-api (for model)
// - Plexus Container (for model supporting classes and exceptions)
XmlNode root = XmlNodeBuilder.build(is, null);
String groupId = root.getChild("groupId").getValue();
String artifactId = root.getChild("artifactId").getValue();
String goalPrefix = root.getChild("goalPrefix").getValue();
String name = root.getChild("name").getValue();
String groupId = mayGetChild(root, "groupId");
String artifactId = mayGetChild(root, "artifactId");
String goalPrefix = mayGetChild(root, "goalPrefix");
String name = mayGetChild(root, "name");
// sanity check: plugin descriptor extracted from artifact must have same GA
if (Objects.equals(artifact.getGroupId(), groupId)
&& Objects.equals(artifact.getArtifactId(), artifactId)) {
// here groupId and artifactId cannot be null
return new PluginInfo(groupId, artifactId, goalPrefix, name);
} else {
throw new InvalidArtifactPluginMetadataException(
Expand All @@ -149,8 +150,6 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
}
}
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
// here we can have: IO. ZIP or Plexus Conf Ex: but we should not interfere with user intent
}
Expand All @@ -159,6 +158,14 @@ private PluginInfo extractPluginInfo(Artifact artifact) {
return null;
}

private static String mayGetChild(XmlNode node, String child) {
XmlNode c = node.getChild(child);
if (c != null) {
return c.getValue();
}
return null;
}

public static final class InvalidArtifactPluginMetadataException extends IllegalArgumentException {
InvalidArtifactPluginMetadataException(String s) {
super(s);
Expand Down
Loading