Add stubs for user methods too

This commit is contained in:
Tobe O 2019-03-23 14:58:10 -04:00
parent 456221df6c
commit 958b918ad2
3 changed files with 38 additions and 3 deletions

View file

@ -8,6 +8,7 @@ part of 'stateful.dart';
abstract class _StatefulAppJaelTemplate implements Component<_AppState> { abstract class _StatefulAppJaelTemplate implements Component<_AppState> {
Timer get _timer; Timer get _timer;
void beforeDestroy();
@override @override
DomNode render() { DomNode render() {
return h('div', {}, [text('Tick count: '), text(state.ticks.toString())]); return h('div', {}, [text('Tick count: '), text(state.ticks.toString())]);

View file

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart'; import 'package:build/build.dart';
import 'package:code_builder/code_builder.dart'; import 'package:code_builder/code_builder.dart';
@ -75,6 +74,21 @@ class JaelComponentGenerator extends GeneratorForAnnotation<Jael> {
})); }));
} }
// ... And methods too.
for (var method in element.methods) {
b.methods.add(Method((b) {
b
..name = method.name
..returns = convertTypeReference(method.returnType)
..requiredParameters.addAll(method.parameters
.where(isRequiredParameter)
.map(convertParameter))
..optionalParameters.addAll(method.parameters
.where(isOptionalParameter)
.map(convertParameter));
}));
}
// Add a render() stub // Add a render() stub
b.methods.add(Method((b) { b.methods.add(Method((b) {
b b

View file

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type.dart';
import 'package:build/build.dart'; import 'package:build/build.dart';
import 'package:code_builder/code_builder.dart'; import 'package:code_builder/code_builder.dart';
@ -18,6 +19,25 @@ TypeReference convertTypeReference(DartType t) {
}); });
} }
bool isRequiredParameter(ParameterElement e) {
return e.isNotOptional;
}
bool isOptionalParameter(ParameterElement e) {
return e.isOptional;
}
Parameter convertParameter(ParameterElement e) {
return Parameter((b) {
b
..name = e.name
..type = convertTypeReference(e.type)
..named = e.isNamed
..defaultTo =
e.defaultValueCode == null ? null : Code(e.defaultValueCode);
});
}
UnsupportedError _unsupported() => UnsupportedError _unsupported() =>
UnsupportedError('Not support in R/O build file system.'); UnsupportedError('Not support in R/O build file system.');
@ -183,8 +203,8 @@ class BuildSystemFile extends File {
throw _unsupported(); throw _unsupported();
@override @override
Directory get parent => Directory get parent => BuildSystemDirectory(
BuildSystemDirectory(fileSystem, reader, package, fileSystem.path.dirname(path)); fileSystem, reader, package, fileSystem.path.dirname(path));
@override @override
Future<List<int>> readAsBytes() { Future<List<int>> readAsBytes() {