/testability-explorer/src/main/java/com/google/test/metric/ConfigModule.java

http://testability-explorer.googlecode.com/ · Java · 72 lines · 54 code · 10 blank · 8 comment · 0 complexity · 9d6465f6e28d620c86186a3cca326834 MD5 · raw file

  1. // Copyright 2009 Google Inc. All Rights Reserved.
  2. package com.google.test.metric;
  3. import com.google.classpath.ClassPath;
  4. import com.google.classpath.ClassPathFactory;
  5. import com.google.inject.AbstractModule;
  6. import com.google.inject.BindingAnnotation;
  7. import com.google.inject.TypeLiteral;
  8. import com.google.inject.name.Names;
  9. import com.google.test.metric.ReportGeneratorProvider.ReportFormat;
  10. import com.google.test.metric.report.ReportOptions;
  11. import org.kohsuke.args4j.CmdLineException;
  12. import org.kohsuke.args4j.CmdLineParser;
  13. import java.io.PrintStream;
  14. import java.lang.annotation.Retention;
  15. import static java.lang.annotation.RetentionPolicy.RUNTIME;
  16. import java.util.List;
  17. /**
  18. * @author alexeagle@google.com (Alex Eagle)
  19. */
  20. public class ConfigModule extends AbstractModule {
  21. @Retention(RUNTIME) @BindingAnnotation public @interface Error {}
  22. @Retention(RUNTIME) @BindingAnnotation public @interface Output {}
  23. private final String[] args;
  24. private final PrintStream out;
  25. private final PrintStream err;
  26. public ConfigModule(String[] args, PrintStream out, PrintStream err) {
  27. this.args = args;
  28. this.out = out;
  29. this.err = err;
  30. }
  31. @Override
  32. protected void configure() {
  33. // For printing errors to the caller
  34. bind(PrintStream.class).annotatedWith(Output.class).toInstance(System.out);
  35. bind(PrintStream.class).annotatedWith(Error.class).toInstance(System.err);
  36. CommandLineConfig config = new CommandLineConfig(out, err);
  37. CmdLineParser parser = new CmdLineParser(config);
  38. // We actually do this work in configure, since we want to bind the parsed command line
  39. // options at this time
  40. try {
  41. parser.parseArgument(args);
  42. config.validate();
  43. bind(ClassPath.class).toInstance(new ClassPathFactory().createFromPath(config.cp));
  44. bind(ReportFormat.class).toInstance(config.format);
  45. } catch (CmdLineException e) {
  46. err.println(e.getMessage() + "\n");
  47. parser.setUsageWidth(120);
  48. parser.printUsage(err);
  49. err.println("Exiting...");
  50. }
  51. bind(CommandLineConfig.class).toInstance(config);
  52. bind(ReportOptions.class).toInstance(new ReportOptions(
  53. config.cyclomaticMultiplier, config.globalMultiplier, config.constructorMultiplier,
  54. config.maxExcellentCost, config.maxAcceptableCost, config.worstOffenderCount,
  55. config.maxMethodCount, config.maxLineCount, config.printDepth, config.minCost,
  56. config.srcFileLineUrl, config.srcFileUrl));
  57. bindConstant().annotatedWith(Names.named("printDepth")).to(config.printDepth);
  58. bind(new TypeLiteral<List<String>>() {}).toInstance(config.entryList);
  59. //TODO: install the appropriate language-specific module
  60. install(new JavaTestabilityModule(config));
  61. }
  62. }