aboutsummaryrefslogtreecommitdiff
path: root/interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2016-02-24 23:53:35 +0100
committerGuillaume Martres <smarter@ubuntu.com>2016-02-28 20:08:59 +0100
commit7e7ee820df7647680d9aaf1ca991fe9718159097 (patch)
tree26095cec3a83fc12984e745e459dcb3d0996d045 /interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java
parent94b41d5c491878543288af1bedb4daf57226ca07 (diff)
downloaddotty-7e7ee820df7647680d9aaf1ca991fe9718159097.tar.gz
dotty-7e7ee820df7647680d9aaf1ca991fe9718159097.tar.bz2
dotty-7e7ee820df7647680d9aaf1ca991fe9718159097.zip
Add a `dotty-interfaces` package
We introduce a new entry point for the compiler in `dotty.tools.dotc.Driver`: ``` def process(args: Array[String], simple: interfaces.SimpleReporter, callback: interfaces.CompilerCallback): interfaces.ReporterResult ``` Except for `args` which is just an array, the argument types and return type of this method are Java interfaces defined in a new package called `dotty-interfaces` which has a stable ABI. This means that you can programmatically run a compiler with a custom reporter and callbacks without having to recompile it against every version of dotty: you only need to have `dotty-interfaces` present at compile-time and call the `process` method using Java reflection. See `test/test/InterfaceEntryPointTest.scala` for a concrete example. This design is based on discussions with the IntelliJ IDEA Scala plugin team. Thanks to Nikolay Tropin for the discussions and his PR proposal (see #1011).
Diffstat (limited to 'interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java')
-rw-r--r--interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java b/interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java
new file mode 100644
index 000000000..17d2f6bbd
--- /dev/null
+++ b/interfaces/src/main/java/dotty/tools/dotc/interfaces/CompilerCallback.java
@@ -0,0 +1,28 @@
+package dotty.tools.dotc.interfaces;
+
+/** Set of callbacks called in response to events during the compilation process.
+ *
+ * You should implement this interface if you want to react to one or more of
+ * these events.
+ *
+ * @see the method `process` of `dotty.tools.dotc.Driver` for more information.
+ */
+public interface CompilerCallback {
+ /** Called when a class has been generated.
+ *
+ * @param source The source file corresponding to this class.
+ * Example: ./src/library/scala/collection/Seq.scala
+ * @param generatedClass The generated classfile for this class.
+ * Example: ./scala/collection/Seq$.class
+ * @param className The name of this class.
+ * Example: scala.collection.Seq$
+ */
+ default void onClassGenerated(SourceFile source, AbstractFile generatedClass, String className) {};
+
+ /** Called when every class for this file has been generated.
+ *
+ * @param source The source file.
+ * Example: ./src/library/scala/collection/Seq.scala
+ */
+ default void onSourceCompiled(SourceFile source) {};
+}