# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

GEN_SRCS_LEX = [
    "fuchsia/developer/plugin/fidl/fidl/FidlLexer.java",
]

genrule(
    name = "fidl_lex_gen",
    srcs = ["FidlLexer.flex"],
    outs = GEN_SRCS_LEX,
    cmd = "$(location //third_party/jflex:jflex_bin) -d $(@D) $<",
    tools = ["//third_party/jflex:jflex_bin"],
)

java_binary(
    name = "grammar_kit_bin",
    main_class = "org.intellij.grammar.Main",
    runtime_deps = [
        "@grammar_kit",
        "@intellij_ce_2018_3//:sdk",
    ],
)

# Regenerate with something like:
# find . -name \*.java | sort | sed -e "s|./\(.*\)|    \"\\1\",|"
GEN_SRCS_PARSE = [
    "fuchsia/developer/plugin/fidl/parser/Parser.java",
    "fuchsia/developer/plugin/fidl/psi/FidlAttribute.java",
    "fuchsia/developer/plugin/fidl/psi/FidlAttributeList.java",
    "fuchsia/developer/plugin/fidl/psi/FidlAttributes.java",
    "fuchsia/developer/plugin/fidl/psi/FidlBitsDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlBitsOrEnumMember.java",
    "fuchsia/developer/plugin/fidl/psi/FidlBitsOrEnumMemberValue.java",
    "fuchsia/developer/plugin/fidl/psi/FidlBracketAttributeList.java",
    "fuchsia/developer/plugin/fidl/psi/FidlCompoundIdentifier.java",
    "fuchsia/developer/plugin/fidl/psi/FidlConstant.java",
    "fuchsia/developer/plugin/fidl/psi/FidlConstDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlDeclarationList.java",
    "fuchsia/developer/plugin/fidl/psi/FidlDocAttributeList.java",
    "fuchsia/developer/plugin/fidl/psi/FidlEnumDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlHandleSubtype.java",
    "fuchsia/developer/plugin/fidl/psi/FidlHandleType.java",
    "fuchsia/developer/plugin/fidl/psi/FidlIdentifierToken.java",
    "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",
    "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/FidlServiceDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlServiceMember.java",
    "fuchsia/developer/plugin/fidl/psi/FidlStructDeclaration.java",
    "fuchsia/developer/plugin/fidl/psi/FidlTableDeclaration.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/FidlUsing.java",
    "fuchsia/developer/plugin/fidl/psi/FidlUsingList.java",
    "fuchsia/developer/plugin/fidl/psi/FidlVisitor.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",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlBitsDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlBitsOrEnumMemberImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlBitsOrEnumMemberValueImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlBracketAttributeListImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlCompoundIdentifierImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlConstantImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlConstDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlDeclarationListImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlDocAttributeListImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlEnumDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlHandleSubtypeImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlHandleTypeImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlIdentifierTokenImpl.java",
    "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",
    "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/FidlServiceDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlServiceMemberImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlStructDeclarationImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlTableDeclarationImpl.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/FidlUsingImpl.java",
    "fuchsia/developer/plugin/fidl/psi/impl/FidlUsingListImpl.java",
    "fuchsia/developer/plugin/fidl/psi/Types.java",
]

genrule(
    name = "fidl_grammar_gen",
    srcs = ["Fidl.bnf"],
    outs = GEN_SRCS_PARSE,
    cmd = "$(location :grammar_kit_bin) $(@D) $<",
    tools = [":grammar_kit_bin"],
)

GEN_SRCS = GEN_SRCS_LEX + GEN_SRCS_PARSE

java_library(
    name = "fidl",
    srcs = GEN_SRCS + glob(["*.java"]) + glob(["psi/*.java"]),
    resources = [
        "icons/B.png",
        "icons/C.png",
        "icons/E.png",
        "icons/F.png",
        "icons/M.png",
        "icons/P.png",
        "icons/S.png",
        "icons/T.png",
        "icons/U.png",
        "icons/X.png",
        "icons/fuchsia-logo-16x16.png",
    ],
    visibility = ["//visibility:public"],
    deps = [
        "@google_bazel_common//third_party/java/guava",
        "@grammar_kit",
        "@intellij_ce_2018_3//:annotations",
        "@intellij_ce_2018_3//:platform-api",
        "@intellij_ce_2018_3//:util",
    ],
)

filegroup(
    name = "icons",
    srcs = ["icons/fuchsia-logo-16x16.png"],
    visibility = ["//visibility:public"],
)
