/// <summary>
        /// Fills the list of TypeScript-files, references to which have been added to a TypeScript-asset
        /// by using the "reference" comments
        /// </summary>
        /// <param name="rootAssetUrl">URL of root TypeScript-asset file</param>
        /// <param name="parentScript">Parent TypeScript-script</param>
        /// <param name="dependencies">List of TypeScript-files, references to which have been
        /// added to a TypeScript-asset by using the "reference" comments</param>
        public void FillDependencies(string rootAssetUrl, TsScript parentScript,
            DependencyCollection dependencies)
        {
            foreach (string referenceUrl in parentScript.References)
            {
                string dependencyUrl = referenceUrl;

                if (string.Equals(dependencyUrl, rootAssetUrl, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                if (!dependencies.ContainsUrl(dependencyUrl))
                {
                    string dependencyExtension = Path.GetExtension(dependencyUrl);
                    if (TypeScriptFileExtensionHelpers.IsTypeScript(dependencyExtension)
                        || CoreFileExtensionHelpers.IsJavaScript(dependencyExtension))
                    {
                        if (TsScriptExists(dependencyUrl))
                        {
                            TsScript script = GetTsScript(dependencyUrl);

                            var dependency = new Dependency(dependencyUrl, script.Content);
                            dependencies.Add(dependency);

                            FillDependencies(rootAssetUrl, script, dependencies);
                        }
                        else
                        {
                            throw new FileNotFoundException(
                                string.Format(CoreStrings.Common_FileNotExist, dependencyUrl));
                        }
                    }
                }
            }
        }
		/// <summary>
		/// Fills the list of LESS-files, that were added to a LESS-asset
		/// by using the LESS <code>@import</code> rules
		/// </summary>
		/// <param name="rootAssetUrl">URL of root LESS-asset file</param>
		/// <param name="parentStylesheet">Parent LESS-stylesheet</param>
		/// <param name="dependencies">List of LESS-files, that were added to a
		/// LESS-asset by using the LESS <code>@import</code> rules</param>
		public void FillDependencies(string rootAssetUrl, LessStylesheet parentStylesheet, DependencyCollection dependencies)
		{
			foreach (string dataUriFunctionImageUrl in parentStylesheet.DataUriFunctionAssetUrls)
			{
				var dependency = new Dependency(dataUriFunctionImageUrl, string.Empty);
				dependencies.Add(dependency);
			}

			foreach (LessImport import in parentStylesheet.Imports)
			{
				string dependencyUrl = import.Url;
				LessImportOptions dependencyOptions = import.ImportOptions;

				if (UrlHelpers.StartsWithProtocol(dependencyUrl))
				{
					if (!dependencies.ContainsUrl(dependencyUrl))
					{
						var dependency = new Dependency(dependencyUrl, string.Empty, false);
						dependencies.Add(dependency);
					}

					continue;
				}

				if (string.Equals(dependencyUrl, rootAssetUrl, StringComparison.OrdinalIgnoreCase))
				{
					continue;
				}

				var duplicateDependency = dependencies.GetByUrl(dependencyUrl);
				bool isDuplicateDependency = (duplicateDependency != null);
				bool isEmptyDependency = isDuplicateDependency && (duplicateDependency.Content.Length == 0);
				bool isNonExistentOptionalDependency = false;

				if (!isDuplicateDependency || isEmptyDependency)
				{
					if (!LessStylesheetExists(dependencyUrl))
					{
						if (dependencyOptions.Optional)
						{
							isNonExistentOptionalDependency = true;
						}
						else
						{
							throw new FileNotFoundException(
								string.Format(CoreStrings.Common_FileNotExist, dependencyUrl));
						}
					}

					var stylesheet = new LessStylesheet(dependencyUrl, string.Empty);
					string dependencyContent = null;

					if (dependencyOptions.Less || dependencyOptions.Inline)
					{
						if (!isNonExistentOptionalDependency)
						{
							stylesheet = GetLessStylesheet(dependencyUrl, dependencyOptions);
							dependencyContent = stylesheet.Content;
						}

						if (isEmptyDependency && stylesheet.Content.Length > 0)
						{
							duplicateDependency.Content = dependencyContent;
							duplicateDependency.IsObservable = true;
						}
						else
						{
							var dependency = new Dependency(dependencyUrl, dependencyContent);
							dependencies.Add(dependency);
						}
					}
					else
					{
						if (!isNonExistentOptionalDependency)
						{
							dependencyContent = string.Empty;
						}

						if (!isDuplicateDependency)
						{
							var dependency = new Dependency(dependencyUrl, dependencyContent, false);
							dependencies.Add(dependency);
						}
					}

					FillDependencies(rootAssetUrl, stylesheet, dependencies);
				}
			}
		}