function! s:__class_singleton(class, options) let result = "package ". a:options.package .";\n\n" let result .= "public class ". a:options.name if has_key(a:options, 'extends') let result .= " extends ". a:options['extends'] endif if has_key(a:options, 'implements') let result .= " implements ". a:options['implements'] endif let result .= " {\n" for fieldKey in keys(get(a:options, 'fields', {})) let field = a:options['fields'][fieldKey] let result .= field['mod']. " ". field['type']. " ". field['name']. ";\n" endfor let name = a:options['name'] let result .= "\nprivate ". name. "() {\n\n}\n" let result .= "\npublic static ". name. " getInstance() {\n" let result .= "return ". name. "Holder.INSTANCE;\n" let result .= "}\n" let result .= "\nprivate static class ". name. "Holder {\n" let result .= "private static final ". name. " INSTANCE = new ". name. "();\n" let result .= "}\n" return result . "\n}" endfunction