Add protocol support / deprecate interface support.
Update relnotes for 0.7, update URL to adjust for new doc location.
Change-Id: I8a67a1b43002ae55f2bf98897230e36e94cb79fb
diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index eb701fe..0e4b880 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -8,7 +8,7 @@
<category>Languages</category>
<description><![CDATA[
- <a href="https://fuchsia.googlesource.com/docs/+/master/development/languages/fidl/intro/README.md">FIDL</a> Plugin for IntelliJ.<br>
+ <a href="https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/languages/fidl/intro/README.md">FIDL</a> Plugin for IntelliJ.<br>
<h2> Features </h2>
<ul>
<li> Syntax and Semantic Highlighting </li>
@@ -20,6 +20,7 @@
<ul>
<li><b>0.7</b>
<ul>
+ <li>Add protocol support, deprecate interface support</li>
<li>Remove explicit ordinal support</li>
<li>Add doc comment support to interfaces</li>
</ul>
diff --git a/src/fuchsia/developer/plugin/fidl/BUILD b/src/fuchsia/developer/plugin/fidl/BUILD
index d324d46..e2e275b 100644
--- a/src/fuchsia/developer/plugin/fidl/BUILD
+++ b/src/fuchsia/developer/plugin/fidl/BUILD
@@ -45,8 +45,7 @@
"fuchsia/developer/plugin/fidl/psi/FidlIdentifierType.java",
"fuchsia/developer/plugin/fidl/psi/FidlIntegerType.java",
"fuchsia/developer/plugin/fidl/psi/FidlInterfaceDeclaration.java",
- "fuchsia/developer/plugin/fidl/psi/FidlInterfaceMethod.java",
- "fuchsia/developer/plugin/fidl/psi/FidlInterfaceParameters.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlInterfaceMember.java",
"fuchsia/developer/plugin/fidl/psi/FidlLibraryHeader.java",
"fuchsia/developer/plugin/fidl/psi/FidlLiteral.java",
"fuchsia/developer/plugin/fidl/psi/FidlOrdinal.java",
@@ -55,6 +54,11 @@
"fuchsia/developer/plugin/fidl/psi/FidlParameters.java",
"fuchsia/developer/plugin/fidl/psi/FidlPopulatedTableField.java",
"fuchsia/developer/plugin/fidl/psi/FidlPrimitiveType.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlProtocolCompose.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlProtocolDeclaration.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlProtocolEvent.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlProtocolMember.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlProtocolMethod.java",
"fuchsia/developer/plugin/fidl/psi/FidlRequestType.java",
"fuchsia/developer/plugin/fidl/psi/FidlReservedTableField.java",
"fuchsia/developer/plugin/fidl/psi/FidlStringType.java",
@@ -93,8 +97,7 @@
"fuchsia/developer/plugin/fidl/psi/impl/FidlIdentifierTypeImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlIntegerTypeImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlInterfaceDeclarationImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlInterfaceMethodImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlInterfaceParametersImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlInterfaceMemberImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlLibraryHeaderImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlLiteralImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlOrdinalImpl.java",
@@ -103,6 +106,11 @@
"fuchsia/developer/plugin/fidl/psi/impl/FidlParametersImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlPopulatedTableFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlPrimitiveTypeImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlProtocolComposeImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlProtocolDeclarationImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlProtocolEventImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlProtocolMemberImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlProtocolMethodImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlRequestTypeImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlReservedTableFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlStringTypeImpl.java",
diff --git a/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java b/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
index 92a0353..dfdb83e 100644
--- a/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
+++ b/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
@@ -30,6 +30,10 @@
Annotation annotation = holder.createInfoAnnotation(element, null);
annotation.setTextAttributes(IDENTIFIER_ATTRIBUTE);
}
+ if (element.getNode().getElementType() == Types.INTERFACE) {
+ holder.createWarningAnnotation(element,
+ "Interfaces are deprecated, and will be replaced with protocols in a future language revision");
+ }
if (element.getNode().getElementType() == Types.XUNION) {
holder.createWarningAnnotation(element,
"Xunions are transitional, and will be removed in a future language revision");
diff --git a/src/fuchsia/developer/plugin/fidl/Fidl.bnf b/src/fuchsia/developer/plugin/fidl/Fidl.bnf
index daf5496..9275d51 100644
--- a/src/fuchsia/developer/plugin/fidl/Fidl.bnf
+++ b/src/fuchsia/developer/plugin/fidl/Fidl.bnf
@@ -35,8 +35,14 @@
using ::= USING_T compound-identifier ( AS identifier-token )? SEMICOLON
-declaration ::= const-declaration | enum-declaration | interface-declaration |
- struct-declaration | union-declaration | xunion-declaration | table-declaration
+declaration ::= const-declaration |
+ enum-declaration |
+ interface-declaration |
+ protocol-declaration |
+ struct-declaration |
+ table-declaration |
+ union-declaration |
+ xunion-declaration
const-declaration ::= attribute-list? CONST type identifier-token EQUALS constant
@@ -47,15 +53,24 @@
enum-member-value ::= identifier-token | NUMERIC_LITERAL
+// TODO: Delete this once interfaces are disallowed
interface-declaration ::= attribute-list? INTERFACE identifier-token
- ( COLON super-interface-list )? OBRACE ( interface-method SEMICOLON )* CBRACE
+ ( COLON super-interface-list )? OBRACE ( interface-member SEMICOLON )* CBRACE
+
+interface-member ::= protocol-method | protocol-event
super-interface-list ::= compound-identifier COMMA super-interface-list | compound-identifier
-interface-method ::= attribute-list? interface-parameters ( ERROR type )?
+protocol-declaration ::= attribute-list? PROTOCOL identifier-token
+ OBRACE ( protocol-member SEMICOLON )* CBRACE
-interface-parameters ::= identifier-token parameter-list ( ARROW parameter-list )?
- | ARROW identifier-token parameter-list
+protocol-member ::= protocol-compose | protocol-method | protocol-event
+
+protocol-compose ::= COMPOSE compound-identifier
+
+protocol-method ::= attribute-list? identifier-token parameter-list ( ARROW parameter-list )? ( ERROR type )?
+
+protocol-event ::= attribute-list? ARROW identifier-token parameter-list
parameter-list ::= OPAREN parameters? CPAREN
@@ -128,4 +143,4 @@
REQUEST | RESERVED | RESOURCE | SOCKET | STRING | STRUCT | TABLE | THREAD |
TIMER | UNION | USING_T | VECTOR | VMAR | VMO | XUNION | BOOL | FLOAT32 |
FLOAT64 | INT8 | INT16 | INT32 | INT64 | UINT8 | UINT16 | UINT32 | UINT64 |
- TRUE | FALSE
\ No newline at end of file
+ TRUE | FALSE | PROTOCOL | COMPOSE
\ No newline at end of file
diff --git a/src/fuchsia/developer/plugin/fidl/FidlLexer.flex b/src/fuchsia/developer/plugin/fidl/FidlLexer.flex
index b5d4195..d73a3cb 100644
--- a/src/fuchsia/developer/plugin/fidl/FidlLexer.flex
+++ b/src/fuchsia/developer/plugin/fidl/FidlLexer.flex
@@ -34,6 +34,7 @@
ARRAY=array
AS=as
CHANNEL=channel
+COMPOSE=compose
CONST=const
ENUM=enum
ERROR=error
@@ -49,6 +50,7 @@
LOG=log
PORT=port
PROCESS=process
+PROTOCOL=protocol
REQUEST=request
RESERVED=reserved
RESOURCE=resource
@@ -117,6 +119,8 @@
{CONST} { return CONST; }
{ENUM} { return ENUM; }
{INTERFACE} { return INTERFACE; }
+ {PROTOCOL} { return PROTOCOL; }
+ {COMPOSE} { return COMPOSE; }
{STRUCT} { return STRUCT; }
{TABLE} { return TABLE; }
{UNION} { return UNION; }
diff --git a/src/fuchsia/developer/plugin/fidl/SyntaxHighlighter.java b/src/fuchsia/developer/plugin/fidl/SyntaxHighlighter.java
index 6688aa2..807bc12 100644
--- a/src/fuchsia/developer/plugin/fidl/SyntaxHighlighter.java
+++ b/src/fuchsia/developer/plugin/fidl/SyntaxHighlighter.java
@@ -81,6 +81,8 @@
Types.CONST,
Types.ENUM,
Types.INTERFACE,
+ Types.PROTOCOL,
+ Types.COMPOSE,
Types.STRUCT,
Types.TABLE,
Types.UNION,