(decl, desc string, parenIdx int)
| 979 | } |
| 980 | |
| 981 | func (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 | |
| 1022 | func (j *Importer) fillThrowables(classes []*Class) { |
| 1023 | thrCls, ok := j.clsMap["java.lang.Throwable"] |
no test coverage detected