aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2016-10-17 23:09:21 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2017-05-29 21:01:53 +0200
commit599b6aab677439ae1bdea2cdca3233d0b763fd3f (patch)
tree8766f124271d056c8e8c22fd1a8a1ada08284275
parent4e75ed8f8661033662b2d26c4a42fafa9d61b75f (diff)
downloadlombok-599b6aab677439ae1bdea2cdca3233d0b763fd3f.tar.gz
lombok-599b6aab677439ae1bdea2cdca3233d0b763fd3f.tar.bz2
lombok-599b6aab677439ae1bdea2cdca3233d0b763fd3f.zip
Updated just about all of the pages to the template-based redesign.
Added ajaxified loading for feature pages.
-rw-r--r--build.xml1
-rw-r--r--buildScripts/ivy.xml1
-rw-r--r--src/core/lombok/ConfigurationKeys.java11
-rw-r--r--src/website/log4j.properties6
-rw-r--r--src/website/lombok/website/WebsiteMaker.java189
-rw-r--r--website/features/experimental/Helper.html83
-rw-r--r--website/features/experimental/UtilityClass.html80
-rw-r--r--website2/resources/css/bootstrap.css6706
-rw-r--r--website2/resources/css/custom.css145
-rw-r--r--website2/resources/js/history.js1
-rw-r--r--website2/resources/js/main.js54
-rw-r--r--website2/resources/js/swfobject.js4
-rw-r--r--website2/templates/_scaffold.html108
-rw-r--r--website2/templates/changelog.html11
-rw-r--r--website2/templates/credits.html50
-rw-r--r--website2/templates/disable-checked-exceptions.html24
-rw-r--r--website2/templates/download.html102
-rw-r--r--website2/templates/features/EqualsAndHashCode.html52
-rw-r--r--website2/templates/features/GetterLazy.html31
-rw-r--r--website2/templates/features/GetterSetter.html70
-rw-r--r--website2/templates/features/NonNull.html43
-rw-r--r--website2/templates/features/SneakyThrows.html44
-rw-r--r--website2/templates/features/Synchronized.html34
-rw-r--r--website2/templates/features/ToString.html54
-rw-r--r--website2/templates/features/_features.html80
-rw-r--r--website2/templates/features/builder.html142
-rw-r--r--website2/templates/features/cleanup.html35
-rw-r--r--website2/templates/features/configuration.html93
-rw-r--r--website2/templates/features/constructor.html57
-rw-r--r--website2/templates/features/data.html41
-rw-r--r--website2/templates/features/delombok.html61
-rw-r--r--website2/templates/features/experimental/Accessors.html75
-rw-r--r--website2/templates/features/experimental/Delegate.html59
-rw-r--r--website2/templates/features/experimental/ExtensionMethod.html67
-rw-r--r--website2/templates/features/experimental/FieldDefaults.html48
-rw-r--r--website2/templates/features/experimental/Helper.html52
-rw-r--r--website2/templates/features/experimental/UtilityClass.html42
-rw-r--r--website2/templates/features/experimental/Wither.html66
-rw-r--r--website2/templates/features/experimental/index.html81
-rw-r--r--website2/templates/features/experimental/onX.html57
-rw-r--r--website2/templates/features/index.html87
-rw-r--r--website2/templates/features/log.html98
-rw-r--r--website2/templates/features/val.html31
-rw-r--r--website2/templates/features/value.html50
-rw-r--r--website2/templates/main.html47
-rw-r--r--website2/usageExamples/BuilderExample_post.jpage74
-rw-r--r--website2/usageExamples/BuilderExample_pre.jpage10
-rw-r--r--website2/usageExamples/CleanupExample_post.jpage26
-rw-r--r--website2/usageExamples/CleanupExample_pre.jpage15
-rw-r--r--website2/usageExamples/ConstructorExample_post.jpage28
-rw-r--r--website2/usageExamples/ConstructorExample_pre.jpage16
-rw-r--r--website2/usageExamples/DataExample_post.jpage119
-rw-r--r--website2/usageExamples/DataExample_pre.jpage18
-rw-r--r--website2/usageExamples/EqualsAndHashCodeExample_post.jpage72
-rw-r--r--website2/usageExamples/EqualsAndHashCodeExample_pre.jpage25
-rw-r--r--website2/usageExamples/GetterLazyExample_post.jpage26
-rw-r--r--website2/usageExamples/GetterLazyExample_pre.jpage13
-rw-r--r--website2/usageExamples/GetterSetterExample_post.jpage42
-rw-r--r--website2/usageExamples/GetterSetterExample_pre.jpage26
-rw-r--r--website2/usageExamples/LogExample_post.jpage23
-rw-r--r--website2/usageExamples/LogExample_pre.jpage26
-rw-r--r--website2/usageExamples/NonNullExample_post.jpage13
-rw-r--r--website2/usageExamples/NonNullExample_pre.jpage10
-rw-r--r--website2/usageExamples/Singular-snippetExample_post.jpage160
-rw-r--r--website2/usageExamples/Singular-snippetExample_pre.jpage14
-rw-r--r--website2/usageExamples/SneakyThrowsExample_post.jpage19
-rw-r--r--website2/usageExamples/SneakyThrowsExample_pre.jpage13
-rw-r--r--website2/usageExamples/SynchronizedExample_post.jpage23
-rw-r--r--website2/usageExamples/SynchronizedExample_pre.jpage20
-rw-r--r--website2/usageExamples/ToStringExample_post.jpage30
-rw-r--r--website2/usageExamples/ToStringExample_pre.jpage24
-rw-r--r--website2/usageExamples/ValueExample_post.jpage120
-rw-r--r--website2/usageExamples/ValueExample_pre.jpage19
-rw-r--r--website2/usageExamples/experimental/AccessorsExample_post.jpage20
-rw-r--r--website2/usageExamples/experimental/AccessorsExample_pre.jpage14
-rw-r--r--website2/usageExamples/experimental/DelegateExample_post.jpage97
-rw-r--r--website2/usageExamples/experimental/DelegateExample_pre.jpage37
-rw-r--r--website2/usageExamples/experimental/ExtensionMethodExample_post.jpage21
-rw-r--r--website2/usageExamples/experimental/ExtensionMethodExample_pre.jpage24
-rw-r--r--website2/usageExamples/experimental/FieldDefaultsExample_post.jpage12
-rw-r--r--website2/usageExamples/experimental/FieldDefaultsExample_pre.jpage18
-rw-r--r--website2/usageExamples/experimental/HelperExample_post.jpage14
-rw-r--r--website2/usageExamples/experimental/HelperExample_pre.jpage15
-rw-r--r--website2/usageExamples/experimental/UtilityClassExample_post.jpage11
-rw-r--r--website2/usageExamples/experimental/UtilityClassExample_pre.jpage10
-rw-r--r--website2/usageExamples/experimental/WitherExample_post.jpage21
-rw-r--r--website2/usageExamples/experimental/WitherExample_pre.jpage14
-rw-r--r--website2/usageExamples/experimental/onXExample_post.jpage22
-rw-r--r--website2/usageExamples/experimental/onXExample_pre.jpage15
-rw-r--r--website2/usageExamples/valExample_post.jpage21
-rw-r--r--website2/usageExamples/valExample_pre.jpage21
91 files changed, 10541 insertions, 163 deletions
diff --git a/build.xml b/build.xml
index 654c23ea..af444f27 100644
--- a/build.xml
+++ b/build.xml
@@ -345,6 +345,7 @@ lombok.launch.AnnotationProcessorHider$ClaimingProcessor</echo>
<srcdir dir="src/delombok" />
<srcdir dir="src/stubs" />
<srcdir dir="src/testAP" />
+ <srcdir dir="src/website" />
<srcdir dir="experimental/src" />
<srcdir dir="test/transform/src" />
<srcdir dir="test/core/src" />
diff --git a/buildScripts/ivy.xml b/buildScripts/ivy.xml
index 3a851fcd..caa56012 100644
--- a/buildScripts/ivy.xml
+++ b/buildScripts/ivy.xml
@@ -35,6 +35,7 @@
<dependency org="projectlombok.org" name="jsch-ant-fixed" rev="0.1.42" conf="buildBase->build" />
<dependency org="projectlombok.org" name="markdownj" rev="1.02b4" conf="buildBase->build" />
<dependency org="de.java2html" name="java2html" rev="5.0" conf="buildBase->default" />
+ <dependency org="org.freemarker" name="freemarker" rev="2.3.25-incubating" conf="buildBase->default" />
<dependency org="net.java.openjdk.custom" name="javac6" rev="1.6.0.18" conf="javac6->runtime; contrib->sources" />
<dependency org="net.java.openjdk.custom" name="javac7" rev="1.7.0" conf="javac7->runtime; contrib->sources" />
diff --git a/src/core/lombok/ConfigurationKeys.java b/src/core/lombok/ConfigurationKeys.java
index f0e070e2..dec86aa7 100644
--- a/src/core/lombok/ConfigurationKeys.java
+++ b/src/core/lombok/ConfigurationKeys.java
@@ -460,6 +460,17 @@ public class ConfigurationKeys {
*/
public static final ConfigurationKey<FlagUsageType> HELPER_FLAG_USAGE = new ConfigurationKey<FlagUsageType>("lombok.helper.flagUsage", "Emit a warning or error if @Helper is used.") {};
+ // ----- onX -----
+
+ /**
+ * lombok configuration: {@code lombok.onX.flagUsage} = {@code WARNING} | {@code ERROR}.
+ *
+ * If set, <em>any</em> usage of {@code onX} results in a warning / error.
+ * <br />
+ * Specifically, this flags usage of {@code @Getter(onMethod=...)}, {@code @Setter(onParam=...)}, {@code @Setter(onMethod=...)}, {@code @XArgsConstructor(onConstructor=...)}.
+ */
+ public static final ConfigurationKey<FlagUsageType> ON_X_FLAG_USAGE = new ConfigurationKey<FlagUsageType>("lombok.onX.flagUsage", "Emit a warning or error if onX is used.") {};
+
// ----- UtilityClass -----
/**
diff --git a/src/website/log4j.properties b/src/website/log4j.properties
new file mode 100644
index 00000000..9cafcc3b
--- /dev/null
+++ b/src/website/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
diff --git a/src/website/lombok/website/WebsiteMaker.java b/src/website/lombok/website/WebsiteMaker.java
new file mode 100644
index 00000000..299b4211
--- /dev/null
+++ b/src/website/lombok/website/WebsiteMaker.java
@@ -0,0 +1,189 @@
+package lombok.website;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import de.java2html.Java2Html;
+import freemarker.cache.FileTemplateLoader;
+import freemarker.cache.TemplateLoader;
+import freemarker.core.HTMLOutputFormat;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateExceptionHandler;
+
+public class WebsiteMaker {
+ private final File baseDir, outputDir;
+
+ public WebsiteMaker(File baseDir, File outputDir) {
+ this.baseDir = baseDir;
+ this.outputDir = outputDir;
+ }
+
+ public static void main(String[] args) throws Exception {
+ File in, out;
+ if (args.length == 0) {
+ in = new File(".");
+ if (new File(in, "build.xml").isFile() && new File(in, "website2").isDirectory()) in = new File(in, "website2");
+ } else {
+ in = new File(args[0]);
+ }
+
+ if (args.length < 2) {
+ if (new File("./build.xml").isFile() && new File("./website2").isDirectory() && new File("./build").isDirectory()) {
+ out = new File("./build/website2");
+ } else {
+ out = new File(in, "output");
+ }
+ } else {
+ out = new File(args[1]);
+ }
+ WebsiteMaker maker = new WebsiteMaker(in, out);
+
+ maker.buildWebsite();
+ }
+
+ public void buildWebsite() throws Exception {
+ Configuration freemarkerConfig = new Configuration(Configuration.VERSION_2_3_25);
+ freemarkerConfig.setEncoding(Locale.ENGLISH, "UTF-8");
+ freemarkerConfig.setOutputEncoding("UTF-8");
+ freemarkerConfig.setOutputFormat(HTMLOutputFormat.INSTANCE);
+ freemarkerConfig.setTemplateLoader(createLoader());
+ freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
+
+ deleteAll(outputDir, 0);
+ outputDir.mkdirs();
+ copyResources();
+ convertTemplates(freemarkerConfig);
+ }
+
+ private static void deleteAll(File outputDir, int depth) {
+ if (!outputDir.isDirectory()) return;
+ if (depth > 50) throw new IllegalArgumentException("50 levels is too deep: " + outputDir);
+
+ for (File f : outputDir.listFiles()) {
+ String n = f.getName();
+ if (n.equals(".") || n.equals("..")) continue;
+ if (f.isDirectory()) deleteAll(f, depth + 1);
+ f.delete();
+ }
+ }
+
+ private void copyResources() throws Exception {
+ File resourcesLoc = new File(baseDir, "resources");
+ byte[] b = new byte[65536];
+ copyResources_(resourcesLoc, outputDir, b, 0);
+ }
+
+ private void copyResources_(File from, File to, byte[] b, int depth) throws IOException {
+ if (depth > 50) throw new IllegalArgumentException("50 levels is too deep: " + from);
+ if (!to.exists()) to.mkdirs();
+ for (File f : from.listFiles()) {
+ if (f.isDirectory()) copyResources_(f, new File(to, f.getName()), b, depth + 1);
+ if (!f.isFile()) continue;
+
+ FileInputStream fIn = new FileInputStream(f);
+ try {
+ FileOutputStream fOut = new FileOutputStream(new File(to, f.getName()));
+ try {
+ while (true) {
+ int r = fIn.read(b);
+ if (r == -1) break;
+ fOut.write(b, 0, r);
+ }
+ } finally {
+ fOut.close();
+ }
+ } finally {
+ fIn.close();
+ }
+ }
+ }
+
+ private TemplateLoader createLoader() throws IOException {
+ return new FileTemplateLoader(new File(baseDir, "templates"));
+ }
+
+ private void convertTemplates(Configuration freemarker) throws Exception {
+ File basePagesLoc = new File(baseDir, "templates");
+ convertTemplates_(freemarker, "", basePagesLoc, outputDir, 0);
+ }
+
+ private void convertTemplates_(Configuration freemarker, String prefix, File from, File to, int depth) throws Exception {
+ if (depth > 50) throw new IllegalArgumentException("50 levels is too deep: " + from);
+
+ Map<String, Object> dataModel = createDataModel();
+
+ for (File f : from.listFiles()) {
+ if (f.isDirectory()) convertTemplates_(freemarker, prefix + f.getName() + "/", f, new File(to, f.getName()), depth + 1);
+ if (!f.isFile() || !f.getName().endsWith(".html") || f.getName().startsWith("_")) continue;
+ to.mkdirs();
+ Template template = freemarker.getTemplate(prefix + f.getName());
+ FileOutputStream fileOut = new FileOutputStream(new File(to, f.getName()));
+ try {
+ Writer wr = new BufferedWriter(new OutputStreamWriter(fileOut, "UTF-8"));
+ template.process(dataModel, wr);
+ wr.close();
+ } finally {
+ fileOut.close();
+ }
+ }
+ }
+
+ private Map<String, Object> createDataModel() {
+ Map<String, Object> data = new HashMap<String, Object>();
+ data.put("version", lombok.core.Version.getVersion());
+ data.put("fullVersion", lombok.core.Version.getFullVersion());
+ data.put("year", "" + new GregorianCalendar().get(Calendar.YEAR));
+ data.put("usages", new HtmlMaker(new File(baseDir, "usageExamples")));
+ return data;
+ }
+
+ public static class HtmlMaker {
+ private final File usagesDir;
+
+ HtmlMaker(File usagesDir) {
+ this.usagesDir = usagesDir;
+ }
+
+ public String pre(String name) throws IOException {
+ return convert(new File(usagesDir, name + "Example_pre.jpage"));
+ }
+
+ public String post(String name) throws IOException {
+ return convert(new File(usagesDir, name + "Example_post.jpage"));
+ }
+
+ public String convert(File file) throws IOException {
+ String rawJava = readFully(file);
+ return Java2Html.convertToHtml(rawJava);
+ }
+ }
+
+ public static String readFully(File file) throws IOException {
+ FileInputStream fis = new FileInputStream(file);
+ try {
+ InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
+ StringBuilder out = new StringBuilder();
+ char[] b = new char[65536];
+ while (true) {
+ int r = isr.read(b);
+ if (r == -1) break;
+ out.append(b, 0, r);
+ }
+ return out.toString();
+ } finally {
+ fis.close();
+ }
+ }
+}
diff --git a/website/features/experimental/Helper.html b/website/features/experimental/Helper.html
deleted file mode 100644
index da474fc2..00000000
--- a/website/features/experimental/Helper.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" type="text/css" href="../../logi/reset.css" />
- <link rel="stylesheet" type="text/css" href="../features.css" />
- <link rel="shortcut icon" href="../../favicon.ico" type="image/x-icon" />
- <meta name="description" content="Spice up your java" />
- <title>EXPERIMENTAL – @Helper</title>
-</head><body><div id="pepper">
- <div class="minimumHeight"></div>
- <div class="meat">
- <div class="header"><a href="../../index.html">Project Lombok</a></div>
- <h1>@Helper</h1>
- <div class="byline">With a little help from my friends... Helper methods for java.</div>
- <div class="since">
- <h3>Since</h3>
- <p>
- <code>@Helpe