From edebbb5aa03726664c3e82e9d8a0edb84acc70d6 Mon Sep 17 00:00:00 2001 From: hanna Date: Wed, 12 Jan 2011 22:18:24 +0000 Subject: [PATCH] Fixed long-standing bug reported by Mauricio where @Arguments assigned to primitive types were properly validated and throw the proper MissingArgumentValue UserException. Before this fix, the error reported was the infamous DePristo BSOD (Could not create module String because an exception of type NullPointerException occurred caused by exception null). Thanks Mauricio! git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4980 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/commandline/ArgumentTypeDescriptor.java | 3 +++ .../sting/commandline/ParsingEngineUnitTest.java | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java b/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java index 7847f4575..f17428570 100644 --- a/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java +++ b/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java @@ -299,6 +299,7 @@ class SimpleArgumentTypeDescriptor extends ArgumentTypeDescriptor { public Object parse(ParsingEngine parsingEngine, ArgumentSource source, Class type, ArgumentMatches matches) { if (source.isFlag()) return true; + ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source); String value = getArgumentValue( defaultDefinition, matches ); Object result; @@ -308,6 +309,8 @@ class SimpleArgumentTypeDescriptor extends ArgumentTypeDescriptor { try { if (type.isPrimitive()) { Method valueOf = primitiveToWrapperMap.get(type).getMethod("valueOf",String.class); + if(value == null) + throw new MissingArgumentValueException(createDefaultArgumentDefinition(source)); result = valueOf.invoke(null,value.trim()); } else if (type.isEnum()) { Object[] vals = type.getEnumConstants(); diff --git a/java/test/org/broadinstitute/sting/commandline/ParsingEngineUnitTest.java b/java/test/org/broadinstitute/sting/commandline/ParsingEngineUnitTest.java index 74d881fe9..54e3b35bc 100755 --- a/java/test/org/broadinstitute/sting/commandline/ParsingEngineUnitTest.java +++ b/java/test/org/broadinstitute/sting/commandline/ParsingEngineUnitTest.java @@ -125,6 +125,20 @@ public class ParsingEngineUnitTest extends BaseTest { Assert.assertEquals(argProvider.foo, 5, "Argument is not correctly initialized"); } + @Test(expectedExceptions=MissingArgumentValueException.class) + public void primitiveArgumentNoValueTest() { + final String[] commandLine = new String[] {"--foo"}; + + parsingEngine.addArgumentSource( PrimitiveArgProvider.class ); + parsingEngine.parse( commandLine ); + parsingEngine.validate(); + + PrimitiveArgProvider argProvider = new PrimitiveArgProvider(); + parsingEngine.loadArgumentsIntoObject( argProvider ); + + Assert.assertEquals(argProvider.foo, 5, "Argument is not correctly initialized"); + } + private class PrimitiveArgProvider { @Argument(doc="simple integer") int foo;