public async Task <List <DiagnosticData> > GetCurrentAcuminatorDiagnosticForDocumentSpanAsync(Document document, TextSpan caretSpan, CancellationToken cancellationToken = default) { var componentModelType = _componentModel.GetType(); try { object dataTask = _getDiagnosticOnTextSpanMethod.Invoke(_roslynAnalyzersService, new object[] { document, caretSpan, null, false, cancellationToken }); if (!(dataTask is Task task)) { return(new List <DiagnosticData>()); } await task; object rawResult = _taskResultPropertyInfo.GetValue(dataTask); if (!(rawResult is IEnumerable <object> diagnosticsRaw) || diagnosticsRaw.IsNullOrEmpty()) { return(new List <DiagnosticData>()); } return(diagnosticsRaw.Select(rawData => DiagnosticData.Create(rawData)) .Where(diagnosticData => diagnosticData != null && IsAcuminatorDiagnostic(diagnosticData)) .ToList(capacity: 1)); } catch (Exception e) { return(new List <DiagnosticData>()); } }
private static object GetDiagnosticServiceInstance(IComponentModel componentModel, Type diagnosticAnalyzerServiceType) { Type componentModelType = componentModel.GetType(); var getServiceMethodInfo = componentModelType.GetMethod(nameof(componentModel.GetService)) ?.MakeGenericMethod(diagnosticAnalyzerServiceType); if (getServiceMethodInfo == null) { return(null); } try { return(getServiceMethodInfo.Invoke(componentModel, null)); } catch (Exception e) { return(null); } }
public ComponentPropertiesEditorViewModel Create(IComponentModel componentModel) { switch (componentModel) { case Transform3DComponentModel transformComponentModel: return(new Transform3DComponentPropertiesEditorViewModel(transformComponentModel)); case EllipseRendererComponentModel ellipseRendererComponentModel: return(new EllipseRendererComponentPropertiesEditorViewModel(ellipseRendererComponentModel)); case RectangleRendererComponentModel rectangleRendererComponentModel: return(new RectangleRendererComponentPropertiesEditorViewModel(rectangleRendererComponentModel)); case TextRendererComponentModel textRendererComponentModel: return(new TextRendererComponentPropertiesEditorViewModel(textRendererComponentModel)); case CircleColliderComponentModel circleColliderComponentModel: return(new CircleColliderComponentPropertiesEditorViewModel(circleColliderComponentModel)); case RectangleColliderComponentModel rectangleColliderComponentModel: return(new RectangleColliderComponentPropertiesEditorViewModel(rectangleColliderComponentModel)); default: throw new ArgumentOutOfRangeException(nameof(componentModel), $"Component model of type {componentModel.GetType()} is not supported."); } }