public override ISearchDomain GetDeclaredElementSearchDomain(IDeclaredElement declaredElement) { // todo: type abbreviations if (declaredElement is IFSharpLocalDeclaration localDeclaration) { return(mySearchDomainFactory.CreateSearchDomain(localDeclaration.GetSourceFile())); } if (declaredElement is IFSharpSymbolElement fsSymbolElement) { var fsSymbol = fsSymbolElement.Symbol; if (!(fsSymbol is FSharpActivePatternCase activePatternCase)) { return(EmptySearchDomain.Instance); } if (fsSymbolElement is ResolvedFSharpSymbolElement) { var patternEntity = activePatternCase.Group.DeclaringEntity?.Value; if (patternEntity != null) { var patternTypeElement = FSharpElementsUtil.GetDeclaredElement(patternEntity, fsSymbolElement.Module); return(patternTypeElement != null ? myClrSearchFactory.GetDeclaredElementSearchDomain(patternTypeElement) : EmptySearchDomain.Instance); } } } if (declaredElement is TopActivePatternCase activePatternCaseElement) { var declaration = activePatternCaseElement.GetDeclaration(); if (declaration?.GetContainingNode <IFSharpLocalDeclaration>() != null) { return(mySearchDomainFactory.CreateSearchDomain(declaration.GetSourceFile())); } var containingMemberDeclaration = declaration?.GetContainingNode <ITypeMemberDeclaration>(); var containingMember = containingMemberDeclaration?.DeclaredElement; if (containingMember != null) { return(myClrSearchFactory.GetDeclaredElementSearchDomain(containingMember)); } } if (declaredElement is CompiledActivePatternCase compiledActivePatternCase) { return(myClrSearchFactory.GetDeclaredElementSearchDomain(compiledActivePatternCase.Origin)); } if (declaredElement is IFSharpAnonRecordFieldProperty fieldProperty) { return(mySearchDomainFactory.CreateSearchDomain(fieldProperty.Module)); } return(EmptySearchDomain.Instance); }
public override ISearchDomain GetDeclaredElementSearchDomain(IDeclaredElement declaredElement) { // todo: type abbreviations if (declaredElement is ILocalDeclaration localDeclaration) { return(mySearchDomainFactory.CreateSearchDomain(localDeclaration.GetSourceFile())); } if (declaredElement is IFSharpSymbolElement fsSymbolElement) { var fsSymbol = fsSymbolElement.Symbol; if (!(fsSymbol is FSharpActivePatternCase activePatternCase)) { return(EmptySearchDomain.Instance); } if (fsSymbolElement is ResolvedFSharpSymbolElement) { var patternEntity = activePatternCase.Group.DeclaringEntity?.Value; if (patternEntity != null) { var patternTypeElement = FSharpElementsUtil.GetDeclaredElement(patternEntity, fsSymbolElement.Module); if (patternTypeElement == null) { return(EmptySearchDomain.Instance); } return(myClrSearchFactory.GetDeclaredElementSearchDomain(patternTypeElement)); } } if (fsSymbolElement is ActivePatternCase activePatternCaseElement) { var declaration = activePatternCaseElement.GetDeclaration(); var containingType = ((ITypeDeclaration)declaration?.GetContainingTypeDeclaration())?.DeclaredElement; if (containingType != null) { return(myClrSearchFactory.GetDeclaredElementSearchDomain(containingType)); } } } return(EmptySearchDomain.Instance); }
public override ISearchDomain GetDeclaredElementSearchDomain(IDeclaredElement declaredElement) { // todo: type abbreviations if (declaredElement is IFSharpLocalDeclaration localDeclaration) { return(mySearchDomainFactory.CreateSearchDomain(localDeclaration.GetSourceFile())); } if (declaredElement is TopActivePatternCase activePatternCaseElement) { var declaration = activePatternCaseElement.GetDeclaration(); if (declaration?.GetContainingNode <IFSharpLocalDeclaration>() != null) { return(mySearchDomainFactory.CreateSearchDomain(declaration.GetSourceFile())); } var containingMemberDeclaration = declaration?.GetContainingNode <ITypeMemberDeclaration>(); var containingMember = containingMemberDeclaration?.DeclaredElement; if (containingMember != null) { return(myClrSearchFactory.GetDeclaredElementSearchDomain(containingMember)); } } if (declaredElement is CompiledActivePatternCase compiledActivePatternCase) { return(myClrSearchFactory.GetDeclaredElementSearchDomain(compiledActivePatternCase.Origin)); } if (declaredElement is IFSharpAnonRecordFieldProperty fieldProperty) { return(mySearchDomainFactory.CreateSearchDomain(fieldProperty.Module)); } return(EmptySearchDomain.Instance); }