コード例 #1
0
        /// <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()
                       ));
        }
コード例 #2
0
        /// <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()
                       ));
        }
コード例 #3
0
		/// <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());
		}
コード例 #4
0
        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)
        );
    }
コード例 #6
0
        /// <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;
 }
コード例 #8
0
        /// <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);
 }