Skip to content

Instantly share code, notes, and snippets.

@swankjesse
Created January 27, 2015 07:43
Show Gist options
  • Select an option

  • Save swankjesse/0776f9be158022ad2be9 to your computer and use it in GitHub Desktop.

Select an option

Save swankjesse/0776f9be158022ad2be9 to your computer and use it in GitHub Desktop.

Revisions

  1. swankjesse created this gist Jan 27, 2015.
    41 changes: 41 additions & 0 deletions Quine.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,41 @@
    package com.publicobject.quine;

    import com.squareup.javapoet.FieldSpec;
    import com.squareup.javapoet.JavaFile;
    import com.squareup.javapoet.MethodSpec;
    import com.squareup.javapoet.TypeSpec;
    import javax.lang.model.element.Modifier;

    class Quine {
    static String PACKAGE = "com.publicobject.quine";

    public static void main(String[] args) {
    String string = "$S";
    String body = "String string = $S;\n"
    + "String body = $S;\n"
    + "System.out.println($T.builder(PACKAGE, $T.classBuilder(\"Quine\")\n"
    + " .addField($T.builder(String.class, \"PACKAGE\", Modifier.STATIC)\n"
    + " .initializer($S, PACKAGE)\n"
    + " .build())\n"
    + " .addMethod($T.methodBuilder(\"main\")\n"
    + " .addModifiers($T.PUBLIC, $T.STATIC)\n"
    + " .addParameter(String[].class, \"args\")\n"
    + " .addCode(body, string, body, JavaFile.class, TypeSpec.class, FieldSpec.class, string, MethodSpec.class, Modifier.class, Modifier.class)\n"
    + " .build())\n"
    + " .build())\n"
    + " .skipJavaLangImports(true)\n"
    + " .build());\n";
    System.out.println(JavaFile.builder(PACKAGE, TypeSpec.classBuilder("Quine")
    .addField(FieldSpec.builder(String.class, "PACKAGE", Modifier.STATIC)
    .initializer("$S", PACKAGE)
    .build())
    .addMethod(MethodSpec.methodBuilder("main")
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .addParameter(String[].class, "args")
    .addCode(body, string, body, JavaFile.class, TypeSpec.class, FieldSpec.class, string, MethodSpec.class, Modifier.class, Modifier.class)
    .build())
    .build())
    .skipJavaLangImports(true)
    .build());
    }
    }