public static DubSubPackage ReadAndAdd(DubProject superProject, JsonReader r, IProgressMonitor monitor) { if (r.TokenType != JsonToken.StartObject) { throw new JsonReaderException("Illegal token on subpackage definition beginning"); } var sub = new DubSubPackage(); sub.FileName = superProject.FileName; sub.OriginalBasePath = superProject is DubSubPackage ? (superProject as DubSubPackage).OriginalBasePath : superProject.BaseDirectory; sub.VirtualBasePath = sub.OriginalBasePath; sub.BeginLoad(); sub.AddProjectAndSolutionConfiguration(new DubProjectConfiguration { Name = GettextCatalog.GetString("Default"), Id = DubProjectConfiguration.DefaultConfigId }); superProject.packagesToAdd.Add(sub); while (r.Read()) { if (r.TokenType == JsonToken.PropertyName) { sub.TryPopulateProperty(r.Value as string, r, monitor); } else if (r.TokenType == JsonToken.EndObject) { break; } } sub.packageName = superProject.packageName + ":" + (sub.packageName ?? string.Empty); var sourcePaths = sub.GetSourcePaths().ToArray(); if (sourcePaths.Length > 0 && !string.IsNullOrWhiteSpace(sourcePaths[0])) { sub.VirtualBasePath = new FilePath(sourcePaths [0]); } PackageJsonParser.LoadDubProjectReferences(sub, monitor); // TODO: What to do with new configurations that were declared in this sub package? Add them to all other packages as well? sub.EndLoad(); if (r.TokenType != JsonToken.EndObject) { throw new JsonReaderException("Illegal token on subpackage definition end"); } return(sub); }
public static DubSubPackage ReadAndAdd(DubProject superProject,JsonReader r, IProgressMonitor monitor) { DubSubPackage sub; switch (r.TokenType) { case JsonToken.StartObject: break; case JsonToken.String: sub = PackageJsonParser.ReadPackageInformation (PackageJsonParser.GetDubJsonFilePath (superProject, r.Value as string), monitor, null, superProject) as DubSubPackage; return sub; default: throw new JsonReaderException ("Illegal token on subpackage definition beginning"); } sub = new DubSubPackage (); sub.FileName = superProject.FileName; sub.OriginalBasePath = superProject is DubSubPackage ? (superProject as DubSubPackage).OriginalBasePath : superProject.BaseDirectory; sub.VirtualBasePath = sub.OriginalBasePath; sub.BeginLoad (); sub.AddProjectAndSolutionConfiguration(new DubProjectConfiguration { Name = GettextCatalog.GetString("Default"), Id = DubProjectConfiguration.DefaultConfigId }); superProject.packagesToAdd.Add(sub); while (r.Read ()) { if (r.TokenType == JsonToken.PropertyName) sub.TryPopulateProperty (r.Value as string, r, monitor); else if (r.TokenType == JsonToken.EndObject) break; } sub.packageName = superProject.packageName + ":" + (sub.packageName ?? string.Empty); var sourcePaths = sub.GetSourcePaths ().ToArray(); if (sourcePaths.Length > 0 && !string.IsNullOrWhiteSpace(sourcePaths[0])) sub.VirtualBasePath = new FilePath(sourcePaths [0]); PackageJsonParser.LoadDubProjectReferences (sub, monitor); // TODO: What to do with new configurations that were declared in this sub package? Add them to all other packages as well? sub.EndLoad (); if (r.TokenType != JsonToken.EndObject) throw new JsonReaderException ("Illegal token on subpackage definition end"); return sub; }
public bool TryPopulateProperty(string propName, JsonReader j, IProgressMonitor monitor) { switch (propName.ToLowerInvariant()) { case "displayname": displayName = j.ReadAsString(); break; case "name": packageName = j.ReadAsString(); break; case "description": Description = j.ReadAsString(); break; case "copyright": Copyright = j.ReadAsString(); break; case "homepage": Homepage = j.ReadAsString(); break; case "authors": if (!j.Read() || j.TokenType != JsonToken.StartArray) { throw new JsonReaderException("Expected [ when parsing Authors"); } authors.Clear(); while (j.Read() && j.TokenType != JsonToken.EndArray) { if (j.TokenType == JsonToken.String) { authors.Add(j.Value as string); } } break; case "dependencies": if (!j.Read() || j.TokenType != JsonToken.StartObject) { throw new JsonReaderException("Expected { when parsing Authors"); } DubReferences.DeserializeDubPrjDependencies(j, monitor); break; case "configurations": if (!j.Read() || j.TokenType != JsonToken.StartArray) { throw new JsonReaderException("Expected [ when parsing Configurations"); } if (ParentSolution != null && ParentSolution.Configurations.Count == 1 && ParentSolution.Configurations[0].Id == DubProjectConfiguration.DefaultConfigId) { ParentSolution.Configurations.Clear(); } if (Configurations.Count == 1 && Configurations[0].Id == DubProjectConfiguration.DefaultConfigId) { Configurations.Clear(); } while (j.Read() && j.TokenType != JsonToken.EndArray) { AddProjectAndSolutionConfiguration(DubProjectConfiguration.DeserializeFromPackageJson(j)); } break; case "subpackages": if (!j.Read() || j.TokenType != JsonToken.StartArray) { throw new JsonReaderException("Expected [ when parsing subpackages"); } while (j.Read() && j.TokenType != JsonToken.EndArray) { DubSubPackage.ReadAndAdd(this, j, monitor); } break; default: return(CommonBuildSettings.TryDeserializeBuildSetting(j)); } return(true); }