55import com .microsoft .lookup .ClassLookup ;
66import com .microsoft .lookup .PackageLookup ;
77import com .microsoft .model .*;
8+ import com .microsoft .model .sdp .file .*;
89import com .microsoft .util .ElementUtil ;
910import com .microsoft .util .FileUtil ;
1011import com .microsoft .util .Utils ;
@@ -75,21 +76,27 @@ public boolean build() {
7576
7677 populateUidValues (packageMetadataFiles , classMetadataFiles );
7778
78- packageMetadataFiles .forEach (FileUtil ::dumpToFile );
79- classMetadataFiles .forEach (FileUtil ::dumpToFile );
79+ // write content files
80+ packageMetadataFiles .forEach (YmlFilesBuilder ::writePackageContentToYml );
81+ for (MetadataFile type : classMetadataFiles )
82+ {
83+ writeTypeContentToYml (type );
84+ }
85+
86+ // write toc.yml
8087 FileUtil .dumpToFile (tocFile );
8188
8289 return true ;
8390 }
8491
85- void buildFilesForInnerClasses (Element element , List <TocItem > listToAddItems , List <MetadataFile > container ) {
92+ void buildFilesForInnerClasses (Element element , Set <TocItem > listToAddItems , List <MetadataFile > container ) {
8693 for (TypeElement classElement : elementUtil .extractSortedElements (element )) {
8794 String uid = classLookup .extractUid (classElement );
8895 String name = classLookup .extractTocName (classElement );
96+ TocItem tocNode = new TocItem (uid , name );
8997
90- listToAddItems .add (new TocItem (uid , name ));
91-
92- container .add (buildClassYmlFile (classElement ));
98+ container .add (buildClassYmlFile (classElement , tocNode ));
99+ listToAddItems .add (tocNode );
93100 buildFilesForInnerClasses (classElement , listToAddItems , container );
94101 }
95102 }
@@ -105,12 +112,12 @@ MetadataFile buildPackageMetadataFile(PackageElement packageElement) {
105112 return packageMetadataFile ;
106113 }
107114
108- void addChildrenReferences (Element element , List <String > packageChildren ,
115+ void addChildrenReferences (Element element , List <MetadataFileItem > packageChildren ,
109116 Set <MetadataFileItem > referencesCollector ) {
110117 for (TypeElement classElement : elementUtil .extractSortedElements (element )) {
111118 referencesCollector .add (buildClassReference (classElement ));
112119
113- packageChildren .add (classLookup .extractUid (classElement ));
120+ packageChildren .add (classLookup .extractItem (classElement ));
114121 addChildrenReferences (classElement , packageChildren , referencesCollector );
115122 }
116123 }
@@ -132,13 +139,13 @@ <T extends Element> void populateItemFields(MetadataFileItem item, BaseLookup<T>
132139 item .setContent (lookup .extractContent (element ));
133140 }
134141
135- MetadataFile buildClassYmlFile (TypeElement classElement ) {
142+ MetadataFile buildClassYmlFile (TypeElement classElement , TocItem tocItem ) {
136143 String fileName = classLookup .extractHref (classElement );
137144 MetadataFile classMetadataFile = new MetadataFile (outputPath , fileName );
138145 addClassInfo (classElement , classMetadataFile );
139- addConstructorsInfo (classElement , classMetadataFile );
140- addMethodsInfo (classElement , classMetadataFile );
141- addFieldsInfo (classElement , classMetadataFile );
146+ addConstructorsInfo (classElement , classMetadataFile , tocItem );
147+ addMethodsInfo (classElement , classMetadataFile , tocItem );
148+ addFieldsInfo (classElement , classMetadataFile , tocItem );
142149 addReferencesInfo (classElement , classMetadataFile );
143150 applyPostProcessing (classMetadataFile );
144151 return classMetadataFile ;
@@ -158,28 +165,28 @@ void addClassInfo(TypeElement classElement, MetadataFile classMetadataFile) {
158165 classMetadataFile .getItems ().add (classItem );
159166 }
160167
161- void addChildren (TypeElement classElement , List <String > children ) {
162- collect (classElement , children , ElementFilter ::constructorsIn , classItemsLookup ::extractUid );
163- collect (classElement , children , ElementFilter ::methodsIn , classItemsLookup ::extractUid );
164- collect (classElement , children , ElementFilter ::fieldsIn , classItemsLookup ::extractUid );
165- collect (classElement , children , ElementFilter ::typesIn , String :: valueOf );
168+ void addChildren (TypeElement classElement , List <MetadataFileItem > children ) {
169+ collect (classElement , children , ElementFilter ::constructorsIn , classItemsLookup ::extractItem );
170+ collect (classElement , children , ElementFilter ::methodsIn , classItemsLookup ::extractItem );
171+ collect (classElement , children , ElementFilter ::fieldsIn , classItemsLookup ::extractItem );
172+ collect (classElement , children , ElementFilter ::typesIn , classItemsLookup :: extractItem );
166173 }
167174
168175 List <? extends Element > filterPrivateElements (List <? extends Element > elements ) {
169176 return elements .stream ()
170177 .filter (element -> !Utils .isPrivateOrPackagePrivate (element )).collect (Collectors .toList ());
171178 }
172179
173- void collect (TypeElement classElement , List <String > children ,
180+ void collect (TypeElement classElement , List <MetadataFileItem > children ,
174181 Function <Iterable <? extends Element >, List <? extends Element >> selectFunc ,
175- Function <? super Element , String > mapFunc ) {
182+ Function <? super Element , MetadataFileItem > mapFunc ) {
176183
177184 List <? extends Element > elements = selectFunc .apply (classElement .getEnclosedElements ());
178185 children .addAll (filterPrivateElements (elements ).stream ()
179186 .map (mapFunc ).collect (Collectors .toList ()));
180187 }
181188
182- void addConstructorsInfo (TypeElement classElement , MetadataFile classMetadataFile ) {
189+ void addConstructorsInfo (TypeElement classElement , MetadataFile classMetadataFile , TocItem tocItem ) {
183190 for (ExecutableElement constructorElement : ElementFilter .constructorsIn (classElement .getEnclosedElements ())) {
184191 MetadataFileItem constructorItem = buildMetadataFileItem (constructorElement );
185192 constructorItem .setOverload (classItemsLookup .extractOverload (constructorElement ));
@@ -189,10 +196,15 @@ void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFil
189196
190197 addParameterReferences (constructorItem , classMetadataFile );
191198 addOverloadReferences (constructorItem , classMetadataFile );
199+
200+ if (!classElement .getKind ().equals (ElementKind .ENUM )){
201+ tocItem .getItems ().add (
202+ new TocItem (constructorItem .getOverload (), constructorItem .getShortName (), constructorItem .getType ().toLowerCase ()));
203+ }
192204 }
193205 }
194206
195- void addMethodsInfo (TypeElement classElement , MetadataFile classMetadataFile ) {
207+ void addMethodsInfo (TypeElement classElement , MetadataFile classMetadataFile , TocItem tocItem ) {
196208 ElementFilter .methodsIn (classElement .getEnclosedElements ()).stream ()
197209 .filter (methodElement -> !Utils .isPrivateOrPackagePrivate (methodElement ))
198210 .forEach (methodElement -> {
@@ -209,10 +221,15 @@ void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
209221 addParameterReferences (methodItem , classMetadataFile );
210222 addReturnReferences (methodItem , classMetadataFile );
211223 addOverloadReferences (methodItem , classMetadataFile );
224+
225+ if (!classElement .getKind ().equals (ElementKind .ENUM )){
226+ tocItem .getItems ().add (
227+ new TocItem (methodItem .getOverload (), methodItem .getShortName (), methodItem .getType ().toLowerCase ()));
228+ }
212229 });
213230 }
214231
215- void addFieldsInfo (TypeElement classElement , MetadataFile classMetadataFile ) {
232+ void addFieldsInfo (TypeElement classElement , MetadataFile classMetadataFile , TocItem tocItem ) {
216233 ElementFilter .fieldsIn (classElement .getEnclosedElements ()).stream ()
217234 .filter (fieldElement -> !Utils .isPrivateOrPackagePrivate (fieldElement ))
218235 .forEach (fieldElement -> {
@@ -221,6 +238,11 @@ void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
221238 fieldItem .setReturn (classItemsLookup .extractReturn (fieldElement ));
222239 classMetadataFile .getItems ().add (fieldItem );
223240 addReturnReferences (fieldItem , classMetadataFile );
241+
242+ if (classElement .getKind () != ElementKind .ENUM ) {
243+ tocItem .getItems ().add (
244+ new TocItem (fieldItem .getUid (), fieldItem .getName (), fieldItem .getType ().toLowerCase ()));
245+ }
224246 });
225247 }
226248
@@ -307,6 +329,33 @@ void applyPostProcessing(MetadataFile classMetadataFile) {
307329 expandComplexGenericsInReferences (classMetadataFile );
308330 }
309331
332+ private static void writePackageContentToYml (MetadataFile pack ) {
333+ for (MetadataFileItem item : pack .getItems ()) {
334+ PackageModel model = new PackageModel (item , pack .getFileNameWithPath ());;
335+ FileUtil .dumpToFile (model );
336+ }
337+ }
338+
339+ private void writeTypeContentToYml (MetadataFile typeItem ) {
340+ MetadataFileItem item = typeItem .getItems ().iterator ().next ();
341+ String type = item .getType ();
342+ switch (type .toLowerCase ()) {
343+ case "class" :
344+ case "interface" :
345+ TypeModel typeModel = new TypeModel (item , typeItem .getFileNameWithPath (), getOutputPath ());
346+ FileUtil .dumpToFile (typeModel );
347+ break ;
348+ case "enum" :
349+ EnumModel enumModel = new EnumModel (item , typeItem .getFileNameWithPath ());
350+ FileUtil .dumpToFile (enumModel );
351+ break ;
352+ }
353+ }
354+
355+ public String getOutputPath () {
356+ return outputPath ;
357+ }
358+
310359 /**
311360 * Replace one record in 'references' with several records in this way:
312361 * <pre>
@@ -346,6 +395,12 @@ void populateUidValues(List<MetadataFile> packageMetadataFiles, List<MetadataFil
346395 populateUidValues (item .getSummary (), lookupContext )
347396 ));
348397
398+ for (MetadataFileItem child :item .getChildren ()) {
399+ child .setSummary (YamlUtil .convertHtmlToMarkdown (
400+ populateUidValues (child .getSummary (), lookupContext )
401+ ));
402+ }
403+
349404 Optional .ofNullable (item .getSyntax ()).ifPresent (syntax -> {
350405 Optional .ofNullable (syntax .getParameters ()).ifPresent (
351406 methodParams -> methodParams .forEach (
0 commit comments