MCPcopy Create free account
hub / github.com/golang/mobile / scanMethod

Method scanMethod

internal/importers/java/java.go:981–1020  ·  view source on GitHub ↗
(decl, desc string, parenIdx int)

Source from the content-addressed store, hash-verified

979}
980
981func (j *Importer) scanMethod(decl, desc string, parenIdx int) (*Func, error) {
982 // Member is a method
983 f := new(Func)
984 f.Desc = desc
985 for i := parenIdx - 1; i >= 0; i-- {
986 if i == 0 || decl[i-1] == ' ' {
987 f.Name = decl[i:parenIdx]
988 break
989 }
990 }
991 if f.Name == "" {
992 return nil, fmt.Errorf("unable to parse method name from declaration: %q", decl)
993 }
994 if desc[0] != '(' {
995 return nil, fmt.Errorf("invalid descriptor for method %s: %q", f.Name, desc)
996 }
997 const throws = " throws "
998 if idx := strings.Index(decl, throws); idx != -1 {
999 f.Throws = decl[idx+len(throws):]
1000 }
1001 i := 1
1002 for desc[i] != ')' {
1003 typ, n, err := j.parseJavaType(desc[i:])
1004 if err != nil {
1005 return nil, fmt.Errorf("invalid descriptor for method %s: %v", f.Name, err)
1006 }
1007 i += n
1008 f.Params = append(f.Params, typ)
1009 }
1010 f.ArgDesc = desc[1:i]
1011 i++ // skip ending )
1012 if desc[i] != 'V' {
1013 typ, _, err := j.parseJavaType(desc[i:])
1014 if err != nil {
1015 return nil, fmt.Errorf("invalid descriptor for method %s: %v", f.Name, err)
1016 }
1017 f.Ret = typ
1018 }
1019 return f, nil
1020}
1021
1022func (j *Importer) fillThrowables(classes []*Class) {
1023 thrCls, ok := j.clsMap["java.lang.Throwable"]

Callers 1

scanClassMethod · 0.95

Calls 1

parseJavaTypeMethod · 0.95

Tested by

no test coverage detected