Ejemplo n.º 1
0
    public void ExportDependency(string resultdir, DependencyInfo dependencyInfo)
    {
        if (
            (null == dependencyInfo) ||
            string.IsNullOrEmpty(resultdir)
            )
        {
            return;
        }

        List <string> csvData = null;

        resultdir = resultdir + "正向引用_" + DateTime.Now.ToString(m_dataFormat) + @"/";

        foreach (var infoItem in dependencyInfo.DependencyInfoTbl)
        {
            AnalyseDependencyInfo(infoItem, out csvData);

            WriteDependencyCSVFile(resultdir, infoItem.Key, csvData);

            if (csvData != null)
            {
                csvData.Clear();
            }
        }
    }
Ejemplo n.º 2
0
    private static UnityEngine.Object ToObject(SearchItem item, Type type)
    {
        if (s_CurrentDependencyInfo)
        {
            ScriptableObject.DestroyImmediate(s_CurrentDependencyInfo);
        }
        s_CurrentDependencyInfo      = ScriptableObject.CreateInstance <DependencyInfo>();
        s_CurrentDependencyInfo.guid = item.id;
        using (var context = SearchService.CreateContext(new string[] { providerId }, $"from:{item.id}"))
        {
            foreach (var r in SearchService.GetItems(context, SearchFlags.Synchronous))
            {
                var assetPath = AssetDatabase.GUIDToAssetPath(r.id);
                if (string.IsNullOrEmpty(assetPath))
                {
                    s_CurrentDependencyInfo.broken.Add(r.id);
                }
                else
                {
                    var ur = AssetDatabase.LoadMainAssetAtPath(assetPath);
                    if (ur != null)
                    {
                        [email protected](ur);
                    }
                    else
                    {
                        s_CurrentDependencyInfo.untracked.Add($"{assetPath} ({r.id})");
                    }
                }
            }
        }

        using (var context = SearchService.CreateContext(new string[] { providerId }, $"to:{item.id}"))
        {
            foreach (var r in SearchService.GetItems(context, SearchFlags.Synchronous))
            {
                var assetPath = AssetDatabase.GUIDToAssetPath(r.id);
                if (string.IsNullOrEmpty(assetPath))
                {
                    s_CurrentDependencyInfo.broken.Add(r.id);
                }
                else
                {
                    {
                        var ur = AssetDatabase.LoadMainAssetAtPath(assetPath);
                        if (ur != null)
                        {
                            s_CurrentDependencyInfo.usedBy.Add(ur);
                        }
                        else
                        {
                            s_CurrentDependencyInfo.untracked.Add($"{assetPath} ({r.id})");
                        }
                    }
                }
            }
        }

        return(s_CurrentDependencyInfo);
    }
Ejemplo n.º 3
0
        private string GetStatusText(DependencyInfo dependency)
        {
            var installedVersion = m_PackageDatabase.GetPackage(dependency.name)?.versions.installed;

            if (installedVersion == null)
            {
                return(string.Empty);
            }

            if (installedVersion.HasTag(PackageTag.InDevelopment))
            {
                return(L10n.Tr("(in development)"));
            }

            if (installedVersion.HasTag(PackageTag.Local))
            {
                return(L10n.Tr("(local)"));
            }

            var statusText = installedVersion.HasTag(PackageTag.BuiltIn)
                ? L10n.Tr("enabled") : L10n.Tr("installed");

            return(installedVersion.version?.ToString() == dependency.version
                ? string.Format("({0})", statusText) : string.Format("({0} {1})", installedVersion.version, statusText));
        }
