private static bool Matched(
            ITreeNode treeNode,
            string pattern,
            StructuralSearchEngine structuralSearchEngine,
            int placeholdersCount,
            out IStructuralMatchResult matchResult,
            out List <string> orderedPlaceholderNames)
        {
            matchResult             = null;
            orderedPlaceholderNames = null;

            IStructuralSearchPattern structuralSearchPattern =
                structuralSearchEngine.GetFactory(CSharpLanguage.Instance).CreatePattern(pattern);

            if (!structuralSearchPattern.GuessPlaceholders() || structuralSearchPattern.Placeholders.Count != placeholdersCount)
            {
                return(false);
            }

            orderedPlaceholderNames = GetPatternOrderedPlaceholderNames(pattern);
            if (orderedPlaceholderNames.Count != placeholdersCount)
            {
                return(false);
            }

            IStructuralMatcher matcher = structuralSearchPattern.CreateMatcher();

            matchResult = matcher.Match(treeNode);

            return(matchResult.Matched);
        }
        public sealed override bool IsAvailable()
        {
            StructuralSearchEngine structuralSearchEngine =
                this.DataProvider.Solution.GetComponent <StructuralSearchEngine>();

            IStructuralMatcher structuralMatcher = structuralSearchEngine.CreateMatcherWithPlaceholdersBindingObject(
                this.Pattern,
                CSharpLanguage.Instance,
                this.GetType(),
                GetAdditionalPlaceholders()
                );

            if (structuralMatcher != null)
            {
                IStructuralMatchResult matchResult =
                    structuralMatcher.IsTreeNodeOrParentsMatched(this.DataProvider.SelectedElement, this);

                if (matchResult.Matched)
                {
                    this.MatchResult = matchResult;

                    return(IsAvailableCore());
                }
            }

            return(false);
        }
        public static bool Matched <TPlaceholderValue>(
            this ITreeNode treeNode,
            string pattern,
            StructuralSearchEngine structuralSearchEngine,
            out TPlaceholderValue placeholderValue)
            where TPlaceholderValue : class
        {
            placeholderValue = null;

            bool matched = Matched(
                treeNode,
                pattern,
                structuralSearchEngine,
                1 /* placeholdersCount */,
                out IStructuralMatchResult matchResult,
                out List <string> orderedPlaceholderNames
                );

            if (matched)
            {
                placeholderValue = GetPlaceholderMatchedValue <TPlaceholderValue>(matchResult, orderedPlaceholderNames[0]);
                if (placeholderValue == null)
                {
                    return(false);
                }

                return(true);
            }

            return(false);
        }
        public static IStructuralMatcher CreateMatcherWithPlaceholdersBindingObject(
            this StructuralSearchEngine structuralSearchEngine,
            string pattern,
            PsiLanguageType languageType,
            Type placeholdersBindingObjectType,
            IPlaceholder[] additionalPlaceholders = null)
        {
            IStructuralSearcherFactory factory = structuralSearchEngine.GetFactory(languageType);

            List <IPlaceholder> placeholders =
                GetPlaceholdersFromBindingObjectType(placeholdersBindingObjectType);

            if (additionalPlaceholders != null)
            {
                placeholders.AddRange(placeholders);
            }

            return(factory.CreatePattern(pattern, placeholders.ToArray()).CreateMatcher());
        }
        private IExpression ParseEnumerableRecursive(IExpression enumerableExpression)
        {
            IExpression result = enumerableExpression;

            StructuralSearchEngine sse = this.DataProvider.Solution.GetComponent <StructuralSearchEngine>();

            IExpression enu;
            ILambdaParameterDeclaration x;
            IExpression exp;

            if (enumerableExpression.Matched("$enu$.Select($x$ => $exp$)", sse, out enu, out x, out exp))
            {
                result = ParseEnumerableRecursive(enu);
                _linqExpressions.Add(new SelectLinqExpression(x, exp));
            }

            if (enumerableExpression.Matched("$enu$.Where($x$ => $arg$)", sse, out enu, out x, out exp))
            {
                result = ParseEnumerableRecursive(enu);
                _linqExpressions.Add(new WhereLinqExpression(x, exp));
            }

            return(result);
        }
 public DictionaryContainsKeyIfStatementProblemAnalyzer(StructuralSearchEngine ssr)
 {
 }
Exemple #7
0
 public DictionaryContainsKeyConditionalTernaryExpressionProblemAnalyzer(StructuralSearchEngine ssr)
 {
 }