Skip to content

Commit 8197f44

Browse files
authored
Merge pull request #42 from jfeliu007/issue-41
Extended Interface not correctly visualized
2 parents 8e816e0 + 2d30e08 commit 8197f44

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

parser/class_parser.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,17 @@ func (p *ClassParser) parseFileDeclarations(node ast.Decl) {
175175
case *ast.InterfaceType:
176176
declarationType = "interface"
177177
for _, f := range c.Methods.List {
178-
p.getOrCreateStruct(typeName).AddMethod(f, p.allImports)
178+
switch t := f.Type.(type) {
179+
case *ast.FuncType:
180+
p.getOrCreateStruct(typeName).AddMethod(f, p.allImports)
181+
break
182+
case *ast.Ident:
183+
f, _ := getFieldType(t, p.allImports)
184+
st := p.getOrCreateStruct(typeName)
185+
f = replacePackageConstant(f, st.PackageName)
186+
st.AddToComposition(f)
187+
break
188+
}
179189
}
180190
default:
181191
declarationType = "alias"

parser/class_parser_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ func TestIgnoreDirectories(t *testing.T) {
587587

588588
parser, err = NewClassDiagram([]string{"../testingsupport"}, []string{"../testingsupport/subfolder2"}, true)
589589

590+
if err != nil {
591+
t.Errorf("TestIgnoreDirectories: expected no errors, got %s", err.Error())
592+
return
593+
}
590594
st = parser.getStruct("subfolder2.Subfolder2")
591595
if st != nil {
592596
t.Errorf("TestIgnoreDirectories: expected st to be nil, got %v", st)
@@ -642,3 +646,17 @@ func TestSetRenderingOptions(t *testing.T) {
642646
t.Errorf("TestRenderingOptions: expected renderingOptions to be %v got %v", newRenderingOptions, parser.renderingOptions)
643647
}
644648
}
649+
650+
func TestRenderCompositionFromInterfaces(t *testing.T) {
651+
652+
parser, err := NewClassDiagram([]string{"../testingsupport/subfolder"}, []string{}, false)
653+
654+
if err != nil {
655+
t.Errorf("TestIgnoreDirectories: expected no errors, got %s", err.Error())
656+
return
657+
}
658+
st := parser.getStruct("subfolder.test2")
659+
if _, ok := st.Composition["subfolder.TestInterfaceAsField"]; !ok {
660+
t.Errorf("TestRenderCompositionFromInterfaces: expected st to have a composition dependency to subfolder.TestInterfaceAsField")
661+
}
662+
}

testingsupport/subfolder/subfolder.go

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package subfolder
22

33
type test2 interface {
4+
TestInterfaceAsField
45
test()
56
}
7+
8+
type TestInterfaceAsField interface {
9+
}

0 commit comments

Comments
 (0)