コード例 #1
0
ファイル: T4PsiModule.cs プロジェクト: troshko111/ForTea
        /// <summary>
        /// Resolves new VS macros, like $(SolutionDir), found in include or assembly directives.
        /// </summary>
        /// <param name="macros">The list of macro names (eg SolutionDir) to resolve.</param>
        /// <returns>Whether at least one macro has been processed.</returns>
        private bool ResolveMacros([NotNull] IEnumerable <string> macros)
        {
            bool hasChanges = false;

            IVsBuildMacroInfo vsBuildMacroInfo = null;

            foreach (string addedMacro in macros)
            {
                if (vsBuildMacroInfo == null)
                {
                    vsBuildMacroInfo = TryGetVsBuildMacroInfo();
                    if (vsBuildMacroInfo == null)
                    {
                        break;
                    }
                }

                hasChanges = true;

                string value;
                bool   succeeded = HResultHelpers.SUCCEEDED(vsBuildMacroInfo.GetBuildMacroValue(addedMacro, out value)) && !String.IsNullOrEmpty(value);
                lock (_resolvedMacros) {
                    if (succeeded)
                    {
                        _resolvedMacros[addedMacro] = value;
                    }
                    else
                    {
                        _resolvedMacros.Remove(addedMacro);
                    }
                }
            }
            return(hasChanges);
        }
コード例 #2
0
        private string ExpandVsMacroVariables(string input)
        {
            IVsBuildMacroInfo buildMacroInfo = this.hierarchy as IVsBuildMacroInfo;

            if (buildMacroInfo == null)
            {
                return(input);
            }
            MatchEvaluator evaluator = delegate(Match m) {
                string str;
                Group  group = m.Groups["macroName"];
                if ((group.Success && ErrorHandler.Succeeded(buildMacroInfo.GetBuildMacroValue(group.Value, out str))) && !string.IsNullOrEmpty(str))
                {
                    return(str);
                }
                return(m.Value);
            };

            return(vsMacroRegEx.Replace(input, evaluator));
        }
コード例 #3
0
ファイル: T4PsiModule.cs プロジェクト: robyvandamme/ForTea
        /// <summary>
        /// Resolves new VS macros, like $(SolutionDir), found in include or assembly directives.
        /// </summary>
        /// <param name="macros">The list of macro names (eg SolutionDir) to resolve.</param>
        /// <returns>Whether at least one macro has been processed.</returns>
        private bool ResolveMacros([NotNull] IEnumerable <string> macros)
        {
            bool hasChanges = false;

            IVsBuildMacroInfo vsBuildMacroInfo = null;

            foreach (string addedMacro in macros)
            {
                if (vsBuildMacroInfo == null)
                {
                    vsBuildMacroInfo = TryGetVsBuildMacroInfo();
                    if (vsBuildMacroInfo == null)
                    {
                        Logger.LogError("Couldn't get IVsBuildMacroInfo");
                        break;
                    }
                }

                hasChanges = true;

                string value;
                bool   succeeded = HResultHelpers.SUCCEEDED(vsBuildMacroInfo.GetBuildMacroValue(addedMacro, out value)) && !String.IsNullOrEmpty(value);
                if (!succeeded)
                {
                    value     = MSBuildExtensions.GetStringValue(TryGetVsHierarchy(), addedMacro, null);
                    succeeded = !String.IsNullOrEmpty(value);
                }

                lock (_resolvedMacros) {
                    if (succeeded)
                    {
                        _resolvedMacros[addedMacro] = value;
                    }
                    else
                    {
                        _resolvedMacros.Remove(addedMacro);
                    }
                }
            }
            return(hasChanges);
        }