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 }