Skip to content

Commit 0bc4c03

Browse files
committed
Gate function reflection behind a feature
1 parent 09d86bf commit 0bc4c03

File tree

19 files changed

+132
-86
lines changed

19 files changed

+132
-86
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,9 @@ ios_simulator = ["bevy_internal/ios_simulator"]
348348
# Enable built in global state machines
349349
bevy_state = ["bevy_internal/bevy_state"]
350350

351+
# Enable function reflection
352+
function_reflection = ["bevy_internal/function_reflection"]
353+
351354
[dependencies]
352355
bevy_internal = { path = "crates/bevy_internal", version = "0.14.0-dev", default-features = false }
353356

@@ -2158,6 +2161,7 @@ wasm = false
21582161
name = "function_reflection"
21592162
path = "examples/reflection/function_reflection.rs"
21602163
doc-scrape-examples = true
2164+
required-features = ["function_reflection"]
21612165

21622166
[package.metadata.example.function_reflection]
21632167
name = "Function Reflection"

crates/bevy_internal/Cargo.toml

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ categories = ["game-engines", "graphics", "gui", "rendering"]
1111

1212
[features]
1313
trace = [
14-
"bevy_app/trace",
15-
"bevy_asset?/trace",
16-
"bevy_core_pipeline?/trace",
17-
"bevy_ecs/trace",
18-
"bevy_log/trace",
19-
"bevy_pbr?/trace",
20-
"bevy_render?/trace",
21-
"bevy_hierarchy/trace",
22-
"bevy_winit?/trace",
14+
"bevy_app/trace",
15+
"bevy_asset?/trace",
16+
"bevy_core_pipeline?/trace",
17+
"bevy_ecs/trace",
18+
"bevy_log/trace",
19+
"bevy_pbr?/trace",
20+
"bevy_render?/trace",
21+
"bevy_hierarchy/trace",
22+
"bevy_winit?/trace",
2323
]
2424
trace_chrome = ["bevy_log/tracing-chrome"]
2525
trace_tracy = ["bevy_render?/tracing-tracy", "bevy_log/tracing-tracy"]
@@ -66,29 +66,29 @@ symphonia-wav = ["bevy_audio/symphonia-wav"]
6666

6767
# Shader formats
6868
shader_format_glsl = [
69-
"bevy_render/shader_format_glsl",
70-
"bevy_pbr?/shader_format_glsl",
69+
"bevy_render/shader_format_glsl",
70+
"bevy_pbr?/shader_format_glsl",
7171
]
7272
shader_format_spirv = ["bevy_render/shader_format_spirv"]
7373

7474
serialize = [
75-
"bevy_core/serialize",
76-
"bevy_input/serialize",
77-
"bevy_ecs/serialize",
78-
"bevy_time/serialize",
79-
"bevy_window/serialize",
80-
"bevy_winit?/serialize",
81-
"bevy_transform/serialize",
82-
"bevy_math/serialize",
83-
"bevy_scene?/serialize",
84-
"bevy_ui?/serialize",
85-
"bevy_color?/serialize",
75+
"bevy_core/serialize",
76+
"bevy_input/serialize",
77+
"bevy_ecs/serialize",
78+
"bevy_time/serialize",
79+
"bevy_window/serialize",
80+
"bevy_winit?/serialize",
81+
"bevy_transform/serialize",
82+
"bevy_math/serialize",
83+
"bevy_scene?/serialize",
84+
"bevy_ui?/serialize",
85+
"bevy_color?/serialize",
8686
]
8787
multi_threaded = [
88-
"bevy_asset?/multi_threaded",
89-
"bevy_ecs/multi_threaded",
90-
"bevy_render?/multi_threaded",
91-
"bevy_tasks/multi_threaded",
88+
"bevy_asset?/multi_threaded",
89+
"bevy_ecs/multi_threaded",
90+
"bevy_render?/multi_threaded",
91+
"bevy_tasks/multi_threaded",
9292
]
9393
async-io = ["bevy_tasks/async-io"]
9494

@@ -98,37 +98,37 @@ x11 = ["bevy_winit/x11"]
9898

9999
# Transmission textures in `StandardMaterial`:
100100
pbr_transmission_textures = [
101-
"bevy_pbr?/pbr_transmission_textures",
102-
"bevy_gltf?/pbr_transmission_textures",
101+
"bevy_pbr?/pbr_transmission_textures",
102+
"bevy_gltf?/pbr_transmission_textures",
103103
]
104104

105105
# Multi-layer material textures in `StandardMaterial`:
106106
pbr_multi_layer_material_textures = [
107-
"bevy_pbr?/pbr_multi_layer_material_textures",
108-
"bevy_gltf?/pbr_multi_layer_material_textures",
107+
"bevy_pbr?/pbr_multi_layer_material_textures",
108+
"bevy_gltf?/pbr_multi_layer_material_textures",
109109
]
110110

