public IPsiSourceFileProperties GetPsiProperties(IPsiSourceFileProperties prevProperties, IProject project,
                                                         IProjectFile projectFile, IPsiSourceFile sourceFile)
        {
            using (ReadLockCookie.Create())
            {
                // R# already has a helper method to recognise the SFI project - IsVCXMiscProjectInVs2015
                if (prevProperties != null && prevProperties.ShouldBuildPsi &&
                    prevProperties.ProvidesCodeModel &&
                    !(sourceFile is IExternalPsiSourceFile) &&
                    project.IsVCXMiscProjectInVs2015() &&
                    projectFile.LanguageType.Is <ShaderLabProjectFileType>())
                {
                    return(ExcludedProjectPsiSourceFilePropertiesProvider.ExcludedProjectPsiSourceFileProperties
                           .Instance);
                }
            }

            return(prevProperties);
        }
Esempio n. 2
0
        public IPsiSourceFileProperties GetPsiProperties(
            IPsiSourceFileProperties prevProperties,
            IProject project,
            IPsiSourceFileWithLocation sourceFile
            )
        {
            var projectFile = sourceFile.ToProjectFile();

            if (projectFile == null)
            {
                return(prevProperties);
            }
            var checker = sourceFile.GetSolution().GetComponent <IT4TargetFileChecker>();

            if (checker.IsPreprocessResult(projectFile))
            {
                return(T4PreprocessResultProjectFileProperties.Instance);
            }
            return(prevProperties);
        }
Esempio n. 3
0
        // The PropertiesFactory passed to PsiSourceFileFromPath is called on EVERY access to IPsiSourceFile.Properties.
        // This function allows us to create a single instance for each file. The cache variable (as well as the func
        // parameter) are captured into a closure class. When the closure's is invoked, we can populate and return the
        // cached value
        private static Func <IPsiSourceFile, IPsiSourceFileProperties> Memoize(Func <IPsiSourceFile, IPsiSourceFileProperties> func)
        {
            IPsiSourceFileProperties cache = null;

            return(sf => cache ?? (cache = func(sf)));
        }