github.com/sercand/please@v13.4.0+incompatible/src/ide/intellij/library.go (about)

     1  package intellij
     2  
     3  import (
     4  	"encoding/xml"
     5  	"io"
     6  
     7  	"github.com/thought-machine/please/src/core"
     8  )
     9  
    10  type libraryComponent struct {
    11  	XMLName xml.Name `xml:"component"`
    12  	Name string `xml:"name,attr"`
    13  	Library Library `xml:"library"`
    14  }
    15  
    16  // Content is a simple wrapper for a URL.
    17  type Content struct {
    18  	XMLName    xml.Name `xml:"root"`
    19  	ContentURL string   `xml:"url,attr"`
    20  }
    21  
    22  // Library represents an IntelliJ project library, which usually consists of a jar containing classes, but can
    23  // also contain javadocs and sources.
    24  type Library struct {
    25  	XMLName      xml.Name  `xml:"library"`
    26  	Name         string    `xml:"name,attr"`
    27  	ClassPaths   []Content `xml:"CLASSES>root"`
    28  	JavadocPaths []Content `xml:"JAVADOC>root"`
    29  	SourcePaths  []Content `xml:"SOURCES>root"`
    30  }
    31  
    32  func newLibrary(graph *core.BuildGraph, target *core.BuildTarget) Library {
    33  	classes := []Content{}
    34  	javadocs := []Content{}
    35  	sources := []Content{}
    36  	for _, dep  := range target.Sources {
    37  		label := dep.Label()
    38  		if label != nil {
    39  			depTarget := graph.TargetOrDie(*label)
    40  
    41  			if depTarget.HasLabel("maven-sources") {
    42  				for _, o := range depTarget.Outputs() {
    43  					sources = append(sources, Content{
    44  						ContentURL: "jar://$PROJECT_DIR$/../../" + depTarget.OutDir() + "/" + o + "!/",
    45  					})
    46  				}
    47  			}
    48  			if depTarget.HasLabel("maven-classes") {
    49  				for _, o := range depTarget.Outputs() {
    50  					classes = append(classes, Content{
    51  						ContentURL: "jar://$PROJECT_DIR$/../../" + depTarget.OutDir() + "/" + o + "!/",
    52  					})
    53  				}
    54  
    55  			}
    56  			if depTarget.HasLabel("maven-javadocs") {
    57  				for _, o := range depTarget.Outputs() {
    58  					javadocs = append(javadocs, Content{
    59  						ContentURL: "jar://$PROJECT_DIR$/../../" + depTarget.OutDir() + "/" + o + "!/",
    60  					})
    61  				}
    62  
    63  			}
    64  		}
    65  	}
    66  
    67  	library := Library{
    68  		Name: libraryName(target),
    69  		SourcePaths: sources,
    70  		ClassPaths: classes,
    71  		JavadocPaths: javadocs,
    72  	}
    73  
    74  	return library
    75  }
    76  
    77  func (library *Library) toXML(writer io.Writer) {
    78  	table := libraryComponent{
    79  		Name: "libraryTable",
    80  		Library: *library,
    81  	}
    82  	contents, err := xml.MarshalIndent(table, "", "  ")
    83  	if err == nil {
    84  		writer.Write(contents)
    85  	}
    86  }