111111
# Anisotropy texture in `StandardMaterial`:
112112
pbr_anisotropy_texture = [
113-
"bevy_pbr?/pbr_anisotropy_texture",
114-
"bevy_gltf?/pbr_anisotropy_texture",
113+
"bevy_pbr?/pbr_anisotropy_texture",
114+
"bevy_gltf?/pbr_anisotropy_texture",
115115
]
116116

117117
# Optimise for WebGL2
118118
webgl = [
119-
"bevy_core_pipeline?/webgl",
120-
"bevy_pbr?/webgl",
121-
"bevy_render?/webgl",
122-
"bevy_gizmos?/webgl",
123-
"bevy_sprite?/webgl",
119+
"bevy_core_pipeline?/webgl",
120+
"bevy_pbr?/webgl",
121+
"bevy_render?/webgl",
122+
"bevy_gizmos?/webgl",
123+
"bevy_sprite?/webgl",
124124
]
125125

126126
webgpu = [
127-
"bevy_core_pipeline?/webgpu",
128-
"bevy_pbr?/webgpu",
129-
"bevy_render?/webgpu",
130-
"bevy_gizmos?/webgpu",
131-
"bevy_sprite?/webgpu",
127+
"bevy_core_pipeline?/webgpu",
128+
"bevy_pbr?/webgpu",
129+
"bevy_render?/webgpu",
130+
"bevy_gizmos?/webgpu",
131+
"bevy_sprite?/webgpu",
132132
]
133133

134134
# enable systems that allow for automated testing on CI
@@ -173,8 +173,8 @@ embedded_watcher = ["bevy_asset?/embedded_watcher"]
173173

174174
# Enable system stepping support
175175
bevy_debug_stepping = [
176-
"bevy_ecs/bevy_debug_stepping",
177-
"bevy_app/bevy_debug_stepping",
176+
"bevy_ecs/bevy_debug_stepping",
177+
"bevy_app/bevy_debug_stepping",
178178
]
179179

180180
# Enables the meshlet renderer for dense high-poly scenes (experimental)
@@ -195,6 +195,9 @@ ios_simulator = ["bevy_pbr?/ios_simulator", "bevy_render?/ios_simulator"]
195195
# Enable built in global state machines
196196
bevy_state = ["dep:bevy_state"]
197197

198+
# Enable function reflection
199+
function_reflection = ["bevy_reflect/functions"]
200+
198201
[dependencies]
199202
# bevy
200203
bevy_a11y = { path = "../bevy_a11y", version = "0.14.0-dev" }
@@ -210,7 +213,7 @@ bevy_log = { path = "../bevy_log", version = "0.14.0-dev" }
210213
bevy_math = { path = "../bevy_math", version = "0.14.0-dev" }
211214
bevy_ptr = { path = "../bevy_ptr", version = "0.14.0-dev" }
212215
bevy_reflect = { path = "../bevy_reflect", version = "0.14.0-dev", features = [
213-
"bevy",
216+
"bevy",
214217
] }
215218
bevy_time = { path = "../bevy_time", version = "0.14.0-dev" }
216219
bevy_transform = { path = "../bevy_transform", version = "0.14.0-dev" }

crates/bevy_reflect/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ smallvec = ["dep:smallvec"]
1919
uuid = ["dep:uuid"]
2020
# When enabled, allows documentation comments to be accessed via reflection
2121
documentation = ["bevy_reflect_derive/documentation"]
22+
# Enables function reflection
23+
functions = ["bevy_reflect_derive/functions"]
2224

2325
[dependencies]
2426
# bevy

crates/bevy_reflect/derive/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ proc-macro = true
1515
default = []
1616
# When enabled, allows documentation comments to be processed by the reflection macros
1717
documentation = []
18+
# Enables macro logic related to function reflection
19+
functions = []
1820

1921
[dependencies]
2022
bevy_macro_utils = { path = "../../bevy_macro_utils", version = "0.14.0-dev" }

crates/bevy_reflect/derive/src/impls/enums.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::derive_data::{EnumVariantFields, ReflectEnum, StructField};
22
use crate::enum_utility::{EnumVariantOutputData, TryApplyVariantBuilder, VariantBuilder};
3-
use crate::impls::{impl_function_traits, impl_type_path, impl_typed};
3+
use crate::impls::{impl_type_path, impl_typed};
44
use bevy_macro_utils::fq_std::{FQAny, FQBox, FQOption, FQResult};
55
use proc_macro2::{Ident, Span};
66
use quote::quote;
@@ -65,7 +65,11 @@ pub(crate) fn impl_enum(reflect_enum: &ReflectEnum) -> proc_macro2::TokenStream
6565

6666
let type_path_impl = impl_type_path(reflect_enum.meta());
6767

68-
let function_impls = impl_function_traits(reflect_enum.meta(), &where_clause_options);
68+
#[cfg(not(feature = "functions"))]
69+
let function_impls = None::<proc_macro2::TokenStream>;
70+
#[cfg(feature = "functions")]
71+
let function_impls =
72+
crate::impls::impl_function_traits(reflect_enum.meta(), &where_clause_options);
6973

7074
let get_type_registration_impl = reflect_enum.get_type_registration(&where_clause_options);
7175

crates/bevy_reflect/derive/src/impls/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
mod enums;
2+
#[cfg(feature = "functions")]
23
mod func;
34
mod structs;
45
mod tuple_structs;
56
mod typed;
67
mod values;
78

89
pub(crate) use enums::impl_enum;
10+
#[cfg(feature = "functions")]
911
pub(crate) use func::impl_function_traits;
1012
pub(crate) use structs::impl_struct;
1113
pub(crate) use tuple_structs::impl_tuple_struct;

crates/bevy_reflect/derive/src/impls/structs.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::impls::{impl_function_traits, impl_type_path, impl_typed};
1+
use crate::impls::{impl_type_path, impl_typed};
22
use crate::utility::ident_or_index;
33
use crate::ReflectStruct;
44
use bevy_macro_utils::fq_std::{FQAny, FQBox, FQDefault, FQOption, FQResult};
@@ -54,7 +54,11 @@ pub(crate) fn impl_struct(reflect_struct: &ReflectStruct) -> proc_macro2::TokenS
5454

5555
let type_path_impl = impl_type_path(reflect_struct.meta());
5656

57-
let function_impls = impl_function_traits(reflect_struct.meta(), &where_clause_options);
57+
#[cfg(not(feature = "functions"))]
58+
let function_impls = None::<proc_macro2::TokenStream>;
59+
#[cfg(feature = "functions")]
60+
let function_impls =
61+
crate::impls::impl_function_traits(reflect_struct.meta(), &where_clause_options);
5862

5963
let get_type_registration_impl = reflect_struct.get_type_registration(&where_clause_options);
6064

crates/bevy_reflect/derive/src/impls/tuple_structs.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::impls::{impl_function_traits, impl_type_path, impl_typed};
1+
use crate::impls::{impl_type_path, impl_typed};
22
use crate::ReflectStruct;
33
use bevy_macro_utils::fq_std::{FQAny, FQBox, FQDefault, FQOption, FQResult};
44
use quote::{quote, ToTokens};
@@ -46,7 +46,11 @@ pub(crate) fn impl_tuple_struct(reflect_struct: &ReflectStruct) -> proc_macro2::
4646

4747
let type_path_impl = impl_type_path(reflect_struct.meta());
4848

49-
let function_impls = impl_function_traits(reflect_struct.meta(), &where_clause_options);
49+
#[cfg(not(feature = "functions"))]
50+
let function_impls = None::<proc_macro2::TokenStream>;
51+
#[cfg(feature = "functions")]
52+
let function_impls =
53+
crate::impls::impl_function_traits(reflect_struct.meta(), &where_clause_options);
5054

5155
let (impl_generics, ty_generics, where_clause) = reflect_struct
5256
.meta()

crates/bevy_reflect/derive/src/impls/values.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::impls::{impl_function_traits, impl_type_path, impl_typed};
1+
use crate::impls::{impl_type_path, impl_typed};
22
use crate::utility::WhereClauseOptions;
33
use crate::ReflectMeta;
44
use bevy_macro_utils::fq_std::{FQAny, FQBox, FQClone, FQOption, FQResult};
@@ -33,7 +33,10 @@ pub(crate) fn impl_value(meta: &ReflectMeta) -> proc_macro2::TokenStream {
3333

3434
let type_path_impl = impl_type_path(meta);
3535

36-
let function_impls = impl_function_traits(meta, &where_clause_options);
36+
#[cfg(not(feature = "functions"))]
37+
let function_impls = None::<proc_macro2::TokenStream>;
38+
#[cfg(feature = "functions")]
39+
let function_impls = crate::impls::impl_function_traits(meta, &where_clause_options);
3740

3841
let (impl_generics, ty_generics, where_clause) = type_path.generics().split_for_impl();
3942
let where_reflect_clause = where_clause_options.extend_where_clause(where_clause);

crates/bevy_reflect/src/array.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::func::macros::impl_function_traits;
21
use crate::{
32
self as bevy_reflect, utility::reflect_hasher, ApplyError, Reflect, ReflectKind, ReflectMut,
43
ReflectOwned, ReflectRef, TypeInfo, TypePath, TypePathTable,
@@ -359,7 +358,9 @@ impl Array for DynamicArray {
359358
}
360359

361360
impl_type_path!((in bevy_reflect) DynamicArray);
362-
impl_function_traits!(DynamicArray);
361+
#[cfg(feature = "functions")]
362+
crate::func::macros::impl_function_traits!(DynamicArray);
363+
363364
/// An iterator over an [`Array`].
364365
pub struct ArrayIter<'a> {
365366
array: &'a dyn Array,

0 commit comments

Comments
 (0)