Expand description
Recursive descent parser for JVM generic signatures (JVMS 4.7.9.1).
The JVM stores generic type information in Signature attributes as compact
strings following a specific grammar. This module parses those strings into
the structured types defined in crate::stub::model.
§Grammar (JVMS 4.7.9.1)
ClassSignature = FormalTypeParameters? SuperclassSignature SuperinterfaceSignature*
MethodSignature = FormalTypeParameters? '(' TypeSignature* ')' ReturnType ThrowsSignature*
FormalTypeParameters = '<' FormalTypeParameter+ '>'
FormalTypeParameter = Identifier ClassBound InterfaceBound*
ClassBound = ':' FieldTypeSignature?
InterfaceBound = ':' FieldTypeSignature
FieldTypeSignature = ClassTypeSignature | ArrayTypeSignature | TypeVariableSignature
ClassTypeSignature = 'L' (Identifier '/')* Identifier TypeArguments? ('.' Identifier TypeArguments?)* ';'
TypeArguments = '<' TypeArgument+ '>'
TypeArgument = WildcardIndicator? FieldTypeSignature | '*'
WildcardIndicator = '+' | '-'
TypeVariableSignature = 'T' Identifier ';'
ArrayTypeSignature = '[' TypeSignature
TypeSignature = FieldTypeSignature | BaseType
ReturnType = TypeSignature | 'V'
ThrowsSignature = '^' ClassTypeSignature | '^' TypeVariableSignature
BaseType = 'B' | 'C' | 'D' | 'F' | 'I' | 'J' | 'S' | 'Z'§Examples
use sqry_classpath::bytecode::generics::{parse_class_signature, parse_method_signature, parse_field_signature};
// HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>
let sig = "<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;";
let parsed = parse_class_signature(sig).unwrap();
assert_eq!(parsed.type_parameters.len(), 2);
// <T:Object>(T)T
let method_sig = "<T:Ljava/lang/Object;>(TT;)TT;";
let parsed = parse_method_signature(method_sig).unwrap();
assert_eq!(parsed.type_parameters.len(), 1);
// List<String>
let field_sig = "Ljava/util/List<Ljava/lang/String;>;";
let parsed = parse_field_signature(field_sig).unwrap();Functions§
- parse_
class_ signature - Parse a class-level generic signature (JVMS 4.7.9.1
ClassSignature). - parse_
field_ signature - Parse a field-level type signature (JVMS 4.7.9.1
FieldTypeSignature). - parse_
method_ signature - Parse a method-level generic signature (JVMS 4.7.9.1
MethodSignature).