Add union ordinals and remove xunions
Change-Id: Ied56ff9511c5d136602e37168141cf43f3a21017
diff --git a/FIDL-Plugin.iml b/FIDL-Plugin.iml
index c0dfef1..31ad032 100644
--- a/FIDL-Plugin.iml
+++ b/FIDL-Plugin.iml
@@ -24,5 +24,32 @@
<SOURCES />
</library>
</orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///opt/intellij-ce-2019.2/lib/platform-api.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///opt/intellij-ce-2019.2/lib/platform-util-ui.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar:///opt/intellij-ce-2019.2/lib/spellchecker.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
</component>
</module>
\ No newline at end of file
diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index 27c4010..0964eb1 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -20,6 +20,7 @@
<ul>
<li><b>0.14</b>
<ul>
+ <li>Support union ordinals and remove xunion.</li>
<li>Support service declarations.</li>
</ul>
</li>
diff --git a/src/fuchsia/developer/plugin/fidl/BUILD b/src/fuchsia/developer/plugin/fidl/BUILD
index c34217c..5a26970 100644
--- a/src/fuchsia/developer/plugin/fidl/BUILD
+++ b/src/fuchsia/developer/plugin/fidl/BUILD
@@ -47,8 +47,11 @@
"fuchsia/developer/plugin/fidl/psi/FidlIntegralLiteral.java",
"fuchsia/developer/plugin/fidl/psi/FidlLibraryHeader.java",
"fuchsia/developer/plugin/fidl/psi/FidlLiteral.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlMemberField.java",
"fuchsia/developer/plugin/fidl/psi/FidlNumericLiteral.java",
"fuchsia/developer/plugin/fidl/psi/FidlOrdinal.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlOrdinalMemberFieldBody.java",
+ "fuchsia/developer/plugin/fidl/psi/FidlOrdinalMemberField.java",
"fuchsia/developer/plugin/fidl/psi/FidlParameter.java",
"fuchsia/developer/plugin/fidl/psi/FidlParameterList.java",
"fuchsia/developer/plugin/fidl/psi/FidlParameters.java",
@@ -60,20 +63,14 @@
"fuchsia/developer/plugin/fidl/psi/FidlServiceDeclaration.java",
"fuchsia/developer/plugin/fidl/psi/FidlServiceMember.java",
"fuchsia/developer/plugin/fidl/psi/FidlStructDeclaration.java",
- "fuchsia/developer/plugin/fidl/psi/FidlStructField.java",
"fuchsia/developer/plugin/fidl/psi/FidlTableDeclaration.java",
- "fuchsia/developer/plugin/fidl/psi/FidlTableFieldDecl.java",
- "fuchsia/developer/plugin/fidl/psi/FidlTableField.java",
- "fuchsia/developer/plugin/fidl/psi/FidlTableFieldOrdinal.java",
"fuchsia/developer/plugin/fidl/psi/FidlTypeAliasDeclaration.java",
"fuchsia/developer/plugin/fidl/psi/FidlTypeConstraint.java",
"fuchsia/developer/plugin/fidl/psi/FidlTypeConstructor.java",
"fuchsia/developer/plugin/fidl/psi/FidlUnionDeclaration.java",
- "fuchsia/developer/plugin/fidl/psi/FidlUnionField.java",
"fuchsia/developer/plugin/fidl/psi/FidlUsing.java",
"fuchsia/developer/plugin/fidl/psi/FidlUsingList.java",
"fuchsia/developer/plugin/fidl/psi/FidlVisitor.java",
- "fuchsia/developer/plugin/fidl/psi/FidlXunionDeclaration.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlAttributeImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlAttributeListImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlAttributesImpl.java",
@@ -94,8 +91,11 @@
"fuchsia/developer/plugin/fidl/psi/impl/FidlIntegralLiteralImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlLibraryHeaderImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlLiteralImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlMemberFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlNumericLiteralImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlOrdinalImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlOrdinalMemberFieldBodyImpl.java",
+ "fuchsia/developer/plugin/fidl/psi/impl/FidlOrdinalMemberFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlParameterImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlParameterListImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlParametersImpl.java",
@@ -107,19 +107,13 @@
"fuchsia/developer/plugin/fidl/psi/impl/FidlServiceDeclarationImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlServiceMemberImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlStructDeclarationImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlStructFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlTableDeclarationImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlTableFieldDeclImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlTableFieldImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlTableFieldOrdinalImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlTypeAliasDeclarationImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlTypeConstraintImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlTypeConstructorImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlUnionDeclarationImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlUnionFieldImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlUsingImpl.java",
"fuchsia/developer/plugin/fidl/psi/impl/FidlUsingListImpl.java",
- "fuchsia/developer/plugin/fidl/psi/impl/FidlXunionDeclarationImpl.java",
"fuchsia/developer/plugin/fidl/psi/Types.java",
]
@@ -164,4 +158,3 @@
srcs = ["icons/fuchsia-logo-16x16.png"],
visibility = ["//visibility:public"],
)
-
diff --git a/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java b/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
index 0bdb241..091ef85 100644
--- a/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
+++ b/src/fuchsia/developer/plugin/fidl/ContextAwareHighlighter.java
@@ -323,9 +323,9 @@
// Attributes cannot be placed on a reserved member.
if (thisType == Types.RESERVED) {
- // Parent is TABLE_FIELD_DECL, Grandparent is TABLE_FIELD
+ // Parent is TABLE_FIELD_DECL, Grandparent is ORDINAL_MEMBER_FIELD
ASTNode grandParent = element.getParent().getParent().getNode();
- if (grandParent.getElementType() == Types.TABLE_FIELD) {
+ if (grandParent.getElementType() == Types.ORDINAL_MEMBER_FIELD) {
ASTNode maybeAttributeList = grandParent.findChildByType(Types.ATTRIBUTE_LIST);
if (maybeAttributeList != null) {
holder.createErrorAnnotation(
diff --git a/src/fuchsia/developer/plugin/fidl/Fidl.bnf b/src/fuchsia/developer/plugin/fidl/Fidl.bnf
index 3040f92..6abd49f 100644
--- a/src/fuchsia/developer/plugin/fidl/Fidl.bnf
+++ b/src/fuchsia/developer/plugin/fidl/Fidl.bnf
@@ -18,9 +18,9 @@
// The FidlNamedElements identify the elements we want to appear in the structure view.
implements(".*-declaration")="fuchsia.developer.plugin.fidl.psi.FidlNamedElement"
- implements("protocol-method|protocol-event|struct-field|union-field|bits-or-enum-member")="fuchsia.developer.plugin.fidl.psi.FidlNamedElement"
+ implements("protocol-method|protocol-event|member-field|bits-or-enum-member")="fuchsia.developer.plugin.fidl.psi.FidlNamedElement"
extends(".*-declaration")="fuchsia.developer.plugin.fidl.psi.FidlNamedElementImpl"
- extends("protocol-method|protocol-event|struct-field|union-field|bits-or-enum-member")="fuchsia.developer.plugin.fidl.psi.FidlNamedElementImpl"
+ extends("protocol-method|protocol-event|member-field|bits-or-enum-member")="fuchsia.developer.plugin.fidl.psi.FidlNamedElementImpl"
tokens = [
line_comment="regexp://.*"
@@ -47,7 +47,6 @@
table-declaration |
type-alias-declaration |
union-declaration |
- xunion-declaration |
service-declaration
const-declaration ::= attribute-list? CONST type-constructor identifier-token EQUALS constant
@@ -79,25 +78,17 @@
protocol-compose ::= COMPOSE compound-identifier
-struct-declaration ::= attribute-list? STRUCT identifier-token OBRACE ( struct-field SEMICOLON )* CBRACE
+struct-declaration ::= attribute-list? STRUCT identifier-token OBRACE ( member-field SEMICOLON )* CBRACE
-struct-field ::= attribute-list? type-constructor identifier-token ( EQUALS constant )?
+union-declaration ::= attribute-list? STRICT? UNION identifier-token OBRACE ( ordinal-member-field SEMICOLON )+ CBRACE
-union-declaration ::= attribute-list? UNION identifier-token OBRACE ( union-field SEMICOLON )+ CBRACE
+table-declaration ::= attribute-list? STRICT? TABLE identifier-token OBRACE ( ordinal-member-field SEMICOLON )* CBRACE
-xunion-declaration ::= attribute-list? STRICT? XUNION identifier-token OBRACE ( union-field SEMICOLON )+ CBRACE
+member-field ::= attribute-list? type-constructor identifier-token ( EQUALS constant )?
-union-field ::= attribute-list? type-constructor identifier-token
+ordinal-member-field ::= attribute-list? ordinal COLON ordinal-member-field-body
-table-declaration ::= attribute-list? STRICT? TABLE identifier-token OBRACE ( table-field SEMICOLON )* CBRACE
-
-table-field ::= attribute-list? table-field-ordinal table-field-decl
-
-table-field-ordinal ::= ordinal COLON
-
-// Diff from master grammar: decl instead of declaration, because declaration is reserved for named
-// things.
-table-field-decl ::= struct-field | RESERVED
+ordinal-member-field-body ::= member-field | RESERVED
type-alias-declaration ::= attribute-list? USING_T identifier-token EQUALS type-constructor
diff --git a/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java b/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
index 586e87b..7ec809e 100644
--- a/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
+++ b/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
@@ -14,16 +14,14 @@
import fuchsia.developer.plugin.fidl.psi.impl.FidlBitsOrEnumMemberImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlConstDeclarationImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlEnumDeclarationImpl;
+import fuchsia.developer.plugin.fidl.psi.impl.FidlMemberFieldImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolDeclarationImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolEventImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolMethodImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlStructDeclarationImpl;
-import fuchsia.developer.plugin.fidl.psi.impl.FidlStructFieldImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlTableDeclarationImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlTypeAliasDeclarationImpl;
import fuchsia.developer.plugin.fidl.psi.impl.FidlUnionDeclarationImpl;
-import fuchsia.developer.plugin.fidl.psi.impl.FidlUnionFieldImpl;
-import fuchsia.developer.plugin.fidl.psi.impl.FidlXunionDeclarationImpl;
import java.util.Map;
import javax.swing.Icon;
import org.jetbrains.annotations.NotNull;
@@ -46,12 +44,10 @@
.put(FidlTableDeclarationImpl.class, IconLoader.getIcon(path + "T.png"))
.put(FidlUnionDeclarationImpl.class, IconLoader.getIcon(path + "U.png"))
.put(FidlTypeAliasDeclarationImpl.class, IconLoader.getIcon(path + "U.png"))
- .put(FidlXunionDeclarationImpl.class, IconLoader.getIcon(path + "X.png"))
.put(FidlBitsOrEnumMemberImpl.class, IconLoader.getIcon(path + "M.png"))
.put(FidlProtocolMethodImpl.class, IconLoader.getIcon(path + "M.png"))
.put(FidlProtocolEventImpl.class, IconLoader.getIcon(path + "E.png"))
- .put(FidlStructFieldImpl.class, IconLoader.getIcon(path + "F.png"))
- .put(FidlUnionFieldImpl.class, IconLoader.getIcon(path + "F.png"))
+ .put(FidlMemberFieldImpl.class, IconLoader.getIcon(path + "F.png"))
.build();
}