resolve method
Danger<List<FileSystemModelRoute> , CitrusSemanticException>
resolve(
- CitrusSymbolTable symbolTable,
- FileSystemModelRoute target,
- FileSystemModelRouteRoster<
FileSystemModelRoute> base
override
Implementation
@override
Danger<List<FileSystemModelRoute>, CitrusSemanticException> resolve(CitrusSymbolTable symbolTable, FileSystemModelRoute target, FileSystemModelRouteRoster<FileSystemModelRoute> base) {
final log = Log(classLocation: runtimeType, functionLocation: 'resolve');
final arrayAccesserResolveResult = arrayAccesser.resolve(symbolTable);
log.add(arrayAccesserResolveResult);
if (arrayAccesserResolveResult is! Success<CitrusDataType, AccesserException>) return Failure(arrayAccesserResolveResult.asException, log);
final bindCitrusArray = arrayAccesserResolveResult.wrapped;
if (bindCitrusArray is! CitrusArray) return Failure(ForAloneBlockExceptionD(), log.monitor({
'type': bindCitrusArray.runtimeType,
}));
final getLoopTargetResult = getLoopTarget(target, base);
log.add(getLoopTargetResult);
final List<FileSystemModelRoute> list = [];
for (final citrusArrayable in bindCitrusArray.value) {
late final String defineSyntaxSource;
final accesser = temporaryAccessor.identifier;
switch (citrusArrayable) {
case CitrusText(): defineSyntaxSource = Define.from(DefineText(), accesser, citrusArrayable.value).source;
case CitrusObject(): defineSyntaxSource = Define.from(DefineObject(), accesser, citrusArrayable.toTemplate()).source;
}
// すべての name と content と location に define の記述を冒頭に追加する
for (final i in getLoopTargetResult.wrapped) {
switch (i) {
case FileModelRoute():
final name = defineSyntaxSource + i.name;
final content = Uint8List.fromList([...defineSyntaxSource.codeUnits, ...i.content]);
final location = List.generate(i.location.length, (index) => defineSyntaxSource + i.location.elementAt(index));
final result = FileModelRoute(location, name, content);
list.add(result);
case FolderModelRoute():
final name = defineSyntaxSource + i.name;
final location = List.generate(i.location.length, (index) => defineSyntaxSource + i.location.elementAt(index));
final result = FolderModelRoute(location, name);
list.add(result);
// 対応していない.
case LinkModelRoute(): Result.panic(CitrusSemanticErrorA(), log);
}
}
}
return Success(list, log);
}