aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@tipit.to>2009-10-16 20:10:05 +0200
committerReinier Zwitserloot <reinier@tipit.to>2009-10-16 20:10:05 +0200
commitea04b3ff14d5a6cf90a550eeb866aace02964b1d (patch)
treea30e794c45417e6e635e58d9a299c7ecbb13ff1c
parent5b0d52477d52f97967099dd6148d182210118f8d (diff)
downloadlombok-ea04b3ff14d5a6cf90a550eeb866aace02964b1d.tar.gz
lombok-ea04b3ff14d5a6cf90a550eeb866aace02964b1d.tar.bz2
lombok-ea04b3ff14d5a6cf90a550eeb866aace02964b1d.zip
The old 'disableCheckedExceptions' branch wasn't a particularly nice distribution/storage model of experimental features. For example, it was hopelessly out of date. Redesigned to a separate experimental directory, along with new build scripts, and rewrite it to the new lombok.patcher model.
Unfortunately it doesn't actually work, just yet. Seems to do nothing at all.
-rw-r--r--.classpath1
-rw-r--r--experimental/build.xml42
-rw-r--r--experimental/buildScripts/disableCheckedExceptions.ant.xml75
-rw-r--r--experimental/src/lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent.java93
-rw-r--r--website/disableCheckedExceptions.html60
5 files changed, 271 insertions, 0 deletions
diff --git a/.classpath b/.classpath
index 67e52bfd..47f725c1 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="experimental/src"/>
<classpathentry kind="src" path="src_eclipseagent"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="deps/lombok/org.eclipse.jdt.core_3.5.0.v_963.jar"/>
diff --git a/experimental/build.xml b/experimental/build.xml
new file mode 100644
index 00000000..59dab9e2
--- /dev/null
+++ b/experimental/build.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright © 2009 Reinier Zwitserloot and Roel Spilker.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+-->
+<project name="lombok-experimental" basedir=".." default="info">
+ <description>
+ This buildfile is part of projectlombok.org. It is the main entry point for experimental features.
+ </description>
+
+ <target name="info">
+ <echo>
+Does the build and packaging work on experimental features. Currently available:
+ disableCheckedExceptions
+ </echo>
+ </target>
+
+ <target name="disableCheckedExceptions" depends="buildDeps"
+ description="Creates the disableCheckedExceptions experimental jar.">
+ <ant antfile="experimental/buildScripts/disableCheckedExceptions.ant.xml" target="dist" />
+ </target>
+
+ <target name="buildDeps">
+ <ant antfile="buildScripts/deps.ant.xml" target="build" inheritAll="false" />
+ </target>
+</project>
diff --git a/experimental/buildScripts/disableCheckedExceptions.ant.xml b/experimental/buildScripts/disableCheckedExceptions.ant.xml
new file mode 100644
index 00000000..b8deae24
--- /dev/null
+++ b/experimental/buildScripts/disableCheckedExceptions.ant.xml
@@ -0,0 +1,75 @@
+<!--
+ Copyright © 2009 Reinier Zwitserloot and Roel Spilker.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+-->
+<project name="lombok-experimental-disableCheckedExceptions" basedir="../.." default="dist">
+ <description>
+ This buildfile is part of projectlombok.org. It controls building and packaging of the disableCheckedExceptions feature.
+ </description>
+
+ <path id="deps.path">
+ <fileset dir="deps/lombok">
+ <include name="**/*.jar" />
+ </fileset>
+ <fileset dir="experimental">
+ <include name="deps/**/*.jar" />
+ </fileset>
+ </path>
+
+ <path id="libs.path">
+ <fileset dir="lib/lombok">
+ <include name="**/*.jar" />
+ </fileset>
+ <fileset dir="experimental">
+ <include name="lib/**/*.jar" />
+ </fileset>
+ </path>
+
+ <target name="-unpackLibs">
+ <mkdir dir="build/experimental/disableCheckedExceptions" />
+ <unjar dest="build/experimental/disableCheckedExceptions">
+ <path refid="libs.path" />
+ </unjar>
+ </target>
+
+ <target name="compile" description="Compiles disableCheckedExceptions.">
+ <mkdir dir="build/experimental/disableCheckedExceptions" />
+ <javac debug="on" destdir="build/experimental/disableCheckedExceptions" target="1.6">
+ <src path="experimental/src" />
+ <include name="**/disableCheckedExceptions/**/*.java" />
+ <classpath refid="deps.path" />
+ <classpath refid="libs.path" />
+ </javac>
+ </target>
+
+ <target name="dist" description="Creates the disable checked exceptions jar" depends="compile, -unpackLibs">
+ <mkdir dir="build/experimental/disableCheckedExceptions/META-INF" />
+ <mkdir dir="build/experimental/disableCheckedExceptions/META-INF/services" />
+ <echo file="build/experimental/disableCheckedExceptions/META-INF/services/javax.annotation.processor">lombok.javac.disableCheckedExceptions.DynamicAgent</echo>
+ <jar destfile="dist/disableCheckedExceptions-alpha.jar">
+ <fileset dir="build/experimental/disableCheckedExceptions" />
+ <manifest>
+ <attribute name="Agent-Class" value="lombok.javac.disableCheckedExceptions.DynamicAgent" />
+ <attribute name="Can-Redefine-Classes" value="true" />
+ <attribute name="Can-Retransform-Classes" value="true" />
+ </manifest>
+ </jar>
+ </target>
+</project>
diff --git a/experimental/src/lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent.java b/experimental/src/lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent.java
new file mode 100644
index 00000000..deb4626f
--- /dev/null
+++ b/experimental/src/lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2009 Reinier Zwitserloot and Roel Spilker.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package lombok.javac.disableCheckedExceptions;
+
+import java.lang.instrument.Instrumentation;
+import java.util.Set;
+
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic.Kind;
+
+import lombok.patcher.Hook;
+import lombok.patcher.MethodTarget;
+import lombok.patcher.ScriptManager;
+import lombok.patcher.inject.LiveInjector;
+import lombok.patcher.scripts.ScriptBuilder;
+
+import com.sun.tools.javac.processing.JavacProcessingEnvironment;
+
+@SupportedAnnotationTypes("*")
+@SupportedSourceVersion(SourceVersion.RELEASE_6)
+public class DisableCheckedExceptionsAgent extends AbstractProcessor {
+ /** Inject an agent if we're on a sun-esque JVM. */
+ @Override public void init(ProcessingEnvironment processingEnv) {
+ super.init(processingEnv);
+ if (!(processingEnv instanceof JavacProcessingEnvironment)) {
+ processingEnv.getMessager().printMessage(Kind.WARNING, "You aren't using a compiler based around javac v1.6, so lombok will not work properly.");
+ this.processingEnv = null;
+ }
+
+ new LiveInjector().injectSelf();
+ }
+
+ /** Does nothing - we just wanted the init method so we can inject an agent. */
+ @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ return false;
+ }
+
+ public static void agentmain(String agentArgs, Instrumentation instrumentation) throws Exception {
+ registerPatchScripts(instrumentation, true);
+ }
+
+ public static void premain(String agentArgs, Instrumentation instrumentation) throws Exception {
+ registerPatchScripts(instrumentation, false);
+ }
+
+ private static void registerPatchScripts(Instrumentation instrumentation, boolean reloadExistingClasses) {
+ ScriptManager sm = new ScriptManager();
+ sm.registerTransformer(instrumentation);
+
+ patchExceptions(sm);
+
+ if (reloadExistingClasses) sm.reloadClasses(instrumentation);
+ }
+
+ private static void patchExceptions(ScriptManager sm) {
+ sm.addScript(ScriptBuilder.exitEarly()
+ .target(new MethodTarget("com.sun.tools.javac.comp.Check", "isUnchecked",
+ "boolean", "com.sun.tools.javac.code.Symbol$ClassSymbol"))
+ .transplant()
+ .decisionMethod(new Hook("lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent", "retTrue", "()Z"))
+ .valueMethod(new Hook("lombok/javac/disableCheckedExceptions/DisableCheckedExceptionsAgent", "retTrue", "()Z"))
+ .build());
+ }
+
+ public static boolean retTrue() {
+ return true;
+ }
+}
diff --git a/website/disableCheckedExceptions.html b/website/disableCheckedExceptions.html
new file mode 100644
index 00000000..744859d8
--- /dev/null
+++ b/website/disableCheckedExceptions.html
@@ -0,0 +1,60 @@
+<!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="shortcut icon" href="favicon.ico" type="image/x-icon" />
+ <meta name="description" content="Spice up your java" />
+ <title>Project Lombok side projects - Disable checked Exceptions</title>
+ <style type="text/css">
+ code {
+ font-size: 12px;
+ font-family: monospaced;
+ }
+
+ .meat {
+ margin: 16px auto 0 auto;
+ width: 800px;
+ }
+
+ .backLink {
+ padding-top: 100px;
+ width: 100%;
+ text-align: right;
+ }
+ </style>
+</head><body>
+ <div class="meat">
+ <h1>Tired of checked exceptions?</h1>
+ <p>
+ This lombok spinoff project consists of a hack that only works in javac - not eclipse or any other IDE.<br />
+ It will completely disable the notion of checked exceptions. You may throw any exception anywhere, and you may
+ also catch any exception anywhere. In standard javac, you may not catch a checked exception that is not declared
+ as thrown by at least 1 statement in your try block, unless it is <code>Exception</code> or <code>Throwable</code>.<br />
+ This restriction is lifted as well.
+ </p>
+ <h3>Usage</h3>
+ <p>
+ Just make sure <code>disableCheckedExceptions-alpha.jar</code> is on the classpath as you compile. For example:<br />
+ <code>javac -cp disableCheckedExceptions-alpha.jar MySource.java</code>
+ </p>
+ <p>
+ Ready to try it out? download it here: <a href="downloads/disableCheckedExceptions-alpha.jar">disableCheckedExceptions-alpha.jar</a>
+ </p>
+ <p>
+ Want to know how its done? Grab the <em>disableCheckedExceptions</em> branch of project lombok. You can browse and download the branch <a href="http://github.com/rzwitserloot/lombok/tree/disableCheckedExceptions">here on github</a>.
+ </p>
+ <div class="backLink">
+ <a href="index.html">back to the project homepage</a>
+ </div>
+ </div>
+ <script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-9884254-1");
+ pageTracker._trackPageview();
+ } catch(err) {}
+ </script>
+</body></html>