github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/pkg/rule/rules_java/proto_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  	ProtoJavaLibraryRuleName   = "proto_java_library"
    14  	ProtoJavaLibraryRuleSuffix = "_java_library"
    15  )
    16  
    17  func init() {
    18  	protoc.Rules().MustRegisterRule("stackb:rules_proto:proto_java_library", &protoJavaLibrary{})
    19  }
    20  
    21  // protoJavaLibrary implements LanguageRule for the 'proto_java_library' rule from
    22  // @rules_proto.
    23  type protoJavaLibrary struct{}
    24  
    25  // Name implements part of the LanguageRule interface.
    26  func (s *protoJavaLibrary) Name() string {
    27  	return ProtoJavaLibraryRuleName
    28  }
    29  
    30  // KindInfo implements part of the LanguageRule interface.
    31  func (s *protoJavaLibrary) KindInfo() rule.KindInfo {
    32  	return javaLibraryKindInfo
    33  }
    34  
    35  // LoadInfo implements part of the LanguageRule interface.
    36  func (s *protoJavaLibrary) LoadInfo() rule.LoadInfo {
    37  	return rule.LoadInfo{
    38  		Name:    "@build_stack_rules_proto//rules/java:proto_java_library.bzl",
    39  		Symbols: []string{ProtoJavaLibraryRuleName},
    40  	}
    41  }
    42  
    43  // ProvideRule implements part of the LanguageRule interface.
    44  func (s *protoJavaLibrary) ProvideRule(cfg *protoc.LanguageRuleConfig, pc *protoc.ProtocConfiguration) protoc.RuleProvider {
    45  	outputs := pc.GetPluginOutputs("builtin:java")
    46  	if len(outputs) == 0 {
    47  		return nil
    48  	}
    49  	return &JavaLibrary{
    50  		KindName:       ProtoJavaLibraryRuleName,
    51  		RuleNameSuffix: ProtoJavaLibraryRuleSuffix,
    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  			protoc.ResolveDepsAttr("deps", false)(c, ix, r, imports, from)
    57  			r.SetAttr("exports", r.Attr("deps"))
    58  		},
    59  	}
    60  }