github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/pkg/rule/rules_java/grpc_java_library.go (about)

     1  package rules_java
     2  
     3  import (
     4  	"github.com/bazelbuild/bazel-gazelle/config"
     5  	"github.com/bazelbuild/bazel-gazelle/label"
     6  	"github.com/bazelbuild/bazel-gazelle/resolve"
     7  	"github.com/bazelbuild/bazel-gazelle/rule"
     8  
     9  	"github.com/stackb/rules_proto/pkg/protoc"
    10  )
    11  
    12  const (
    13  	grpcJavaLibraryRuleName   = "grpc_java_library"
    14  	grpcJavaLibraryRuleSuffix = "_grpc_java_library"
    15  )
    16  
    17  func init() {
    18  	protoc.Rules().MustRegisterRule("stackb:rules_proto:grpc_java_library", &grpcJavaLibrary{})
    19  }
    20  
    21  // grpcJavaLibrary implements LanguageRule
    22  type grpcJavaLibrary struct{}
    23  
    24  // Name implements part of the LanguageRule interface.
    25  func (s *grpcJavaLibrary) Name() string {
    26  	return grpcJavaLibraryRuleName
    27  }
    28  
    29  // KindInfo implements part of the LanguageRule interface.
    30  func (s *grpcJavaLibrary) KindInfo() rule.KindInfo {
    31  	return javaLibraryKindInfo
    32  }
    33  
    34  // LoadInfo implements part of the LanguageRule interface.
    35  func (s *grpcJavaLibrary) LoadInfo() rule.LoadInfo {
    36  	return rule.LoadInfo{
    37  		Name:    "@build_stack_rules_proto//rules/java:grpc_java_library.bzl",
    38  		Symbols: []string{grpcJavaLibraryRuleName},
    39  	}
    40  }
    41  
    42  // ProvideRule implements part of the LanguageRule interface.
    43  func (s *grpcJavaLibrary) ProvideRule(cfg *protoc.LanguageRuleConfig, pc *protoc.ProtocConfiguration) protoc.RuleProvider {
    44  	outputs := pc.GetPluginOutputs("grpc:grpc-java:protoc-gen-grpc-java")
    45  	if len(outputs) == 0 {
    46  		return nil
    47  	}
    48  
    49  	return &JavaLibrary{
    50  		KindName:       grpcJavaLibraryRuleName,
    51  		RuleNameSuffix: grpcJavaLibraryRuleSuffix,
    52  		Outputs:        outputs,
    53  		RuleConfig:     cfg,
    54  		Config:         pc,
    55  		Resolver: func(c *config.Config, ix *resolve.RuleIndex, r *rule.Rule, imports []string, from label.Label) {
    56  			deps := append(r.AttrStrings("deps"), ":"+pc.Library.BaseName()+ProtoJavaLibraryRuleSuffix)
    57  
    58  			if len(deps) > 0 {
    59  				r.SetAttr("deps", deps)
    60  				r.SetAttr("exports", deps)
    61  			}
    62  		},
    63  	}
    64  }