how to create a class instance
Noobware1 opened this issue · comments
Noobware1 commented
sorry if i can't explain it properly. basically i want to create a searchresponse instance in code.dart with help of $SearchResponse $Instance defined in the extenstions_test.dart.
it's not really a issue rather a question.
in code.dart
import 'package:bridge_lib/bridge_lib.dart';
test() {
return SearchResponse(
poster: 'test-poster', title: 'test-title', url: 'test-url');
}
in extenstions_test.dart
import 'dart:io';
import 'dart:typed_data';
import 'package:dart_eval/dart_eval.dart';
import 'package:dart_eval/dart_eval_bridge.dart';
import 'package:dart_eval/stdlib/core.dart';
class SearchResponse {
String? title;
String? poster;
String? url;
SearchResponse({this.title, this.poster, this.url});
}
class $SearchResponse implements SearchResponse, $Instance {
$SearchResponse.wrap(this.$value) : _superclass = $Object($value);
static const $type = BridgeTypeRef(
BridgeTypeSpec('package:bridge_lib/bridge_lib.dart', 'SearchResponse'));
static const $declaration = BridgeClassDef(BridgeClassType($type),
constructors: {
'': BridgeConstructorDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation($type),
params: [],
namedParams: [
BridgeParameter(
'title',
BridgeTypeAnnotation(
BridgeTypeRef.type(RuntimeTypes.stringType)),
false),
BridgeParameter(
'poster',
BridgeTypeAnnotation(
BridgeTypeRef.type(RuntimeTypes.stringType)),
false),
BridgeParameter(
'url',
BridgeTypeAnnotation(
BridgeTypeRef.type(RuntimeTypes.stringType)),
false),
],
),
),
},
fields: {
'title': BridgeFieldDef(
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.stringType))),
'poster': BridgeFieldDef(
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.stringType))),
'url': BridgeFieldDef(
BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.stringType))),
},
wrap: true);
@override
$Value? $getProperty(Runtime runtime, String identifier) {
switch (identifier) {
case 'url':
return $String($value.url!);
case 'poster':
return $String($value.poster!);
case 'title':
return $String($value.title!);
default:
throw UnimplementedError();
}
}
@override
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
return $SearchResponse.wrap(SearchResponse());
}
@override
SearchResponse get $reified => $value;
final $Instance _superclass;
@override
void $setProperty(Runtime runtime, String identifier, $Value value) {
switch (identifier) {
case 'url':
$value.url = value.$reified;
case 'poster':
$value.poster = value.$reified;
case 'title':
$value.title = value.$reified;
default:
_superclass.$setProperty(runtime, identifier, value);
}
}
@override
final SearchResponse $value;
@override
String? get poster => $value.poster;
@override
String? get title => $value.title;
@override
String? get url => $value.url;
@override
set poster(String? _poster) {
// TODO: implement poster
}
@override
set title(String? _title) {
// TODO: implement title
}
@override
set url(String? _url) {
// TODO: implement url
}
}
Uint8List compilerEval(String sourceCode) {
final compiler = Compiler();
compiler.defineBridgeClasses([$SearchResponse.$declaration]);
final program = compiler.compile({
'extenstions_test': {'code.dart': sourceCode}
});
final bytecode = program.write();
return bytecode;
}
Runtime runtimeEval(Uint8List bytecode) {
final runtime = Runtime(bytecode.buffer.asByteData());
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
'SearchResponse.', $SearchResponse.$new);
runtime.setup();
return runtime;
}
void main(List<String> args) async {
final file =
await File('E:/Projects/extenstions_test/lib/code.dart').readAsString();
final compiled = compilerEval(file);
final runtime = runtimeEval(compiled);
final value = (await runtime.executeLib(
'package:extenstions_test/code.dart',
'test',
));
if (value is $SearchResponse) {
print(value.title);
print(value.poster);
print(value.url);
}
}
Noobware1 commented
Figured it out