(desc string)
| 1118 | } |
| 1119 | |
| 1120 | func (j *Importer) parseJavaType(desc string) (*Type, int, error) { |
| 1121 | t := new(Type) |
| 1122 | var n int |
| 1123 | if desc == "" { |
| 1124 | return t, n, errors.New("empty type signature") |
| 1125 | } |
| 1126 | n++ |
| 1127 | switch desc[0] { |
| 1128 | case 'Z': |
| 1129 | t.Kind = Boolean |
| 1130 | case 'B': |
| 1131 | t.Kind = Byte |
| 1132 | case 'C': |
| 1133 | t.Kind = Char |
| 1134 | case 'S': |
| 1135 | t.Kind = Short |
| 1136 | case 'I': |
| 1137 | t.Kind = Int |
| 1138 | case 'J': |
| 1139 | t.Kind = Long |
| 1140 | case 'F': |
| 1141 | t.Kind = Float |
| 1142 | case 'D': |
| 1143 | t.Kind = Double |
| 1144 | case 'L': |
| 1145 | var clsName string |
| 1146 | for i := n; i < len(desc); i++ { |
| 1147 | if desc[i] == ';' { |
| 1148 | clsName = strings.Replace(desc[n:i], "/", ".", -1) |
| 1149 | clsName = strings.Replace(clsName, "$", ".", -1) |
| 1150 | n += i - n + 1 |
| 1151 | break |
| 1152 | } |
| 1153 | } |
| 1154 | if clsName == "" { |
| 1155 | return t, n, errors.New("missing ; in class type signature") |
| 1156 | } |
| 1157 | if clsName == "java.lang.String" { |
| 1158 | t.Kind = String |
| 1159 | } else { |
| 1160 | t.Kind = Object |
| 1161 | t.Class = clsName |
| 1162 | } |
| 1163 | case '[': |
| 1164 | et, n2, err := j.parseJavaType(desc[n:]) |
| 1165 | if err != nil { |
| 1166 | return t, n, err |
| 1167 | } |
| 1168 | n += n2 |
| 1169 | t.Kind = Array |
| 1170 | t.Elem = et |
| 1171 | default: |
| 1172 | return t, n, fmt.Errorf("invalid type signature: %s", desc) |
| 1173 | } |
| 1174 | return t, n, nil |
| 1175 | } |
| 1176 | |
| 1177 | func initialUpper(s string) string { |
no test coverage detected