diff --git a/gopmod/classfile.go b/gopmod/classfile.go index e2b5c56..a23492b 100644 --- a/gopmod/classfile.go +++ b/gopmod/classfile.go @@ -46,15 +46,41 @@ var ( // ----------------------------------------------------------------------------- func (p *Module) IsClass(ext string) (isProj bool, ok bool) { - c, ok := p.projects[ext] - if ok { - isProj = (ext == c.Ext) + _, isProj = p.projects[ext] + if isProj { + ok = true + return } + _, ok = p.classes[ext] return } func (p *Module) LookupClass(ext string) (c *Project, ok bool) { c, ok = p.projects[ext] + if !ok { + c, ok = p.classes[ext] + } + return +} + +type Kind int + +const ( + KindNone Kind = iota << 1 + KindWork + KindProj + KindBoth = KindProj | KindWork +) + +func (p *Module) ClassKind(ext string) (kind Kind) { + _, isProj := p.projects[ext] + if isProj { + kind = KindProj + } + _, isClass := p.classes[ext] + if isClass { + kind |= KindWork + } return } @@ -111,7 +137,7 @@ func (p *Module) registerClassFrom(modVer module.Version, regcls func(c *Project func (p *Module) registerClass(c *Project, regcls func(c *Project)) { p.projects[c.Ext] = c for _, w := range c.Works { - p.projects[w.Ext] = c + p.classes[w.Ext] = c } if regcls != nil { regcls(c) diff --git a/gopmod/module.go b/gopmod/module.go index 8da2a03..10d7fe8 100644 --- a/gopmod/module.go +++ b/gopmod/module.go @@ -42,7 +42,8 @@ type depmodInfo struct { type Module struct { modload.Module - projects map[string]*Project // ext -> project + projects map[string]*Project // project ext -> project + classes map[string]*Project // class ext -> project depmods []depmodInfo } @@ -175,9 +176,10 @@ func getDepMods(mod modload.Module) []depmodInfo { // New creates a module from a modload.Module instance. func New(mod modload.Module) *Module { - projects := make(map[string]*Project) depmods := getDepMods(mod) - return &Module{projects: projects, depmods: depmods, Module: mod} + return &Module{projects: make(map[string]*Project), + classes: make(map[string]*Project), + depmods: depmods, Module: mod} } // Load loads a module from a local dir.