Ejemplo n.º 4
0
        private static string GetStatusText(DependencyInfo dependency)
        {
            var installedVersion = PackageDatabase.instance.GetPackage(dependency.name)?.versions.installed;

            if (installedVersion == null)
            {
                return(string.Empty);
            }

            if (installedVersion.HasTag(PackageTag.InDevelopment))
            {
                return(ApplicationUtil.instance.GetTranslationForText("(in development)"));
            }

            if (installedVersion.HasTag(PackageTag.Local))
            {
                return(ApplicationUtil.instance.GetTranslationForText("(local)"));
            }

            var statusText = installedVersion.HasTag(PackageTag.BuiltIn)
                ? ApplicationUtil.instance.GetTranslationForText("enabled") : ApplicationUtil.instance.GetTranslationForText("installed");

            return(installedVersion.version?.ToString() == dependency.version
                ? string.Format("({0} \u2714)", statusText) : string.Format("({0} {1} \u2714)", installedVersion.version, statusText));
        }
Ejemplo n.º 5
0
        private static void ValidateDependency(DependencyInfo dep, string paramName)
        {
            if (dep == null)
            {
                throw new ArgumentException($"{nameof(DependencyInfo)} can not be null.", paramName);
            }

            if (string.IsNullOrEmpty(dep.FileName))
            {
                throw new ArgumentException($"{nameof(DependencyInfo)}.{nameof(DependencyInfo.FileName)} can not be null or empty.", paramName);
            }

            if (string.IsNullOrEmpty(dep.Text))
            {
                throw new ArgumentException($"{nameof(DependencyInfo)}.{nameof(DependencyInfo.Text)} can not be null or empty.", paramName);
            }

            if (dep.Source == null)
            {
                throw new ArgumentException($"{nameof(DependencyInfo)}.{nameof(DependencyInfo.Source)} can not be null.", paramName);
            }

            if (dep.Target == null)
            {
                throw new ArgumentException($"{nameof(DependencyInfo)}.{nameof(DependencyInfo.Target)} can not be null.", paramName);
            }
        }
Ejemplo n.º 6
0
        private List <DependencyGroup> CreateDependencyGroups(IEnumerable <ProjectContext> projectContexts)
        {
            var libraryNameDependencyGroupMap = new Dictionary <string, DependencyGroup>();

            foreach (var projectContext in projectContexts)
            {
                var libraries = projectContext.LibraryManager.GetLibraries();

                foreach (var library in libraries)
                {
                    var dependencyInfo = DependencyInfo.Create(projectContext, library);

                    if (libraryNameDependencyGroupMap.ContainsKey(dependencyInfo.Name))
                    {
                        var dependencyGroup = libraryNameDependencyGroupMap[dependencyInfo.Name];

                        dependencyGroup.AddEntry(dependencyInfo);
                    }
                    else
                    {
                        var dependencyGroup = DependencyGroup.CreateWithEntry(dependencyInfo);

                        libraryNameDependencyGroupMap[dependencyInfo.Name] = dependencyGroup;
                    }
                }
            }

            return(libraryNameDependencyGroupMap.Values.ToList());
        }
Ejemplo n.º 7
0
        private static void AddDependenciesInfo(string bundleName, string relativePath, ref DependenciesInfo info,
                                                ref ReservedSharedBundleInfo reserved, ref DependencyCache cache)
        {
            var dependencies = CollectDependencies(relativePath, ref cache);
            var deps         = dependencies.ToList();

            deps.Add(relativePath);

            foreach (var dependency in deps)
            {
                if (!info.ContainsKey(dependency))
                {
                    info[dependency] = new DependencyInfo();
                }

                if (IsShader(dependency))
                {
                    if (BundlerBuildSettings.kSeparateShaderBundle)
                    {
                        info[dependency].referenceInBundles.Add(BundlerBuildSettings.kSeparatedShaderBundleName);
                        reserved[dependency] = BundlerBuildSettings.kSeparatedShaderBundleName;
                    }
                }
                info[dependency].referenceInBundles.Add(bundleName);
            }
        }
