You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2019/05/24 05:24:48 UTC

[netbeans] 02/12: [NETBEANS-2346] Fixed index out of bound exception in GAV parsing.

This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch release110
in repository https://gitbox.apache.org/repos/asf/netbeans.git

commit f6e014819a75ae9a8e35d01cf2eefc9cbaa50f7d
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Sat Apr 6 05:35:25 2019 -0700

    [NETBEANS-2346] Fixed index out of bound exception in GAV parsing.
---
 .../modules/gradle/api/GradleBaseProject.java      |  2 +-
 .../modules/gradle/api/GradleConfiguration.java    |  2 +-
 .../modules/gradle/api/GradleDependency.java       | 15 ++++-
 .../modules/gradle/nodes/ConfigurationsNode.java   |  4 +-
 .../actions/ActionMappingPropertyReaderTest.java   | 22 +++---
 .../modules/gradle/api/GradleDepandencyTest.java   | 78 ++++++++++++++++++++++
 6 files changed, 105 insertions(+), 18 deletions(-)

diff --git a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProject.java b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProject.java
index 8c16759..49a4f14 100644
--- a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProject.java
+++ b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProject.java
@@ -256,7 +256,7 @@ public final class GradleBaseProject implements Serializable, ModuleSearchSuppor
 
     @Override
     public Set<GradleDependency.ModuleDependency> findModules(String gav) {
-        String parts[] = gav.split(":");
+        String parts[] = GradleDependency.gavSplit(gav);
         if (parts.length != 3) {
             throw new IllegalArgumentException("Invalid gav filter: "  + gav);
         }
diff --git a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
index f269b5e..fe6b233 100644
--- a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
+++ b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleConfiguration.java
@@ -86,7 +86,7 @@ public final class GradleConfiguration implements Serializable, ModuleSearchSupp
 
     @Override
     public Set<GradleDependency.ModuleDependency> findModules(String gav) {
-        String parts[] = gav.split(":");
+        String parts[] = GradleDependency.gavSplit(gav);
         if (parts.length != 3) {
             throw new IllegalArgumentException("Invalid gav filter: "  + gav);
         }
diff --git a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleDependency.java b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleDependency.java
index 7d1decb..ab2b588 100644
--- a/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleDependency.java
+++ b/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleDependency.java
@@ -63,6 +63,19 @@ public abstract class GradleDependency implements Serializable, Comparable<Gradl
 
     public abstract Type getType();
 
+    static final String[] gavSplit(String gav) {
+        int firstColon = gav.indexOf(':');
+        int lastColon = gav.lastIndexOf(':');
+        if (firstColon == -1 || firstColon == lastColon) {
+            throw new IllegalArgumentException("Invalig GAV format: " + gav);
+        }
+        return new String[] {
+            gav.substring(0, firstColon),
+            gav.substring(firstColon + 1, lastColon),
+            gav.substring(lastColon + 1)
+        };
+    }
+
     /**
      * Dependency for modules usually downloaded from a remote repository.
      * @since 1.0
@@ -79,7 +92,7 @@ public abstract class GradleDependency implements Serializable, Comparable<Gradl
         ModuleDependency(String id, Set<File> artifacts) {
             super(id);
             this.artifacts = artifacts;
-            String[] parts = id.split(":");
+            String[] parts = gavSplit(id);
             group = parts[0];
             name = parts[1];
             version = parts[2];
diff --git a/groovy/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java b/groovy/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
index e57077e..4300195 100644
--- a/groovy/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
+++ b/groovy/gradle/src/org/netbeans/modules/gradle/nodes/ConfigurationsNode.java
@@ -290,7 +290,7 @@ public class ConfigurationsNode extends AbstractNode {
             GradleProject gp = project.getGradleProject();
             ArrayList<GradleDependency> ret = new ArrayList<>();
             GradleConfiguration conf = gp.getBaseProject().getConfigurations().get(configuration);
-            // We can get null here ins ome extreme cases, e.g. when the project is being deleted
+            // We can get null here in some extreme cases, e.g. when the project is being deleted
             if (conf != null) {
                 ret.addAll(conf.getUnresolved());
                 ret.addAll(conf.getProjects());
@@ -370,7 +370,7 @@ public class ConfigurationsNode extends AbstractNode {
 
         @Override
         public String getDisplayName() {
-            return module.getName() + ":" + module.getVersion();
+            return module.getVersion().isEmpty() ? module.getName() : module.getName() + ":" + module.getVersion();
         }
 
         @Override
diff --git a/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ActionMappingPropertyReaderTest.java b/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ActionMappingPropertyReaderTest.java
index 99a7dfd..d6ad668 100644
--- a/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ActionMappingPropertyReaderTest.java
+++ b/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/actions/ActionMappingPropertyReaderTest.java
@@ -22,10 +22,6 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import static org.junit.Assert.*;
 import org.netbeans.modules.gradle.api.execute.ActionMapping;
@@ -49,7 +45,7 @@ public class ActionMappingPropertyReaderTest {
     @Test
     public void testLoadMappings2() {
         Properties props = new Properties();
-        props.put("nb-action.run.args", "runArgs");
+        props.put("action.run.args", "runArgs");
         Set<ActionMapping> result = ActionMappingPropertyReader.loadMappings(props);
         assertEquals(result.size(), 1);
         ActionMapping mapping = result.iterator().next();
@@ -63,11 +59,11 @@ public class ActionMappingPropertyReaderTest {
     @Test
     public void testLoadMappings3() {
         Properties props = new Properties();
-        props.put("nb-action.custom-1", "Build with Arguments");
-        props.put("nb-action.custom-1.args", "runArgs ${test}");
-        props.put("nb-action.custom-1.reload.args", "runArgs");
-        props.put("nb-action.custom-1.reload.rule", "NEVER");
-        props.put("nb-action.custom-1.repeatable", "false");
+        props.put("action.custom-1", "Build with Arguments");
+        props.put("action.custom-1.args", "runArgs ${test}");
+        props.put("action.custom-1.reload.args", "runArgs");
+        props.put("action.custom-1.reload.rule", "NEVER");
+        props.put("action.custom-1.repeatable", "false");
         Set<ActionMapping> result = ActionMappingPropertyReader.loadMappings(props);
         assertEquals(result.size(), 1);
         ActionMapping mapping = result.iterator().next();
@@ -82,9 +78,9 @@ public class ActionMappingPropertyReaderTest {
     @Test
     public void testLoadMappings4() {
         Properties props = new Properties();
-        props.put("nb-action.build.args", "build");
-        props.put("nb-action.build.priority", "100");
-        props.put("nb-action.build.plugins", "groovy, war");
+        props.put("action.build.args", "build");
+        props.put("action.build.priority", "100");
+        props.put("action.build.plugins", "groovy, war");
         Set<ActionMapping> result = ActionMappingPropertyReader.loadMappings(props);
         assertEquals(result.size(), 1);
         DefaultActionMapping mapping = (DefaultActionMapping) result.iterator().next();
diff --git a/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleDepandencyTest.java b/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleDepandencyTest.java
new file mode 100644
index 0000000..43c1881
--- /dev/null
+++ b/groovy/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleDepandencyTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.gradle.api;
+
+import java.util.Collections;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+/**
+ *
+ * @author lkishalmi
+ */
+public class GradleDepandencyTest {
+
+    @Test
+    public void testGetGroup1() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency(":hamcrest-core-1.3:", Collections.emptySet());
+        String expResult = "";
+        String result = instance.getGroup();
+        assertEquals(expResult, result);
+    }
+
+    @Test
+    public void testGetGroup2() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency("org.hamcrest:hamcrest-core:1.3", Collections.emptySet());
+        String expResult = "org.hamcrest";
+        String result = instance.getGroup();
+        assertEquals(expResult, result);
+    }
+
+    @Test
+    public void testGetName1() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency(":hamcrest-core-1.3:", Collections.emptySet());
+        String expResult = "hamcrest-core-1.3";
+        String result = instance.getName();
+        assertEquals(expResult, result);
+    }
+
+    @Test
+    public void testGetName2() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency("org.hamcrest:hamcrest-core:1.3", Collections.emptySet());
+        String expResult = "hamcrest-core";
+        String result = instance.getName();
+        assertEquals(expResult, result);
+    }
+
+    @Test
+    public void testGetVersion1() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency(":hamcrest-core-1.3:", Collections.emptySet());
+        String expResult = "";
+        String result = instance.getVersion();
+        assertEquals(expResult, result);
+    }
+
+    @Test
+    public void testGetVersion2() {
+        GradleDependency.ModuleDependency instance = new GradleDependency.ModuleDependency("org.hamcrest:hamcrest-core:1.3", Collections.emptySet());
+        String expResult = "1.3";
+        String result = instance.getVersion();
+        assertEquals(expResult, result);
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists