rusty-javac 0.2.3

A Java compiler written in Rust.
Documentation
mod catalog;
mod platform;

use crate::ty::Ty;
pub use catalog::ClassCatalog;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FieldRef {
    pub owner: String,
    pub name: String,
    pub descriptor: String,
    pub ty: Ty,
    pub access_flags: u16,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MethodRef {
    pub owner: String,
    pub name: String,
    pub descriptor: String,
    pub return_ty: Ty,
    pub params: Vec<Ty>,
    pub opcode: u8,
    pub is_interface: bool,
    pub is_varargs: bool,
    pub access_flags: u16,
}

pub fn resolve_class_name(simple_name: &str) -> Option<&'static str> {
    platform::class_name(simple_name)
}

pub fn resolve_internal_class_name(internal_name: &str) -> Option<&'static str> {
    platform::internal_class_name(internal_name)
}

pub fn resolve_import(path: &str, is_wildcard: bool) -> Option<&'static str> {
    let internal_name = path.replace('.', "/");
    if is_wildcard {
        return known_package(internal_name.as_str()).then_some("");
    }
    resolve_internal_class_name(internal_name.as_str())
}

pub fn known_package(package: &str) -> bool {
    platform::package_name(package)
}

pub fn resolve_static_field(owner: &str, name: &str) -> Option<FieldRef> {
    ClassCatalog::platform().resolve_static_field(owner, name)
}

pub fn resolve_instance_method(receiver: &Ty, name: &str, args: &[Ty]) -> Option<MethodRef> {
    ClassCatalog::platform().resolve_instance_method(receiver, name, args)
}