fix qtmoc imports issue

This commit is contained in:
therecipe 2017-06-15 21:30:20 +02:00
parent d7ec88ee92
commit a9ca264ad8
2 changed files with 38 additions and 16 deletions

View file

@ -267,16 +267,30 @@ import "C"
)
}
inputString := string(input)
if mode == MOC {
for _, lib := range parser.GetLibs() {
mlow := strings.ToLower(lib)
for _, pre := range []string{" ", "\t", "\r", "\n", "!", "*", "(", ")"} {
for _, past := range []string{"NewQ", "PointerFromQ", "Q"} {
inputString = strings.Replace(inputString, fmt.Sprintf("%v%v.%v", pre, mlow, past), fmt.Sprintf("%vstd_%v.%v", pre, mlow, past), -1)
}
}
}
}
fmt.Fprint(bb, "import (\n")
for _, m := range append(parser.GetLibs(), "qt", "strings", "unsafe", "log", "runtime", "fmt", "errors") {
mlow := strings.ToLower(m)
if strings.Contains(string(input), fmt.Sprintf(" %v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("\t%v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("\r%v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("\n%v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("!%v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("*%v.", mlow)) ||
strings.Contains(string(input), fmt.Sprintf("(%v.", mlow)) {
if strings.Contains(inputString, fmt.Sprintf(" %v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("\t%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("\r%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("\n%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("!%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("*%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("(%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf(")%v.", mlow)) ||
strings.Contains(inputString, fmt.Sprintf("std_%v.", mlow)) {
switch mlow {
case "strings", "unsafe", "log", "runtime", "fmt", "errors":
fmt.Fprintf(bb, "\"%v\"\n", mlow)
@ -285,7 +299,11 @@ import "C"
fmt.Fprintln(bb, "\"github.com/therecipe/qt\"")
default:
fmt.Fprintf(bb, "\"github.com/therecipe/qt/%v\"\n", mlow)
if mode == MOC {
fmt.Fprintf(bb, "std_%[1]v \"github.com/therecipe/qt/%[1]v\"\n", mlow)
} else {
fmt.Fprintf(bb, "\"github.com/therecipe/qt/%v\"\n", mlow)
}
if mode == MOC {
parser.LibDeps[parser.MOC] = append(parser.LibDeps[parser.MOC], m)
@ -298,9 +316,9 @@ import "C"
mlows := strings.Split(m, "/")
mlow := mlows[len(mlows)-1]
switch {
case strings.Contains(string(input), fmt.Sprintf("custom_%v.", mlow)):
case strings.Contains(inputString, fmt.Sprintf("custom_%v.", mlow)):
fmt.Fprintf(bb, "custom_%v \"%v\"\n", mlow, m)
case strings.Contains(string(input), fmt.Sprintf("%v.", custom)):
case strings.Contains(inputString, fmt.Sprintf("%v.", custom)):
fmt.Fprintf(bb, "%v \"%v\"\n", custom, m)
}
}
@ -312,7 +330,7 @@ import "C"
fmt.Fprintln(bb, ")")
bb.Write(input)
bb.WriteString(inputString)
var out, err = format.Source(renameSubClasses(bb.Bytes(), "_"))
if err != nil {

View file

@ -218,12 +218,16 @@ func Moc(path, target, tags string, fast bool) {
if err := utils.SaveBytes(filepath.Join(path, "moc.h"), templater.HTemplate(parser.MOC, templater.MOC, tags)); err != nil {
return
}
fixed, err := imports.Process(filepath.Join(path, "moc.go"), templater.GoTemplate(parser.MOC, false, templater.MOC, pkg, target, tags), nil)
if err != nil {
utils.Log.WithError(err).Fatal("failed to fix go imports")
return
fix := templater.GoTemplate(parser.MOC, false, templater.MOC, pkg, target, tags)
var err error
for i := 0; i < 5; i++ {
fix, err = imports.Process(filepath.Join(path, "moc.go"), fix, nil)
if err != nil {
utils.Log.WithError(err).Fatal("failed to fix go imports")
return
}
}
if err := utils.SaveBytes(filepath.Join(path, "moc.go"), fixed); err != nil {
if err := utils.SaveBytes(filepath.Join(path, "moc.go"), fix); err != nil {
return
}
templater.CgoTemplate(parser.MOC, path, target, templater.MOC, pkg, tags)