287 lines
5.5 KiB
Markdown
287 lines
5.5 KiB
Markdown
# Platform Reflection Capabilities
|
|
|
|
## Core Reflection Features
|
|
|
|
### 1. Library Reflection
|
|
```dart
|
|
// Library reflection support
|
|
final library = LibraryMirrorImpl.withDeclarations(
|
|
name: 'my_library',
|
|
uri: Uri.parse('package:my_package/my_library.dart'),
|
|
);
|
|
|
|
// Access top-level members
|
|
final greeting = library.getField(const Symbol('greeting')).reflectee;
|
|
final sum = library.invoke(
|
|
const Symbol('add'),
|
|
[1, 2],
|
|
).reflectee;
|
|
```
|
|
|
|
### 2. Isolate Support
|
|
```dart
|
|
// Current isolate reflection
|
|
final current = IsolateMirrorImpl.current(rootLibrary);
|
|
|
|
// Other isolate reflection
|
|
final other = IsolateMirrorImpl.other(
|
|
isolate,
|
|
'worker',
|
|
rootLibrary,
|
|
);
|
|
|
|
// Isolate control
|
|
await other.pause();
|
|
await other.resume();
|
|
await other.kill();
|
|
|
|
// Error handling
|
|
other.addErrorListener((error, stack) {
|
|
print('Error in isolate: $error\n$stack');
|
|
});
|
|
|
|
// Exit handling
|
|
other.addExitListener((message) {
|
|
print('Isolate exited with: $message');
|
|
});
|
|
```
|
|
|
|
### 3. Type System
|
|
```dart
|
|
// Special types
|
|
final voidType = VoidType.instance;
|
|
final dynamicType = DynamicType.instance;
|
|
final neverType = NeverType.instance;
|
|
|
|
// Type checking
|
|
final isVoid = type.isVoid;
|
|
final isDynamic = type.isDynamic;
|
|
final isNever = type.isNever;
|
|
```
|
|
|
|
### 4. Metadata System
|
|
```dart
|
|
// Parameter metadata
|
|
final param = ParameterMetadata(
|
|
name: 'id',
|
|
type: int,
|
|
isRequired: true,
|
|
isNamed: false,
|
|
defaultValue: 0,
|
|
attributes: [deprecated],
|
|
);
|
|
|
|
// Property metadata
|
|
final prop = PropertyMetadata(
|
|
name: 'name',
|
|
type: String,
|
|
isReadable: true,
|
|
isWritable: true,
|
|
attributes: [override],
|
|
);
|
|
|
|
// Method metadata
|
|
final method = MethodMetadata(
|
|
name: 'calculate',
|
|
parameterTypes: [int, double],
|
|
parameters: [...],
|
|
isStatic: false,
|
|
returnsVoid: false,
|
|
attributes: [deprecated],
|
|
);
|
|
```
|
|
|
|
### 5. Constructor Support
|
|
```dart
|
|
// Constructor metadata
|
|
final ctor = ConstructorMetadata(
|
|
name: 'named',
|
|
parameterTypes: [String, int],
|
|
parameters: [...],
|
|
parameterNames: ['name', 'age'],
|
|
attributes: [...],
|
|
);
|
|
|
|
// Validation
|
|
final valid = ctor.validateArguments(['John', 42]);
|
|
```
|
|
|
|
### 6. Type Metadata
|
|
```dart
|
|
// Full type information
|
|
final type = TypeMetadata(
|
|
type: User,
|
|
name: 'User',
|
|
properties: {...},
|
|
methods: {...},
|
|
constructors: [...],
|
|
supertype: Person,
|
|
interfaces: [Comparable],
|
|
attributes: [serializable],
|
|
);
|
|
|
|
// Member access
|
|
final prop = type.getProperty('name');
|
|
final method = type.getMethod('greet');
|
|
final ctor = type.getConstructor('guest');
|
|
```
|
|
|
|
## Advanced Features
|
|
|
|
### 1. Library Dependencies
|
|
```dart
|
|
final deps = library.libraryDependencies;
|
|
for (var dep in deps) {
|
|
if (dep.isImport) {
|
|
print('Imports: ${dep.targetLibrary?.uri}');
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. Declaration Access
|
|
```dart
|
|
final decls = library.declarations;
|
|
for (var decl in decls.values) {
|
|
if (decl is MethodMirror) {
|
|
print('Method: ${decl.simpleName}');
|
|
} else if (decl is VariableMirror) {
|
|
print('Variable: ${decl.simpleName}');
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3. Function Metadata
|
|
```dart
|
|
final func = FunctionMetadata(
|
|
parameters: [...],
|
|
returnsVoid: false,
|
|
returnType: int,
|
|
);
|
|
|
|
final valid = func.validateArguments([1, 2.0]);
|
|
```
|
|
|
|
### 4. Reflection Registry
|
|
```dart
|
|
// Type registration
|
|
ReflectionRegistry.registerType(User);
|
|
|
|
// Member registration
|
|
ReflectionRegistry.registerProperty(
|
|
User,
|
|
'name',
|
|
String,
|
|
isReadable: true,
|
|
isWritable: true,
|
|
);
|
|
|
|
ReflectionRegistry.registerMethod(
|
|
User,
|
|
'greet',
|
|
[String],
|
|
false,
|
|
);
|
|
|
|
ReflectionRegistry.registerConstructor(
|
|
User,
|
|
'guest',
|
|
factory,
|
|
);
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
```dart
|
|
try {
|
|
// Reflection operations
|
|
} on MemberNotFoundException catch (e) {
|
|
print('Member not found: ${e.memberName} on ${e.type}');
|
|
} on InvalidArgumentsException catch (e) {
|
|
print('Invalid arguments for ${e.memberName}');
|
|
} on ReflectionException catch (e) {
|
|
print('Reflection error: ${e.message}');
|
|
}
|
|
```
|
|
|
|
## Platform Support
|
|
|
|
- ✅ VM (Full support)
|
|
- ✅ Web (Full support)
|
|
- ✅ Flutter (Full support)
|
|
- ✅ AOT compilation (Full support)
|
|
|
|
## Performance Considerations
|
|
|
|
1. **Registration Impact**
|
|
- One-time registration cost
|
|
- Optimized runtime performance
|
|
- Minimal memory overhead
|
|
|
|
2. **Metadata Caching**
|
|
- Efficient metadata storage
|
|
- Fast lookup mechanisms
|
|
- Memory-conscious design
|
|
|
|
3. **Cross-isolate Performance**
|
|
- Minimal serialization overhead
|
|
- Efficient isolate communication
|
|
- Controlled resource usage
|
|
|
|
## Security Features
|
|
|
|
1. **Access Control**
|
|
- Controlled reflection surface
|
|
- Explicit registration required
|
|
- Member visibility respect
|
|
|
|
2. **Type Safety**
|
|
- Strong type checking
|
|
- Argument validation
|
|
- Return type verification
|
|
|
|
3. **Isolate Safety**
|
|
- Controlled isolate access
|
|
- Error propagation
|
|
- Resource cleanup
|
|
|
|
## Best Practices
|
|
|
|
1. **Registration**
|
|
```dart
|
|
// Register early
|
|
void main() {
|
|
registerTypes();
|
|
runApp();
|
|
}
|
|
```
|
|
|
|
2. **Metadata Usage**
|
|
```dart
|
|
// Cache metadata
|
|
final metadata = Reflector.getTypeMetadata(User);
|
|
final properties = metadata.properties;
|
|
final methods = metadata.methods;
|
|
```
|
|
|
|
3. **Error Handling**
|
|
```dart
|
|
// Comprehensive error handling
|
|
try {
|
|
final result = mirror.invoke(name, args);
|
|
} on ReflectionException catch (e) {
|
|
handleError(e);
|
|
}
|
|
```
|
|
|
|
4. **Isolate Management**
|
|
```dart
|
|
// Proper cleanup
|
|
final isolate = IsolateMirrorImpl.other(...);
|
|
try {
|
|
await doWork(isolate);
|
|
} finally {
|
|
await isolate.kill();
|
|
}
|
|
```
|
|
|
|
This document provides a comprehensive overview of the Platform Reflection library's capabilities. For detailed API documentation, see the [API Reference](../README.md#api-reference).
|