diff --git a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java index f0afc2999da..0415f0648ca 100644 --- a/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java +++ b/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java @@ -32,8 +32,10 @@ import java.io.File; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import static io.swagger.codegen.plugin.AdditionalParams.*; @@ -155,40 +157,36 @@ public void execute() throws MojoExecutionException { if (null != invokerPackage) { config.additionalProperties().put(INVOKER_PACKAGE_PARAM, invokerPackage); } - + + Set definedOptions = new HashSet(); + for (CliOption langCliOption : config.cliOptions()) { + definedOptions.add(langCliOption.getOpt()); + } + if (configOptions != null) { - for (CliOption langCliOption : config.cliOptions()) { - if (configOptions.containsKey(langCliOption.getOpt())) { - config.additionalProperties().put(langCliOption.getOpt(), - configOptions.get(langCliOption.getOpt())); - } - } if(configOptions.containsKey("import-mappings")) { - Map mappings = createMapFromKeyValuePairs(configOptions.get("import-mappings").toString()); + Map mappings = createMapFromKeyValuePairs(configOptions.remove("import-mappings").toString()); config.importMapping().putAll(mappings); } if(configOptions.containsKey("type-mappings")) { - Map mappings = createMapFromKeyValuePairs(configOptions.get("type-mappings").toString()); + Map mappings = createMapFromKeyValuePairs(configOptions.remove("type-mappings").toString()); config.typeMapping().putAll(mappings); } if(configOptions.containsKey("instantiation-types")) { - Map mappings = createMapFromKeyValuePairs(configOptions.get("instantiation-types").toString()); + Map mappings = createMapFromKeyValuePairs(configOptions.remove("instantiation-types").toString()); config.instantiationTypes().putAll(mappings); } + addAdditionalProperties(config, definedOptions, configOptions); } if (null != configurationFile) { Config genConfig = ConfigParser.read(configurationFile); if (null != genConfig) { - for (CliOption langCliOption : config.cliOptions()) { - if (genConfig.hasOption(langCliOption.getOpt())) { - config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt())); - } - } + addAdditionalProperties(config, definedOptions, genConfig.getOptions()); } else { - throw new RuntimeException("Unable to read configuration file"); + throw new RuntimeException("Unable to read configuration file"); } } @@ -207,8 +205,8 @@ public void execute() throws MojoExecutionException { new DefaultGenerator().opts(input).generate(); } catch (Exception e) { // Maven logs exceptions thrown by plugins only if invoked with -e - // I find it annoying to jump through hoops to get basic diagnostic information, - // so let's log it in any case: + // I find it annoying to jump through hoops to get basic diagnostic information, + // so let's log it in any case: getLog().error(e); throw new MojoExecutionException("Code generation failed. See above for the full exception."); } @@ -217,6 +215,15 @@ public void execute() throws MojoExecutionException { project.addCompileSourceRoot(output.toString()); } } + + private void addAdditionalProperties(CodegenConfig config, Set definedOptions, Map configOptions) { + for(Map.Entry configEntry : configOptions.entrySet()) { + config.additionalProperties().put(configEntry.getKey().toString(), configEntry.getValue()); + if(!definedOptions.contains(configEntry.getKey())) { + getLog().warn("Additional property: " + configEntry.getKey() + " is not defined for this language."); + } + } + } private static Map createMapFromKeyValuePairs(String commaSeparatedKVPairs) { final List> pairs = OptionUtils.parseCommaSeparatedTuples(commaSeparatedKVPairs);