code: public static Result generate(@Nonnull final String code, @Nonnull final ImmutableSettings settings) {
  		Check.notNull(code, "code");
  		final ImmutableSettings.Builder settingsBuilder = new ImmutableSettings.Builder(Check.notNull(settings, "settings"));
  
  		final InterfaceAnalysis analysis = InterfaceAnalyzer.analyze(code);
  		final Clazz clazz = scaffoldClazz(analysis, settings);
  
  		// immutable settings
  		settingsBuilder.fields(clazz.getFields());
  		settingsBuilder.immutableName(clazz.getName());
  		settingsBuilder.imports(clazz.getImports());
  		final Interface definition = new Interface(new Type(clazz.getPackage(), analysis.getInterfaceName(), GenericDeclaration.UNDEFINED));
  		settingsBuilder.mainInterface(definition);
  		settingsBuilder.interfaces(clazz.getInterfaces());
  		settingsBuilder.packageDeclaration(clazz.getPackage());
  
  		final String implementationCode = SourceCodeFormatter.format(ImmutableObjectRenderer.toString(clazz, settingsBuilder.build()));
  		final String testCode = SourceCodeFormatter.format(ImmutableObjectTestRenderer.toString(clazz, settingsBuilder.build()));
  		return new Result(implementationCode, testCode);
  	}
docs: The specified interface must not contain methods, that changes the state of this object itself.
  
  @param code
  source code of an interface which describes how to generate the <i>immutable</i>
  @param settings
  settings to generate code
  @return generated source code as string in a result wrapper