use crate::compile_context::CppCompileContext;
use crate::graph::CppWorkspaceSource;
use crate::imports::IncludeTargetIndex;
use brokk_bifrost_core::analyzer::capabilities::{TypeAliasProvider, TypeHierarchyProvider};
use brokk_bifrost_core::analyzer::model::{CppFieldLinkage, CppTemplateMetadata};
use brokk_bifrost_core::analyzer::prepared_syntax::PreparedSyntaxTree;
use brokk_bifrost_core::analyzer::{CodeUnit, CodeUnitIndex, ProjectFile};
use std::sync::Arc;
pub trait CppSource:
CodeUnitIndex + TypeAliasProvider + TypeHierarchyProvider + CppWorkspaceSource
{
fn include_target_index(&self) -> &IncludeTargetIndex;
fn raw_supertypes_of(&self, code_unit: &CodeUnit) -> Vec<String>;
fn visible_type_units(&self, file: &ProjectFile) -> Arc<Vec<CodeUnit>>;
fn file_source(&self, file: &ProjectFile) -> Option<String>;
fn prepared_syntax(&self, file: &ProjectFile) -> Option<Arc<PreparedSyntaxTree>>;
fn cpp_field_linkage(&self, code_unit: &CodeUnit) -> Option<CppFieldLinkage>;
fn cached_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
) -> Option<bool>;
fn cache_unconditional_include_reachability(
&self,
first: &ProjectFile,
donor_source: &ProjectFile,
reference_is_c: bool,
reaches: bool,
);
fn structural_parent_of(&self, code_unit: &CodeUnit) -> Option<CodeUnit>;
fn template_metadata(&self, code_unit: &CodeUnit) -> Option<CppTemplateMetadata>;
fn compile_context_for(&self, file: &ProjectFile) -> Option<&CppCompileContext>;
#[cfg(any(test, feature = "test-support"))]
fn record_cpp_parent_resolution_for_test(&self) {}
#[cfg(any(test, feature = "test-support"))]
fn record_cpp_class_strength_parse_for_test(&self) {}
}