/// <summary>Generates a C# file from a T4 file.</summary> /// <param name="modificationInfo">The modifications that occurred in the T4 file.</param> public override ISecondaryDocumentGenerationResult Generate(PrimaryFileModificationInfo modificationInfo) { if (!(modificationInfo.NewPsiFile is IT4File t4File)) { return(null); } if (!T4DirectiveInfoManager.GetLanguageType(t4File).Is <CSharpLanguage>()) { return(null); } var result = T4CodeGeneration.GenerateCodeBehind(t4File); var csharpLanguageService = CSharpLanguage.Instance.LanguageService(); if (csharpLanguageService == null) { return(null); } return(new SecondaryDocumentGenerationResult( result.RawText, csharpLanguageService.LanguageType, new RangeTranslatorWithGeneratedRangeMap(result.GeneratedRangeMap), csharpLanguageService.GetPrimaryLexerFactory() )); }
/// <summary>Generates a C# file from a T4 file.</summary> /// <param name="modificationInfo">The modifications that occurred in the T4 file.</param> public override ISecondaryDocumentGenerationResult Generate(PrimaryFileModificationInfo modificationInfo) { if (!(modificationInfo.NewPsiFile is IT4File t4File)) { return(null); } var generator = new T4CSharpCodeGenerator(t4File, _directiveInfoManager); GenerationResult result = generator.Generate(); LanguageService csharpLanguageService = CSharpLanguage.Instance.LanguageService(); if (csharpLanguageService == null) { return(null); } var includedFiles = new OneToSetMap <FileSystemPath, FileSystemPath>(); includedFiles.AddRange(modificationInfo.SourceFile.GetLocation(), t4File.GetNonEmptyIncludePaths()); ISolution solution = modificationInfo.SourceFile.GetSolution(); var t4FileDependencyManager = solution.GetComponent <T4FileDependencyManager>(); return(new T4SecondaryDocumentGenerationResult( modificationInfo.SourceFile, result.Builder.ToString(), csharpLanguageService.LanguageType, new RangeTranslatorWithGeneratedRangeMap(result.GeneratedRangeMap), csharpLanguageService.GetPrimaryLexerFactory(), t4FileDependencyManager, t4File.GetNonEmptyIncludePaths() )); }
/// <summary> /// Generates a C# file from a T4 file. /// </summary> /// <param name="modificationInfo">The modifications that occurred in the T4 file.</param> public override ISecondaryDocumentGenerationResult Generate(PrimaryFileModificationInfo modificationInfo) { var t4File = modificationInfo.NewPsiFile as IT4File; if (t4File == null) return null; var generator = new T4CSharpCodeGenerator(t4File, _directiveInfoManager); GenerationResult result = generator.Generate(); LanguageService csharpLanguageService = CSharpLanguage.Instance.LanguageService(); if (csharpLanguageService == null) return null; var includedFiles = new OneToSetMap<FileSystemPath, FileSystemPath>(); includedFiles.AddRange(modificationInfo.SourceFile.GetLocation(), t4File.GetNonEmptyIncludePaths()); ISolution solution = modificationInfo.SourceFile.GetSolution(); var t4FileDependencyManager = solution.GetComponent<T4FileDependencyManager>(); return new T4SecondaryDocumentGenerationResult( modificationInfo.SourceFile, result.Builder.ToString(), csharpLanguageService.LanguageType, new RangeTranslatorWithGeneratedRangeMap(result.GeneratedRangeMap), csharpLanguageService.GetPrimaryLexerFactory(), t4FileDependencyManager, t4File.GetNonEmptyIncludePaths()); }
public override ISecondaryDocumentGenerationResult Generate(PrimaryFileModificationInfo modificationInfo) { var psiFile = modificationInfo.NewPsiFile as IPsiFile; PsiLanguageType language = psiFile != null ? psiFile.Language : PsiLanguage.Instance; var gen = new CSharpFromPsiGenerator(); GenerationResults result = gen.Generate(psiFile); return(new SecondaryDocumentGenerationResult( result.Text.ToString(), CSharpLanguage.Instance, new RangeTranslatorWithGeneratedRangeMap(result.GeneratedRangeMap), LexerFactoryWithPreprocessor(language) )); }
public ISecondaryDocumentGenerationResult Generate(PrimaryFileModificationInfo modificationInfo) { var sourceFile = modificationInfo.SourceFile; var psiFile = modificationInfo.NewPsiFile as IPsiFile; PsiLanguageType language = psiFile != null ? psiFile.Language : PsiLanguage.Instance; var gen = new CSharpFromPsiGenerator(); GenerationResults result = gen.Generate(psiFile); return new SecondaryDocumentGenerationResult( sourceFile, result.Text.ToString(), CSharpLanguage.Instance, new RangeTranslatorWithGeneratedRangeMap(result.GeneratedRangeMap), LexerFactoryWithPreprocessor(language) ); }
/// <summary> /// The process of generated document commit (in the case of primary document incremental reparse) can be overridden in this method. /// Returns null if full regeneration is required. /// This method is not allowed to do destructive changes due to interruptibility! /// </summary> public override ICollection<IPreCommitResult> ExecuteSecondaryDocumentCommitWork(PrimaryFileModificationInfo primaryFileModificationInfo, CachedPsiFile cachedPsiFile, TreeTextRange oldTreeRange, string newText) { var rangeTranslator = (RangeTranslatorWithGeneratedRangeMap) cachedPsiFile.PsiFile.SecondaryRangeTranslator; if (rangeTranslator == null) return null; TreeTextRange range = rangeTranslator.OriginalToGenerated(oldTreeRange, JetPredicate<IUserDataHolder>.True); DocumentRange documentRange = cachedPsiFile.PsiFile.DocumentRangeTranslator.Translate(range); if (!documentRange.IsValid()) return null; var documentChange = new DocumentChange(documentRange.Document, documentRange.TextRange.StartOffset, documentRange.TextRange.Length, newText, documentRange.Document.LastModificationStamp, TextModificationSide.NotSpecified); return new IPreCommitResult[] { new PreCommitResult(cachedPsiFile.WorkIncrementalParse(documentChange), null, documentChange, null, TextRange.InvalidRange, string.Empty), new FixRangeTranslatorsOnSharedRangeCommitResult(rangeTranslator, null, new TreeTextRange<Original>(oldTreeRange), new TreeTextRange<Generated>(range), newText) }; }
public ICollection<IPreCommitResult> ExecuteSecondaryDocumentCommitWork(PrimaryFileModificationInfo primaryFileModificationInfo, CachedPsiFile cachedPsiFile, TreeTextRange oldTreeRange, string newText) { return null; }
/// <summary> /// The process of generated document commit (in the case of primary document incremental reparse) can be overridden in this method. /// Returns null if full regeneration is required. /// This method is not allowed to do destructive changes due to interruptibility! /// </summary> public override ICollection <IPreCommitResult> ExecuteSecondaryDocumentCommitWork(PrimaryFileModificationInfo primaryFileModificationInfo, CachedPsiFile cachedPsiFile, TreeTextRange oldTreeRange, string newText) { var rangeTranslator = (RangeTranslatorWithGeneratedRangeMap)cachedPsiFile.PsiFile.SecondaryRangeTranslator; if (rangeTranslator == null) { return(null); } TreeTextRange range = rangeTranslator.OriginalToGenerated(oldTreeRange, JetPredicate <IUserDataHolder> .True); DocumentRange documentRange = cachedPsiFile.PsiFile.DocumentRangeTranslator.Translate(range); if (!documentRange.IsValid()) { return(null); } var documentChange = new DocumentChange(documentRange.Document, documentRange.TextRange.StartOffset, documentRange.TextRange.Length, newText, documentRange.Document.LastModificationStamp, TextModificationSide.NotSpecified); return(new IPreCommitResult[] { new PreCommitResult(cachedPsiFile.WorkIncrementalParse(documentChange), null, documentChange, null, TextRange.InvalidRange, string.Empty), new FixRangeTranslatorsOnSharedRangeCommitResult(rangeTranslator, null, new TreeTextRange <Original>(oldTreeRange), new TreeTextRange <Generated>(range), newText) }); }
public ICollection <IPreCommitResult> ExecuteSecondaryDocumentCommitWork(PrimaryFileModificationInfo primaryFileModificationInfo, CachedPsiFile cachedPsiFile, TreeTextRange oldTreeRange, string newText) { return(null); }