Skip to main content

rusty_javac/call_resolver/
mod.rs

1mod catalog;
2mod platform;
3
4use crate::ty::Ty;
5pub use catalog::ClassCatalog;
6
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct FieldRef {
9    pub owner: String,
10    pub name: String,
11    pub descriptor: String,
12    pub ty: Ty,
13    pub access_flags: u16,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq)]
17pub struct MethodRef {
18    pub owner: String,
19    pub name: String,
20    pub descriptor: String,
21    pub return_ty: Ty,
22    pub params: Vec<Ty>,
23    pub opcode: u8,
24    pub is_interface: bool,
25    pub is_varargs: bool,
26    pub access_flags: u16,
27}
28
29pub fn resolve_class_name(simple_name: &str) -> Option<&'static str> {
30    platform::class_name(simple_name)
31}
32
33pub fn resolve_internal_class_name(internal_name: &str) -> Option<&'static str> {
34    platform::internal_class_name(internal_name)
35}
36
37pub fn resolve_import(path: &str, is_wildcard: bool) -> Option<&'static str> {
38    let internal_name = path.replace('.', "/");
39    if is_wildcard {
40        return known_package(internal_name.as_str()).then_some("");
41    }
42    resolve_internal_class_name(internal_name.as_str())
43}
44
45pub fn known_package(package: &str) -> bool {
46    platform::package_name(package)
47}
48
49pub fn resolve_static_field(owner: &str, name: &str) -> Option<FieldRef> {
50    ClassCatalog::platform().resolve_static_field(owner, name)
51}
52
53pub fn resolve_instance_method(receiver: &Ty, name: &str, args: &[Ty]) -> Option<MethodRef> {
54    ClassCatalog::platform().resolve_instance_method(receiver, name, args)
55}