public IEnumerable <T4AssemblyReferenceInfo> ExtractReferenceLocationsTransitive(IT4File file)
        {
            file.AssertContainsNoIncludeContext();
            var sourceFile  = file.PhysicalPsiSourceFile.NotNull();
            var projectFile = sourceFile.ToProjectFile().NotNull();
            var directives  = file.GetThisAndIncludedFilesRecursive()
                              .SelectMany(it => it.Blocks)
                              .OfType <IT4AssemblyDirective>();
            var errors             = new FrugalLocalList <T4FailureRawData>();
            var directDependencies = directives.SelectNotNull(
                directive =>
            {
                var resolved = AssemblyReferenceResolver.Resolve(directive);
                if (resolved == null)
                {
                    errors.Add(T4FailureRawData.FromElement(directive, "Unresolved assembly reference"));
                }

                return(resolved);
            }
                ).AsList();

            if (!errors.IsEmpty)
            {
                throw new T4OutputGenerationException(errors);
            }
            AddBaseReferences(directDependencies, file);
            return(LowLevelReferenceExtractionManager.ResolveTransitiveDependencies(
                       directDependencies,
                       projectFile.SelectResolveContext()
                       ));
        }
Beispiel #2
0
 public IEnumerable <MetadataReference> ExtractPortableReferencesForCompilation(
     Lifetime lifetime,
     IT4File file
     ) => ExtractPortableReferencesForResolve(lifetime, file)
 .Concat(Environment
         .AdditionalCompilationAssemblyLocations
         .Select(location =>
                 LowLevelReferenceExtractionManager.ResolveMetadata(lifetime, location)
                 )
         );
Beispiel #3
0
        public IEnumerable <T4AssemblyReferenceInfo> ExtractReferenceLocationsTransitive(IT4File file)
        {
            var directDependencies = ExtractReferenceLocations(file);
            var sourceFile         = file.PhysicalPsiSourceFile.NotNull();
            var projectFile        = sourceFile.ToProjectFile().NotNull();

            return(LowLevelReferenceExtractionManager.ResolveTransitiveDependencies(
                       directDependencies,
                       projectFile.SelectResolveContext()
                       ));
        }
Beispiel #4
0
 public IEnumerable <MetadataReference> ExtractPortableReferences(Lifetime lifetime, IT4File file) =>
 ExtractReferenceLocations(file)
 .Select(location => LowLevelReferenceExtractionManager.ResolveMetadata(lifetime, location))
 .AsList();
 public IEnumerable <MetadataReference> ExtractPortableReferencesTransitive(Lifetime lifetime, IT4File file) =>
 ExtractReferenceLocationsTransitive(file)
 .Select(info => LowLevelReferenceExtractionManager.ResolveMetadata(lifetime, info.Location))
 .AsList();