bug fixed
This commit is contained in:
		
							parent
							
								
									880b90003d
								
							
						
					
					
						commit
						997e367d4f
					
				| @ -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 | ||||
| // } | ||||
|  | ||||
| @ -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 { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user