From 997e367d4fe300df8d59f84edda64656f3fa77db Mon Sep 17 00:00:00 2001 From: Richard Park Date: Mon, 11 Nov 2019 23:22:27 +0900 Subject: [PATCH] bug fixed --- annotation/annotation.go | 135 ++++----------------------------------- annotation/definition.go | 9 +-- 2 files changed, 14 insertions(+), 130 deletions(-) diff --git a/annotation/annotation.go b/annotation/annotation.go index 298b6ec..bf8a774 100644 --- a/annotation/annotation.go +++ b/annotation/annotation.go @@ -1,6 +1,7 @@ package annotation import ( + "encoding/json" "fmt" "reflect" "strings" @@ -29,42 +30,6 @@ const ( type Annotation interface { } -// // @Inject(name? string) -// // @Resource(name? string) -// func ParseAnnotation(tag reflect.StructTag) (map[string]Annotation, error) { -// s := strings.Trim(tag.Get(AnnotationTag), " ") -// if "" == s { -// return nil, nil -// } - -// annotations := strings.Split(s, AnnotationSpliter) -// if nil == annotations || 0 == len(annotations) { -// return nil, nil -// } - -// rKVs := make(map[string]Annotation, 0) -// for _, a := range annotations { -// a = strings.Trim(a, " ") -// if "" == a { -// continue -// } -// aName, attributes, err := parseAnnotationItem(a) -// if nil != err { -// return nil, err -// } -// if "" == aName { -// continue -// } -// annotation, err := newAnnotation(aName, attributes) -// if nil != err { -// return nil, err -// } -// rKVs[aName] = annotation -// } - -// return rKVs, nil -// } - // @Inject(name? string) // @Resource(name? string) func ParseAnnotation(tag reflect.StructTag) (map[reflect.Type]Annotation, error) { @@ -94,8 +59,8 @@ func ParseAnnotation(tag reflect.StructTag) (map[reflect.Type]Annotation, error) return rKVs, nil } -func splitAnnotation(s string) (map[string]map[string]string, error) { - ss := make(map[string]map[string]string, 0) +func splitAnnotation(s string) (map[string]string, error) { + ss := make(map[string]string, 0) ts := s for { as := strings.Index(ts, AnnotationChar) @@ -109,13 +74,9 @@ func splitAnnotation(s string) (map[string]map[string]string, error) { aAttributes := ts[aas+1 : aae] if 0 < len(aAttributes) { - attributes, err := splitAnnotationAttribute(aAttributes) - if nil != err { - return nil, err - } - ss[aName] = attributes + ss[aName] = aAttributes } else { - ss[aName] = nil + ss[aName] = "" } if len(ts) <= (aae + 1) { @@ -161,7 +122,7 @@ func splitAnnotationAttribute(s string) (map[string]string, error) { return ss, nil } -func newAnnotation(name string, attributes map[string]string) (reflect.Type, Annotation, error) { +func newAnnotation(name string, attributes string) (reflect.Type, Annotation, error) { def, ok := annotationRegistry[name] if !ok { return nil, nil, fmt.Errorf("There is no annotation[%s]", name) @@ -170,84 +131,12 @@ func newAnnotation(name string, attributes map[string]string) (reflect.Type, Ann v := reflect.New(def.rt) i := v.Interface().(Annotation) - if nil != attributes { - setMetaAttributes(def, v.Elem(), attributes) + if "" != attributes { + _json := fmt.Sprintf("{%s}", attributes) + if err := json.Unmarshal([]byte(_json), i); nil != err { + return nil, nil, err + } + } return def.t, i, nil } - -// func parseAnnotationItem(a string) (name string, attributes map[string]string, err error) { -// s := strings.Trim(a, " ") -// if "" == s { -// return -// } - -// i := strings.Index(s, AnnotationChar) -// if -1 == i { -// err = fmt.Errorf("Syntax error: annotation must be started %s", AnnotationChar) -// return -// } - -// aStart := strings.Index(s, AnnotationStartChar) -// if -1 == aStart { -// // This is pure annotation ex)@Resource -// name = s -// return -// } - -// name = s[:aStart] - -// aEnd := strings.Index(s, AnnotationEndChar) -// if -1 == aEnd { -// // This is syntax error ex)@Resource( -// err = fmt.Errorf("Syntax error: annotation must be ended %s", AnnotationEndChar) -// return -// } - -// if 1 >= aEnd-aStart { -// return -// } - -// attr := s[aStart+1 : aEnd] -// attr = strings.Trim(attr, " ") - -// if "" == attr { -// return -// } - -// attrs, pErr := parseAttributeString(s[aStart+1 : aEnd]) -// if nil != pErr { -// err = pErr -// return -// } - -// attributes = attrs - -// return -// } - -// func parseAttributeString(s string) (map[string]string, error) { -// attr := strings.Trim(s, " ") -// if "" == attr { -// return nil, nil -// } - -// kvs := strings.Split(attr, AnnotationAttributeSpliter) -// if nil == kvs || 0 == len(kvs) { -// return nil, nil -// } - -// rKVs := make(map[string]string) -// for i := 0; i < len(kvs); i++ { -// s := strings.Trim(kvs[i], " ") -// if "" == s { -// continue -// } -// kv := strings.Split(s, AnnotationKeyValueSpliter) -// k := strings.Trim(kv[0], " ") -// v := strings.Trim(kv[1], " ") -// rKVs[k] = v -// } - -// return rKVs, nil -// } diff --git a/annotation/definition.go b/annotation/definition.go index 3700473..0be5799 100644 --- a/annotation/definition.go +++ b/annotation/definition.go @@ -27,12 +27,9 @@ func RegisterAnnotation(t reflect.Type) error { return fmt.Errorf("DI: name[%s] of annotation exist already", name) } - meta := getMetaFields(t) - def := &AnnotationDefinition{ - t: t, - rt: rt, - fields: meta, + t: t, + rt: rt, } annotationRegistry[name] = def @@ -43,8 +40,6 @@ func RegisterAnnotation(t reflect.Type) error { type AnnotationDefinition struct { t reflect.Type rt reflect.Type - - fields map[string]*AnnotationFieldMeta } func getTypeAnnotationField(t reflect.Type) *reflect.StructField {