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); }
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); }
// 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))); }