Ejemplo n.º 8
0
        public MockPackageVersion(string name)
        {
            this.name            = name;
            version              = new SemVersion(1, 0, 0);
            source               = PackageSource.Embedded;
            displayName          = $"Mock Package {name}";
            author               = "Mock Author";
            description          = "Mock Description";
            packageUniqueId      = "123";
            dependencies         = new DependencyInfo[0];
            resolvedDependencies = new DependencyInfo[0];
#if UNITY_2020_1_OR_NEWER
            errors = new List <UIError>();
#else
            errors = new List <Error>();
#endif
            samples            = new List <Sample>();
            datePublished      = DateTime.Now;
            isInstalled        = true;
            isFullyFetched     = true;
            isUserVisible      = true;
            isAvailableOnDisk  = true;
            isVersionLocked    = false;
            canBeEmbedded      = false;
            canBeRemoved       = true;
            isDirectDependency = true;
        }
Ejemplo n.º 9
0
        private void UpdateDependencies(List <Dependency> updatedDependencies = null)
        {
            _repoPath             = Path.Combine(Application.dataPath, "Repositories");
            _rootDependenciesFile = Path.Combine(_repoPath, "Dependencies.json");

            //Ensure to create directory structure and default dependencies if nothing exists
            Directory.CreateDirectory(_repoPath);
            if (!File.Exists(_rootDependenciesFile))
            {
                File.WriteAllText(_rootDependenciesFile, JsonUtility.ToJson(new DependencyInfo(), true));
            }
            string json = File.ReadAllText(_rootDependenciesFile);

            _dependencies = JsonUtility.FromJson <DependencyInfo>(json);

            //Sync file dependencies with in memory dependencies
            if (updatedDependencies != null)
            {
                //Remove no longer existing
                for (int i = _dependencies.Dependencies.Count - 1; i >= 0; i--)
                {
                    var dep = _dependencies.Dependencies[i];
                    if (updatedDependencies.FindAll(d => d.Url == dep.Url).Count <= 0)
                    {
                        _dependencies.Dependencies.RemoveAt(i);
                    }
                }

                //Add new
                foreach (var dep in updatedDependencies)
                {
                    if (_dependencies.Dependencies.FindAll(d => d.Url == dep.Url).Count <= 0)
                    {
                        _dependencies.Dependencies.Add(dep);
                    }
                }

                json = JsonUtility.ToJson(_dependencies, true);
                File.WriteAllText(_rootDependenciesFile, json);
            }

            //Update repo panels
            _repoPanels = new List <RepoPanel>();
            foreach (Dependency dependency in _dependencies.Dependencies)
            {
                if (_repoPanels.FindAll(p => dependency.Url == p.DependencyInfo.Url).Count == 0)
                {
                    RepoPanel panel = new RepoPanel(_repoPath, dependency, GetPlatformAuthentication());
                    panel.OnRemovalRequested      += OnPanelRemovalRequested;
                    panel.OnDeleteAssetsRequested += DeleteAssets;
                    panel.OnCopyFinished          += (assets, updatedRepos) =>
                    {
                        UpdateAssetDatabaseForNewAssets(assets, EditorPrefs.GetBool(FULL_RE_IMPORT_KEY, true), updatedRepos);
                    };
                    _repoPanels.Add(panel);
                }
            }
            Repaint();
        }
            public IPackageVersion GetPackageVersion(DependencyInfo info)
            {
                IPackage        package;
                IPackageVersion version;

                GetUpmPackageAndVersion(info.name, info.version, out package, out version);
                return(version);
            }
        public void Equals_WithEdgeCases_Works()
        {
            var target = new DependencyInfo();

            Assert.AreEqual(target, target);
            Assert.IsFalse(target.Equals(null));
            Assert.IsFalse(target.Equals(this));
        }
