/// <inheritdoc/> public sealed override async Task <bool> Initialize() { sourceResolver = ServiceProvider.Get <IScriptSourceCodeResolver>(); if (sourceResolver.LatestCompilation == null) { // Wait for initial compilation to be done before continuing initialization var compilationReady = new TaskCompletionSource <bool>(); EventHandler compilationChange = (sender, args) => compilationReady.TrySetResult(true); sourceResolver.LatestCompilationChanged += compilationChange; await compilationReady.Task; sourceResolver.LatestCompilationChanged -= compilationChange; } properties = GraphViewModel.Create(ServiceProvider, new[] { new SinglePropertyProvider(propertiesNode.Target) }); // Since Roslyn compilation is ready, regenerate slots await RegenerateSlots(); // Regenerate slot on next compilations sourceResolver.LatestCompilationChanged += CompilationUpdated; // Listen to changes Session.AssetPropertiesChanged += Session_AssetPropertiesChanged; // Select first function SelectedMethod = Methods.FirstOrDefault(); // Trigger initial compilation TriggerBackgroundCompilation().Forget(); return(true); }
public SymbolSearchHelper(VisualScriptEditorViewModel viewModel) { this.viewModel = viewModel; viewModel.PropertyChanged += ViewModel_PropertyChanged; viewModel.SymbolSearchValues.Clear(); viewModel.SymbolSearchOpen = true; sourceResolver = viewModel.ServiceProvider.Get <IScriptSourceCodeResolver>(); // Start initial search symbolSearchCancellationToken = new CancellationTokenSource(); Task.Run(() => GenerateSymbolSearchValues(sourceResolver.LatestCompilation, symbolSearchCancellationToken.Token)).Forget(); // Listen for changes sourceResolver.LatestCompilationChanged += RestartSearch; }