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 <laszlo.kisha...@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-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists