mirror of
https://github.com/bevyengine/bevy
synced 2024-11-26 22:50:19 +00:00
Fix field visibility for read-only WorldQuery
types (#8163)
# Objective When using the `#[derive(WorldQuery)]` macro, the `ReadOnly` struct generated has default (private) visibility for each field, regardless of the visibility of the original field. ## Solution For each field of a read-only `WorldQuery` variant, use the visibility of the associated field defined on the original struct.
This commit is contained in:
parent
27f2265e11
commit
ce33354cee
2 changed files with 29 additions and 1 deletions
|
@ -348,7 +348,7 @@ pub fn derive_world_query_impl(input: TokenStream) -> TokenStream {
|
||||||
#[doc = "`]."]
|
#[doc = "`]."]
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
#visibility struct #read_only_struct_name #user_impl_generics #user_where_clauses {
|
#visibility struct #read_only_struct_name #user_impl_generics #user_where_clauses {
|
||||||
#( #field_idents: #read_only_field_types, )*
|
#( #field_visibilities #field_idents: #read_only_field_types, )*
|
||||||
#(#(#ignored_field_attrs)* #ignored_field_visibilities #ignored_field_idents: #ignored_field_types,)*
|
#(#(#ignored_field_attrs)* #ignored_field_visibilities #ignored_field_idents: #ignored_field_types,)*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1394,6 +1394,34 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{self as bevy_ecs, system::Query};
|
use crate::{self as bevy_ecs, system::Query};
|
||||||
|
|
||||||
|
#[derive(Component)]
|
||||||
|
pub struct A;
|
||||||
|
|
||||||
|
// Ensures that each field of a `WorldQuery` struct's read-only variant
|
||||||
|
// has the same visibility as its corresponding mutable field.
|
||||||
|
#[test]
|
||||||
|
fn read_only_field_visibility() {
|
||||||
|
mod private {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[derive(WorldQuery)]
|
||||||
|
#[world_query(mutable)]
|
||||||
|
pub struct Q {
|
||||||
|
pub a: &'static mut A,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ = private::QReadOnly { a: &A };
|
||||||
|
|
||||||
|
fn my_system(query: Query<private::Q>) {
|
||||||
|
for q in &query {
|
||||||
|
let _ = &q.a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
crate::system::assert_is_system(my_system);
|
||||||
|
}
|
||||||
|
|
||||||
// Ensures that metadata types generated by the WorldQuery macro
|
// Ensures that metadata types generated by the WorldQuery macro
|
||||||
// do not conflict with user-defined types.
|
// do not conflict with user-defined types.
|
||||||
// Regression test for https://github.com/bevyengine/bevy/issues/8010.
|
// Regression test for https://github.com/bevyengine/bevy/issues/8010.
|
||||||
|
|
Loading…
Reference in a new issue