diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2016-02-24 23:53:35 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2016-02-28 20:08:59 +0100 |
commit | 7e7ee820df7647680d9aaf1ca991fe9718159097 (patch) | |
tree | 26095cec3a83fc12984e745e459dcb3d0996d045 /src/dotty/tools/dotc/reporting/Diagnostic.scala | |
parent | 94b41d5c491878543288af1bedb4daf57226ca07 (diff) | |
download | dotty-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 'src/dotty/tools/dotc/reporting/Diagnostic.scala')
-rw-r--r-- | src/dotty/tools/dotc/reporting/Diagnostic.scala | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/dotty/tools/dotc/reporting/Diagnostic.scala b/src/dotty/tools/dotc/reporting/Diagnostic.scala index ea3ea4112..bcf55e993 100644 --- a/src/dotty/tools/dotc/reporting/Diagnostic.scala +++ b/src/dotty/tools/dotc/reporting/Diagnostic.scala @@ -4,22 +4,22 @@ package reporting import util.SourcePosition -object Diagnostic { - - // Error levels - val ERROR = 2 - val WARNING = 1 - val INFO = 0 +import java.util.Optional +object Diagnostic { val nonSensicalStartTag = "<nonsensical>" val nonSensicalEndTag = "</nonsensical>" } -class Diagnostic(msgFn: => String, val pos: SourcePosition, val level: Int) extends Exception { +class Diagnostic(msgFn: => String, val pos: SourcePosition, val level: Int) + extends Exception with interfaces.Diagnostic { import Diagnostic._ private var myMsg: String = null private var myIsNonSensical: Boolean = false + override def position: Optional[interfaces.SourcePosition] = + if (pos.exists && pos.source.exists) Optional.of(pos) else Optional.empty() + /** The message to report */ def message: String = { if (myMsg == null) { |