Ejemplo n.º 12
0
        void MarkAndPreserve(AssemblyDefinition assembly, ExportedType type, TypePreserveMembers preserve)
        {
            var di = new DependencyInfo(DependencyKind.RootAssembly, assembly);

            Context.Annotations.Mark(type, di);
            Context.Annotations.Mark(assembly.MainModule, di);
            Annotations.SetMembersPreserve(type, preserve);
        }
 public void GetHashCode_Works(DependencyInfo a, DependencyInfo b, bool areSame)
 {
     // in case instances are not equals, hashcodes still can collide
     // so we don't Assert that they are different
     if (areSame)
     {
         Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
     }
 }
        public void GetNumWorkersToScaleWith_GivenDependencyWithHalfCapacityAndNoWorkflow_ScalesByDependencyValuesAndATenth()
        {
            var numWorkersRequired    = 100;
            var expectedScalingFactor = 0.1;
            var dependency            = new DependencyInfo(true, 50);

            var result = Utilities.GetNumWorkersToScaleWith(numWorkersRequired, "whatever", dependency, new List <string>());

            result.Should().Be((int)(numWorkersRequired * expectedScalingFactor * (dependency.PercentAvailableResources * .01)));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Registers an instance type
        /// </summary>
        /// <typeparam name="TContract"></typeparam>
        /// <param name="instance"></param>
        public void Register <TContract>(TContract instance)
        {
            if (typeof(TContract) == typeof(Type))
            {
                throw new ArgumentException("Cannot register the Type type as a contract.");
            }

            dependencies[typeof(TContract)] = new DependencyInfo(DependencyType.Instance, instance);
            instances[typeof(TContract)]    = instance;
        }
        private string BuildNameText(DependencyInfo dependency)
        {
            var packageInfo = Collection.LatestSearchPackages.FirstOrDefault(p => p.Name == dependency.name);

            if (packageInfo != null)
            {
                return(packageInfo.DisplayName);
            }

            return(dependency.name);
        }
        private void DependencyResolvedHandler(DependencyInfo dependency)
        {
            if (this.resolvedDependencies.ContainsKey(dependency.Name) == true)
            {
                return;
            }

            this.resolvedDependencies[dependency.Name] = dependency.Value;

            this.ContinueReadyConfiguration();
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Registers a concrete type
        /// </summary>
        /// <param name="type"></param>
        /// <param name="isSingleton"></param>
        public void Register(Type type, bool isSingleton)
        {
            if (type.IsInterface || type.IsAbstract)
            {
                throw new ArgumentException("Must register a concrete implementation.");
            }

            DependencyType dependencyType = isSingleton ? DependencyType.Singleton : DependencyType.Transient;

            dependencies[type] = new DependencyInfo(dependencyType, type);
        }
 public static string GetVersionText(DependencyInfo dependency, IPackage package)
 {
     if (package == null || package.Is(PackageType.Feature))
     {
         return(string.Empty);
     }
     if (package.Is(PackageType.BuiltIn))
     {
         return("---");
     }
     return(dependency.version);
 }
        public void GetNumWorkersToScaleWith_GivenDependencyWithHalfCapacityAndPlaceInAWorkflow_ScalesByDependencyValuesAndWorkflowPosition()
        {
            var numWorkersRequired = 100;
            var workflow           = new List <string> {
                "A", "B", "C"
            };
            var dependency = new DependencyInfo(true, 50);

            var result = Utilities.GetNumWorkersToScaleWith(numWorkersRequired, "B", dependency, workflow);

            result.Should().Be(34);
        }
Ejemplo n.º 21
0
    protected override void OnSetBelong()
    {
        var dep = dependencies.GetValue();

        if (dep != null)
        {
            var array = dep as Array;
            foreach (var item in array)
            {
                DependencyInfo info = new DependencyInfo(item.GetType());
                info.SetInstance(item);
            }
        }
    }
Ejemplo n.º 22
0
        public List <string> GetDependentAssemblies(AssemblyInfo assembly)
        {
            SqlConnection conn = new SqlConnection(string.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI;", GlobalProperties.DatabaseServer, GlobalProperties.MgmtDBName));

            DependencyInfo             di         = new DependencyInfo();
            BizTalkAssemblyName        btsAssName = new BizTalkAssemblyName(assembly.Name, assembly.Version, assembly.Culture, assembly.PublicKeyToken);
            List <BizTalkAssemblyName> list       = di.GetUsedBy(conn, btsAssName);

            foreach (BizTalkAssemblyName assn in di.GetDependencyOrderedAssemblyNames(conn, list))
            {
                dependentAssemblies.Add(assn.FullName);
            }
            return(dependentAssemblies);
        }
        public void ToString_Contains()
        {
            var target = new DependencyInfo
            {
                Parent = new AssemblyInfo {
                    Name = "p", Version = "1"
                },
                Child = new AssemblyInfo {
                    Name = "c", Version = "1"
                },
            };
            var result = target.ToString();

            Assert.That(result.Contains(target.Parent.ToString()));
            Assert.That(result.Contains(target.Child.ToString()));
        }
Ejemplo n.º 24
0
        private void ScanFiles()
        {
            // If no includes were specified, add all files and subdirectories
            // from the fileset's base directory to the fileset.
            if ((FileSet.Includes.Count == 0) && (FileSet.AsIs.Count == 0))
            {
                FileSet.Includes.Add("**/*.dll");

                // Make sure to rescan the fileset
                FileSet.Scan();
            }

            AgentProjectInfo projectInfo = new AgentProjectInfo();

            if (String.IsNullOrEmpty(ProjectToken))
            {
                projectInfo.Coordinates = new Coordinates(null, Project.ProjectName, null);
            }
            else
            {
                projectInfo.ProjectToken = ProjectToken;
            }

            // scan files and calculate SHA-1 values
            List <DependencyInfo> dependencies = projectInfo.Dependencies;

            foreach (String pathname in FileSet.FileNames)
            {
                FileInfo srcInfo = new FileInfo(pathname);
                if (srcInfo.Exists)
                {
                    String sha1     = ChecksumUtils.GetSha1Hash(pathname);
                    String filename = srcInfo.Name;
                    Log(Level.Debug, "SHA-1 for " + filename + " is: " + sha1);

                    DependencyInfo dependency = new DependencyInfo();
                    dependency.Sha1       = sha1;
                    dependency.ArtifactId = filename;
                    dependency.SystemPath = pathname;
                    dependencies.Add(dependency);
                }
            }
            Log(Level.Info, "Found " + dependencies.Count + " direct dependencies");
            projects.Add(projectInfo);
        }
Ejemplo n.º 25
0
    public REFERENCE_ANALYSE_ERROR_TYPE AnalyseDependency(out DependencyInfo dependencyInfo)
    {
        REFERENCE_ANALYSE_ERROR_TYPE errorType = REFERENCE_ANALYSE_ERROR_TYPE.REFERENCE_ANALYSE_ERROR_NONE;

        dependencyInfo = new DependencyInfo();

        do
        {
            errorType = CheckDependencyInput();
            if (IsAnalserFailed(errorType))
            {
                break;
            }

            string configDir = UIAtlasEditorConfig.ReferenceResultPath;

            AtlasReferenceFilter filter = new AtlasReferenceFilter(configDir);

            List <string> assetPathTbl = GetAllAssetFilePath();

            AnnalyseReferenceProgresser.GetInstance().InitProgresser(assetPathTbl.Count, "正向引用导出中");
            int count = 1;

            foreach (var item in assetPathTbl)
            {
                AtlasReferenceInfo newInfo = null;

                if (
                    //YAMLAnalyser.IsAtlasPrefab(item)
                    !filter.CheckDependencyFilter(item)
                    )
                {
                    YAMLAnalyser.AnalyseAtlasReferenceInfo(item, out newInfo);
                    if (newInfo != null)
                    {
                        dependencyInfo.DependencyInfoTbl.Add(item, newInfo);
                    }
                }

                AnnalyseReferenceProgresser.GetInstance().UpdateProgress(count++);
            }
        } while (false);

        return(errorType);
    }
Ejemplo n.º 26
0
        public void Read_Single_ReturnsSingle()
        {
            var expected = new DependencyInfo
            {
                Parent = new AssemblyInfo {
                    Name = "parent", Version = "1.0"
                },
                Child = new AssemblyInfo {
                    Name = "child", Version = "1.0"
                },
                Distance = 1
            };
            var target = new IndirectDependencyGenerator();

            var result = target.Filter(new[] { expected }).ToArray();

            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(expected, result[0]);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Formats a direct dependency for the end user
        /// </summary>
        /// <param name="dep"></param>
        public void Log(DependencyInfo dep)
        {
            Assembly(dep.Parent);
            Separator();
            VisualDistance(dep.Distance);
            Separator();
            Assembly(dep.Child);
            Separator();

            using (The(Style.Primary, StyleGroup.Alternative))
            {
                output.Write(dep.Distance);
            }

            if (dep.Path.Count > 0)
            {
                Separator();
                using (The(Style.Primary))
                {
                    output.Write("(");
                }
            }

            foreach (var part in dep.Path)
            {
                Separator();
                Assembly(part);
            }

            if (dep.Path.Count > 0)
            {
                Separator();
                using (The(Style.Primary))
                {
                    output.Write(")");
                }
            }

            NewLine();
        }
Ejemplo n.º 28
0
        private static string GetStatusText(DependencyInfo dependency)
        {
            var installedVersion = PackageDatabase.instance.GetPackage(dependency.name)?.installedVersion;

            if (installedVersion == null)
            {
                return(string.Empty);
            }

            if (installedVersion.HasTag(PackageTag.InDevelopment))
            {
                return("(in development)");
            }

            if (installedVersion.HasTag(PackageTag.Local))
            {
                return("(local)");
            }

            return(installedVersion.version == dependency.version
                ? "(installed \u2714)" : $"({installedVersion.version} installed \u2714)");
        }
        private string BuildStatusText(DependencyInfo dependency)
        {
            SemVersion installedVersion;

            if (Collection.ProjectDependencies.TryGetValue(dependency.name, out installedVersion))
            {
                if (installedVersion == PackageCollection.EmbdeddedVersion)
                {
                    return("(in development)");
                }

                if (installedVersion == PackageCollection.LocalVersion)
                {
                    return("(local)");
                }

                return(installedVersion == dependency.version
                    ? "(installed \u2714)"
                    : string.Format("({0} installed \u2714)", installedVersion));
            }

            return(string.Empty);
        }
        public static string GetStatusText(DependencyInfo dependency, IPackageVersion installedVersion)
        {
            if (installedVersion == null)
            {
                return(string.Empty);
            }

            if (installedVersion.HasTag(PackageTag.Custom))
            {
                return(L10n.Tr("(custom)"));
            }

            if (installedVersion.HasTag(PackageTag.Local))
            {
                return(L10n.Tr("(local)"));
            }

            var statusText = installedVersion.HasTag(PackageTag.BuiltIn)
                ? L10n.Tr("enabled") : L10n.Tr("installed");

            return(installedVersion.version?.ToString() == dependency.version
                ? string.Format("({0})", statusText) : string.Format("({0} {1})", installedVersion.version, statusText));
        }
		private SourceCompilerResults compileCore(IProgressMonitor monitor) {
			var t0 = System.nanoTime();
			
			var results = new SourceCompilerResults();
			var hasErrors = false;
			var errorManager = new CodeErrorManager();
			var allFiles = parameters.AllFiles;
			Iterable<IFile> filesToCompile = null;
			
			try {
				monitor.beginTask("", 11);

				var deletedFiles = parameters.FilesToCompile
						.select(p => allFiles.getResource(p))
						.where(p => p == null || !p.exists())
						.select(p => allFiles.getProjectRelativeName(p)).toSet();
				var typesToCopy = Query.empty<TypeInfo>();

				// Get the files to compile
				if (parameters.FullBuild) {
					filesToCompile = allFiles.getAllResources().where(p => p.exists()).toList();
				} else {
					bool filteringDone = false;
					var referencingFiles = parameters.getDependencyInfo().getAllReferencingFiles(parameters.getFilesToCompile());
					if (parameters.ProgressiveBuild && deletedFiles.isEmpty()) {
						var referencedFiles = parameters.getDependencyInfo().getAllReferencedFiles(parameters.getFilesToCompile());
						referencedFiles = referencedFiles.except(parameters.getFilesToCompile());
						referencedFiles = referencedFiles.intersect(referencingFiles);
						
						// Progressive build only if referenced and referencing files do not intersect
						if (!referencedFiles.any()) {
							filesToCompile = parameters.FilesToCompile.select(p => allFiles.getResource(p)).where(p => p.exists()).toList();
							filteringDone = true;
						}
					}
					if (!filteringDone) {
						// Incremental build with dependencies
						filesToCompile = referencingFiles.select(p => allFiles.getResource(p)).where(p => p.exists()).toList();
					}
					
					var filesToKeep = allFiles.getAllProjectRelativeNames().except(referencingFiles);
					typesToCopy = filesToKeep.selectMany(p => parameters.DependencyInfo.getFileContents(p))
							.where(p => p.indexOf('$') == -1).select(p => parameters.TypeSystem.getType(p));
							
					Environment.trace(this, "keeping " + filesToKeep.count() + " files");
					Environment.trace(this, "ignoring " +
							(allFiles.getAllResources().count() - filesToCompile.count() - filesToKeep.count()) + " files");
				}
				Environment.trace(this, "compiling " + filesToCompile.count() + " files");
				monitor.worked(1);
				if (monitor.isCanceled()) {
					throw new InterruptedException();
				}

				var compilationUnits = new HashMap<String, CompilationUnitNode>();
				
				// Parsing
				foreach (var file in filesToCompile) {
					var text = getText(file);
					if (text != null) {
						parse(file, text, errorManager, compilationUnits);
					}
				}
				monitor.worked(1);
				if (monitor.isCanceled()) {
					throw new InterruptedException();
				}
				
				// Compiling
				var t1 = System.nanoTime();
				
				var typeSystem = new Library(parameters.ClassPath);
				JvmTypeSystemHelper.cloneTypes(typesToCopy, typeSystem);
				
				var annotatedTypeSystem = new Library(new[] { Environment.getLibraryPath("stabal.jar") }, typeSystem);
				
				var cparams = new CompilerParameters();
				cparams.TypeSystem = typeSystem;
				cparams.AnnotatedTypeSystem = annotatedTypeSystem;
				cparams.GenerateClassFiles = parameters.GenerateClassFiles;
				cparams.ProgressTracker = new CompilationProgressTracker(monitor);
				
				var cunits = compilationUnits.values().toArray(new CompilationUnitNode[compilationUnits.size()]);
				var cresults = new StabCompiler().compileFromCompilationUnits(cparams, cunits);
				
				Environment.trace(this, "compilation of " + sizeof(cunits) + " files done in " + ((System.nanoTime() - t1) / 1e6) + "ms");

				foreach (var error in cresults.Errors) {
					if (error.Level == 0) {
						hasErrors = true;
					}
					results.CodeErrors.add(error);
					Environment.trace(this, "error (" + error.Line + ", " + error.Column + ") " + error.Filename + ": " + error.Message);
				}

				if (!hasErrors) {
					var dependencyInfo = new DependencyInfo();
					results.DependencyInfo = dependencyInfo;
					var allTypes = new HashSet<String>();
	
					// Copy informations from unbuilt files
					if (parameters.DependencyInfo != null) {
						var unbuiltFiles = allFiles.getAllProjectRelativeNames();
						unbuiltFiles = unbuiltFiles.except(filesToCompile.select(p => allFiles.getProjectRelativeName(p)));
						unbuiltFiles = unbuiltFiles.except(deletedFiles);
						foreach (var file in unbuiltFiles) {
							foreach (var type in parameters.DependencyInfo.getFileContents(file)) {
								allTypes.add(type);
								dependencyInfo.addFileToTypeRelation(file, type);
								foreach (var refType in parameters.DependencyInfo.getReferencedTypes(type)) {
									dependencyInfo.addTypeToTypeRelation(type, refType);
								}
							}
						}
					}
					
					// Collect the types and update the dependencies.
					var typeMembers = new HashMap<IFile, Iterable<TypeMemberNode>>();
					foreach (var file in filesToCompile) {
						var fileName = allFiles.getProjectRelativeName(file);
						var compilationUnit = compilationUnits[fileName];
						if (compilationUnit == null) {
							continue;
						}
						var members = SyntaxTreeHelper.getTypeMembers(compilationUnit);
						typeMembers.put(file, members);
						foreach (var member in members) {
							var typeName = member.getUserData(typeof(TypeInfo)).FullName;
							dependencyInfo.addFileToTypeRelation(fileName, typeName);
							allTypes.add(typeName);
						}
					}

					if (parameters.DependencyInfo != null) {
						// Copy the types ignored by this compilation
						var missingTypes = new HashSet<TypeInfo>();
						foreach (var t in allTypes.where(p => p.indexOf('$') == -1 && !typeSystem.typeExists(p))) {
							if (hasErrors = !parameters.DependencyInfo.getReferencedTypes(t).all(p => allTypes.contains(p))) {
								Environment.trace(this, "Incremental build failed: a type was deleted");
								break;
							}
							missingTypes.add(parameters.TypeSystem.getType(t));
						}
						if (!hasErrors) {
							JvmTypeSystemHelper.cloneTypes(missingTypes, typeSystem);
						}
					}
					
					if (!hasErrors) {
						// Compute the dependencies in the compiled files
						foreach (var member in filesToCompile.select(p => typeMembers[p]).where(p => p != null).selectMany(p => p)) {
							foreach (var t in SyntaxTreeHelper.getTypeMemberDependencies(member)
									.intersect(allTypes.select(p => JvmTypeSystemHelper.getType(typeSystem, p)))) {
								dependencyInfo.addTypeToTypeRelation(member.getUserData(typeof(TypeInfo)).FullName, t.FullName);
							}
						}
	
						results.TypeSystem = typeSystem;
						results.AnnotatedTypeSystem = annotatedTypeSystem;
						foreach (var e in compilationUnits.entrySet()) {
							results.CompilationUnits[e.Key] = e.Value;
						}
						foreach (var e in cresults.ClassFiles.entrySet()) {
							results.ClassFiles[e.Key] = e.Value;
						}
					}
				}
				monitor.worked(1);
			} catch (CodeErrorException e) {
				monitor.worked(10);
			} catch (TypeLoadException e) {
				results.MissingType = e.TypeName;
				hasErrors = true;
				monitor.worked(6);
			} finally {
				monitor.done();
			}

			foreach (var file in filesToCompile) {
				results.CompiledFiles.add(allFiles.getProjectRelativeName(file));
			}
			foreach (var error in errorManager.Errors) {
				if (error.Level == 0) {
					hasErrors = true;
				}
				results.CodeErrors.add(error);
				Environment.trace(this, "error (" + error.Line + ", " + error.Column + ") " + error.Filename + ": " + error.Message);
			}
			results.Failed = hasErrors;
			
			Environment.trace(this, "compilation done in " + ((System.nanoTime() - t0) / 1e6) + "ms");
			return results;
		}