コード例 #1
0
        /// <summary>
        /// Processes changes for specific project file and returns a list of corresponding source file changes.
        /// </summary>
        /// <param name="projectFile">The project file.</param>
        /// <param name="changeType">Type of the change.</param>
        /// <param name="changeBuilder">The change builder used to populate changes.</param>
        /// <returns>Whether the provider has handled the file change.</returns>
        internal bool OnProjectFileChanged(IProjectFile projectFile, ref PsiModuleChange.ChangeType changeType, PsiModuleChangeBuilder changeBuilder)
        {
            if (!_t4Environment.IsSupported)
                return false;

            _shellLocks.AssertWriteAccessAllowed();
            ModuleWrapper moduleWrapper;

            switch (changeType) {

                case PsiModuleChange.ChangeType.Added:
                    // Preprocessed .tt files should be handled by R# itself as if it's a normal project file,
                    // so that it has access to the current project types.
                    if (projectFile.LanguageType.Is<T4ProjectFileType>() && !projectFile.IsPreprocessedT4Template()) {
                        AddFile(projectFile, changeBuilder);
                        return true;
                    }
                    break;

                case PsiModuleChange.ChangeType.Removed:
                    if (_modules.TryGetValue(projectFile, out moduleWrapper)) {
                        RemoveFile(projectFile, changeBuilder, moduleWrapper);
                        return true;
                    }
                    break;

                case PsiModuleChange.ChangeType.Modified:
                    if (_modules.TryGetValue(projectFile, out moduleWrapper)) {
                        if (!projectFile.IsPreprocessedT4Template()) {
                            ModifyFile(changeBuilder, moduleWrapper);
                            return true;
                        }

                        // The T4 file went from Transformed to Preprocessed, it doesn't need a T4PsiModule anymore.
                        RemoveFile(projectFile, changeBuilder, moduleWrapper);
                        changeType = PsiModuleChange.ChangeType.Added;
                        return false;
                    }

                    // The T4 file went from Preprocessed to Transformed, it now needs a T4PsiModule.
                    if (projectFile.LanguageType.Is<T4ProjectFileType>() && !projectFile.IsPreprocessedT4Template()) {
                        AddFile(projectFile, changeBuilder);
                        changeType = PsiModuleChange.ChangeType.Removed;
                        return false;
                    }

                    break;

            }

            return false;
        }
コード例 #2
0
 public void OnProjectFileChanged(IProjectFile projectFile, PsiModuleChange.ChangeType changeType, PsiModuleChangeBuilder changeBuilder)
 {
     _t4PsiModuleProvider.OnProjectFileChanged(projectFile, ref changeType, changeBuilder);
 }
コード例 #3
0
 public override void OnProjectFileChanged(IProjectFile projectFile, FileSystemPath oldLocation, PsiModuleChange.ChangeType changeType, PsiModuleChangeBuilder changeBuilder)
 {
     if (!_t4PsiModuleProvider.OnProjectFileChanged(projectFile, ref changeType, changeBuilder))
         base.OnProjectFileChanged(projectFile, oldLocation, changeType, changeBuilder);
 }
コード例 #4
0
		public void OnProjectFileChanged(IProjectFile projectFile, PsiModuleChange.ChangeType changeType, PsiModuleChangeBuilder changeBuilder, FileSystemPath oldLocation) {
			_t4PsiModuleProvider.OnProjectFileChanged(projectFile, ref changeType, changeBuilder);
		}