private void ResolveParentFolders(FrontendCompiler context, List <FileSystemResource> resolves) { Folder defaultRootFolder = this.GetDefaultRoot(context); foreach (FileSystemResource r in new List <FileSystemResource>(resolves)) { if (!String.IsNullOrEmpty(r.ParentFolderIdFromName)) { PackageItem item; Folder newParentFolder = null; if (context.TryGetItemById(r.ParentFolderIdFromName, out item)) { newParentFolder = item as Folder; if (newParentFolder == null) { context.OnMessage(new CompilerMessageEventArgs(CompilerMessage.InvalidFolderReference(r.ParentFolderIdFromName, item.GetType().Name), r.LineNumber)); } } else // did not find a matching id. { // TODO: come up with a better error message for this. context.OnMessage(new CompilerMessageEventArgs(CompilerMessage.InvalidFolderReference(r.ParentFolderIdFromName, "not found"), r.LineNumber)); } if (newParentFolder != null) { // If this is a "no name" folder then reparent all the contents to this new parent if (r is Folder && String.IsNullOrEmpty(r.Name)) { this.ReparentFolderChildren(context, (Folder)r, newParentFolder); resolves.Remove(r); // folder is deleted, be sure not to try to continue to process it. } else // simply point our folder to this new parent. { r.ReparentFolder(newParentFolder); } } } else if (r.ParentFolder == null && !(r is Folder && ((Folder)r).External)) // if we didn't get a parent folder yet and this is not an external folder reference, default to the application folder. { r.ReparentFolder(defaultRootFolder); } } }