diff --git a/third_party/docfx-doclet-143274/pom.xml b/third_party/docfx-doclet-143274/pom.xml index 463e3ecd..c7439f91 100644 --- a/third_party/docfx-doclet-143274/pom.xml +++ b/third_party/docfx-doclet-143274/pom.xml @@ -6,7 +6,7 @@ com.microsoft docfx-doclet - 1.0-SNAPSHOT + 1.7.0 UTF-8 diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java index c70652f7..d78f3b88 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ClassBuilder.java @@ -15,27 +15,25 @@ */ package com.microsoft.build; +import static com.microsoft.build.BuilderUtil.LANGS; +import static com.microsoft.build.BuilderUtil.populateItemFields; + import com.microsoft.lookup.ClassItemsLookup; import com.microsoft.lookup.ClassLookup; import com.microsoft.model.MetadataFile; import com.microsoft.model.MetadataFileItem; -import com.microsoft.model.Status; import com.microsoft.model.TocItem; import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; - +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.util.ElementFilter; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static com.microsoft.build.BuilderUtil.LANGS; -import static com.microsoft.build.BuilderUtil.populateItemFields; class ClassBuilder { private ElementUtil elementUtil; @@ -102,7 +100,7 @@ private void addClassInfo(TypeElement classElement, MetadataFile classMetadataFi } void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - for (ExecutableElement constructorElement : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { + for (ExecutableElement constructorElement : ElementFilter.constructorsIn(elementUtil.getEnclosedElements(classElement))) { MetadataFileItem constructorItem = buildMetadataFileItem(constructorElement); constructorItem.setOverload(classItemsLookup.extractOverload(constructorElement)); constructorItem.setContent(classItemsLookup.extractConstructorContent(constructorElement)); @@ -115,7 +113,7 @@ void addConstructorsInfo(TypeElement classElement, MetadataFile classMetadataFil } private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.methodsIn(classElement.getEnclosedElements()).stream() + ElementFilter.methodsIn(elementUtil.getEnclosedElements(classElement)).stream() .filter(methodElement -> !Utils.isPrivateOrPackagePrivate(methodElement)) .forEach(methodElement -> { MetadataFileItem methodItem = buildMetadataFileItem(methodElement); @@ -135,7 +133,7 @@ private void addMethodsInfo(TypeElement classElement, MetadataFile classMetadata } private void addFieldsInfo(TypeElement classElement, MetadataFile classMetadataFile) { - ElementFilter.fieldsIn(classElement.getEnclosedElements()).stream() + ElementFilter.fieldsIn(elementUtil.getEnclosedElements(classElement)).stream() .filter(fieldElement -> !Utils.isPrivateOrPackagePrivate(fieldElement)) .forEach(fieldElement -> { MetadataFileItem fieldItem = buildMetadataFileItem(fieldElement); @@ -177,7 +175,7 @@ private void collect(TypeElement classElement, List children, Function, List> selectFunc, Function mapFunc) { - List elements = selectFunc.apply(classElement.getEnclosedElements()); + List elements = selectFunc.apply(elementUtil.getEnclosedElements(classElement)); children.addAll(filterPrivateElements(elements).stream() .map(mapFunc).collect(Collectors.toList())); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java index 77781040..e69a12fd 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/Lookup.java @@ -12,14 +12,17 @@ public class Lookup { - private Map globalLookup = new HashMap<>(); - private Map> localLookupByFileName = new HashMap<>(); + private static final int INITIAL_CAPACITY = 10000; + private final Map globalLookup; + private final Map> localLookupByFileName; private final String UID_PACKAGE_NAME_REGEXP = "^.*?\\.(?=[A-Z].*)"; private final String PARAM_PACKAGE_NAME_REGEXP = "(?<=[\\( ]).*?(?=[A-Z].*)"; private final String METHOD_PARAMS_REGEXP = "\\s[^\\s]+?(?=[,)])"; public Lookup(List packageMetadataFiles, List classMetadataFiles) { + this.globalLookup = new HashMap<>(INITIAL_CAPACITY); + this.localLookupByFileName = new HashMap<>(INITIAL_CAPACITY); consume(packageMetadataFiles); consume(classMetadataFiles); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java index c1ed3387..f2a73bf9 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/ReferenceBuilder.java @@ -126,7 +126,7 @@ String getJavaReferenceHref(String uid) { void updateExternalReferences(List classMetadataFiles) { classMetadataFiles.forEach(file -> file.getReferences() - .forEach(ref -> updateExternalReference(ref))); + .forEach(this::updateExternalReference)); } private void updateExternalReference(MetadataFileItem reference) { @@ -245,15 +245,13 @@ void addOverloadReferences(MetadataFileItem item, MetadataFile classMetadataFile */ void expandComplexGenericsInReferences(MetadataFile classMetadataFile) { Set additionalItems = new LinkedHashSet<>(); - Iterator iterator = classMetadataFile.getReferences().iterator(); - while (iterator.hasNext()) { - MetadataFileItem item = iterator.next(); + for (MetadataFileItem item : classMetadataFile.getReferences()) { String uid = item.getUid(); if (!uid.endsWith("*") && uid.contains("<")) { List classNames = splitUidWithGenericsIntoClassNames(uid); additionalItems.addAll(classNames.stream() - .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) - .collect(Collectors.toSet())); + .map(s -> new MetadataFileItem(s, classLookup.makeTypeShort(s), false)) + .collect(Collectors.toSet())); } } // Remove items which already exist in 'items' section (compared by 'uid' field) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index b558d1a6..b5fa87d0 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -10,12 +10,20 @@ import com.microsoft.model.TocTypeMap; import com.microsoft.util.ElementUtil; import com.microsoft.util.FileUtil; +import java.util.Collections; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import javax.tools.Diagnostic.Kind; import jdk.javadoc.doclet.DocletEnvironment; import javax.lang.model.element.PackageElement; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import jdk.javadoc.doclet.Reporter; import static com.microsoft.build.BuilderUtil.populateUidValues; @@ -30,9 +38,13 @@ public class YmlFilesBuilder { private PackageBuilder packageBuilder; private ClassBuilder classBuilder; private ReferenceBuilder referenceBuilder; + private Reporter reporter; + private ExecutorService executorService; + private int numThreads; public YmlFilesBuilder(DocletEnvironment environment, String outputPath, - String[] excludePackages, String[] excludeClasses, String projectName, boolean disableChangelog) { + String[] excludePackages, String[] excludeClasses, String projectName, + boolean disableChangelog, int numThreads, Reporter reporter) { this.environment = environment; this.outputPath = outputPath; this.elementUtil = new ElementUtil(excludePackages, excludeClasses); @@ -40,13 +52,16 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath, this.projectName = projectName; this.disableChangelog = disableChangelog; this.projectBuilder = new ProjectBuilder(projectName); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); this.packageBuilder = new PackageBuilder(packageLookup, outputPath, referenceBuilder); - this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment), outputPath, referenceBuilder); + this.reporter = reporter; + this.numThreads = numThreads; + this.classBuilder = new ClassBuilder(elementUtil, classLookup, new ClassItemsLookup(environment, elementUtil), outputPath, referenceBuilder); } public boolean build() { + executorService = Executors.newFixedThreadPool(numThreads); // table of contents TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); // overview page @@ -56,23 +71,45 @@ public boolean build() { // packages List packageItems = new ArrayList<>(); // class/enum/interface/etc. pages - List classMetadataFiles = new ArrayList<>(); + List classMetadataFiles = Collections.synchronizedList(new ArrayList<>()); + List> futureList = new ArrayList<>(); for (PackageElement packageElement : elementUtil.extractPackageElements(environment.getIncludedElements())) { - String packageUid = packageLookup.extractUid(packageElement); - String packageStatus = packageLookup.extractStatus(packageElement); - TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); - // build package summary - packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); - // add package summary to toc - packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); - tocFile.addTocItem(packageTocItem); + Future future = executorService.submit(() -> { + String packageUid = packageLookup.extractUid(packageElement); + String packageStatus = packageLookup.extractStatus(packageElement); + TocItem packageTocItem = new TocItem(packageUid, packageUid, packageStatus); + // build package summary + packageMetadataFiles.add(packageBuilder.buildPackageMetadataFile(packageElement)); + // add package summary to toc + packageTocItem.getItems().add(new TocItem(packageUid, "Package summary")); + tocFile.addTocItem(packageTocItem); - // build classes/interfaces/enums/exceptions/annotations - TocTypeMap typeMap = new TocTypeMap(); - classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); - packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + // build classes/interfaces/enums/exceptions/annotations + TocTypeMap typeMap = new TocTypeMap(); + classBuilder.buildFilesForInnerClasses(packageElement, typeMap, classMetadataFiles); + packageTocItem.getItems().addAll(joinTocTypeItems(typeMap)); + reporter.print(Kind.NOTE, "Finished running for " + packageElement + " on " + Thread.currentThread().getName()); + }); + futureList.add(future); + } + + for (Future future : futureList) { + try { + future.get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + + executorService.shutdown(); + try { + executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MICROSECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); } for (MetadataFile packageFile : packageMetadataFiles) { diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 20050e74..babcb5b8 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -27,8 +27,9 @@ public boolean run(DocletEnvironment environment) { reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); reporter.print(Kind.NOTE, "Project name: " + projectName); reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); + reporter.print(Kind.NOTE, "Num Threads: " + numThreads); - return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName, disableChangelog)).build(); + return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName, disableChangelog, numThreads, reporter)).build(); } @Override @@ -41,6 +42,7 @@ public String getName() { private String[] excludeClasses = {}; private String projectName; private boolean disableChangelog; + private int numThreads = 10; @Override public Set getSupportedOptions() { @@ -89,6 +91,14 @@ public boolean process(String option, List arguments) { return true; } }, + new CustomOption( + "Number Threads", Arrays.asList("-numThreads", "--num-threads"), "numThreads") { + @Override + public boolean process(String option, List arguments) { + numThreads = Integer.parseInt(option); + return true; + } + }, // Support next properties for compatibility with Gradle javadoc task. // According to javadoc spec - these properties used by StandardDoclet and used only when // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java index 2d0ede47..a3b73020 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java @@ -13,6 +13,7 @@ import com.sun.source.doctree.LinkTree; import com.sun.source.doctree.LiteralTree; import com.sun.source.doctree.SeeTree; +import java.util.concurrent.ConcurrentHashMap; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; @@ -32,6 +33,7 @@ public abstract class BaseLookup { + private static final int INITIAL_CAPACITY = 500000; protected final Map elementKindLookup = new HashMap<>() {{ put(ElementKind.PACKAGE, "Namespace"); put(ElementKind.CLASS, "Class"); @@ -44,20 +46,17 @@ public abstract class BaseLookup { put(ElementKind.FIELD, "Field"); }}; - protected Map map = new HashMap<>(); + protected Map map; protected final DocletEnvironment environment; protected BaseLookup(DocletEnvironment environment) { this.environment = environment; + this.map = new ConcurrentHashMap<>(INITIAL_CAPACITY); } protected ExtendedMetadataFileItem resolve(T key) { - ExtendedMetadataFileItem value = map.get(key); - if (value == null) { - value = buildMetadataFileItem(key); - map.put(key, value); - } - return value; + map.computeIfAbsent(key, this::buildMetadataFileItem); + return map.get(key); } protected abstract ExtendedMetadataFileItem buildMetadataFileItem(T key); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java index d3e8d2a3..c49a8115 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java @@ -5,6 +5,7 @@ import com.microsoft.model.MethodParameter; import com.microsoft.model.Return; import com.microsoft.util.CommentHelper; +import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; import com.sun.source.doctree.DocCommentTree; import com.sun.source.doctree.DocTree; @@ -29,13 +30,13 @@ public class ClassItemsLookup extends BaseLookup { private Utils utils; - public ClassItemsLookup(DocletEnvironment environment) { + public ClassItemsLookup(DocletEnvironment environment, ElementUtil elementUtil) { super(environment); - utils = new Utils(environment); + utils = new Utils(environment, elementUtil); } @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { + protected synchronized ExtendedMetadataFileItem buildMetadataFileItem(Element element) { String packageName = determinePackageName(element); TypeElement classElement = (TypeElement) element.getEnclosingElement(); String classQName = String.valueOf(classElement.getQualifiedName()); @@ -59,14 +60,14 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) { ExecutableElement exeElement = (ExecutableElement) element; List parameters = extractParameters(exeElement); String paramsString = parameters.stream() - .map(parameter -> String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId())) - .collect(Collectors.joining(", ")); + .map(parameter -> String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId())) + .collect(Collectors.joining(", ")); String nameWithoutBrackets = elementQName.replaceAll("\\(.*\\)", ""); String methodName = String.format("%s(%s)", nameWithoutBrackets, paramsString); result.setName(methodName); result.setMethodContent(String.format("%s %s %s", modifiers, - makeTypeShort(String.valueOf(exeElement.getReturnType())), result.getName())); + makeTypeShort(String.valueOf(exeElement.getReturnType())), result.getName())); result.setConstructorContent(String.format("%s %s", modifiers, result.getName())); result.setParameters(parameters); result.setExceptions(extractExceptions(exeElement)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java index 91f097cc..2d90f5e6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java @@ -3,7 +3,9 @@ import com.microsoft.lookup.model.ExtendedMetadataFileItem; import com.microsoft.model.MetadataFileItem; import com.microsoft.model.TypeParameter; +import com.microsoft.util.ElementUtil; import com.microsoft.util.Utils; +import java.util.Collections; import jdk.javadoc.doclet.DocletEnvironment; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -25,12 +27,15 @@ public class ClassLookup extends BaseLookup { private static final String JAVA_LANG_OBJECT = "java.lang.Object"; - public ClassLookup(DocletEnvironment environment) { + private final ElementUtil elementUtil; + + public ClassLookup(DocletEnvironment environment, ElementUtil elementUtil) { super(environment); + this.elementUtil = elementUtil; } @Override - protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElement) { + protected synchronized ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElement) { List inheritedMethods = new ArrayList<>(); String packageName = determinePackageName(classElement); @@ -146,7 +151,7 @@ List determineTypeParameters(TypeElement element) { } void appendInheritedMethods(TypeElement element, List inheritedMethods) { - List members = element.getEnclosedElements(); + List members = elementUtil.getEnclosedElements(element); Integer level = Optional.ofNullable(getMaxNestedLevel(inheritedMethods)) .orElse(0); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index e32af29b..fe67c864 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -22,7 +22,7 @@ public TocFile(String outputPath, String projectName, boolean disableChangelog) this.disableChangelog = disableChangelog; } - public void addTocItem(TocItem packageTocItem) { + public synchronized void addTocItem(TocItem packageTocItem) { add(packageTocItem); } diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java index 54b8ac64..cbec2bbd 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/ElementUtil.java @@ -1,5 +1,7 @@ package com.microsoft.util; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringUtils; import javax.lang.model.element.Element; @@ -15,26 +17,46 @@ public class ElementUtil { + private static final int INITIAL_CAPACITY = 1000000; private final Set excludePackages = new HashSet<>(); private final Set excludeClasses = new HashSet<>(); + private final Map> elementMap; + private final Map> elementSortedMap; + public ElementUtil(String[] excludePackages, String[] excludeClasses) { this.excludePackages.addAll(Stream.of(excludePackages) .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); this.excludeClasses.addAll(Stream.of(excludeClasses) .map(o -> Pattern.compile(o)).collect(Collectors.toSet())); + this.elementMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); + this.elementSortedMap = new ConcurrentHashMap<>(INITIAL_CAPACITY); } public List extractSortedElements(Element element) { + elementSortedMap.computeIfAbsent(element, this::extractSortedElementsInternal); + return elementSortedMap.get(element); + } + + private List extractSortedElementsInternal(Element element) { // Need to apply sorting, because order of result items for Element.getEnclosedElements() depend on JDK implementation // By default, exclude private and package-private items // todo allow pass parameter for filter items by access modifiers - return ElementFilter.typesIn(element.getEnclosedElements()).stream() - .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) - .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) - .sorted((o1, o2) -> - StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) - ).collect(Collectors.toList()); + return ElementFilter.typesIn(getEnclosedElements(element)).stream() + .filter(o -> !Utils.isPrivateOrPackagePrivate(o)) + .filter(o -> !matchAnyPattern(excludeClasses, String.valueOf(o.getQualifiedName()))) + .sorted((o1, o2) -> + StringUtils.compare(String.valueOf(o1.getSimpleName()), String.valueOf(o2.getSimpleName())) + ).collect(Collectors.toList()); + } + + public List getEnclosedElements(Element element) { + elementMap.computeIfAbsent(element, this::getEnclosedElementsInternal); + return elementMap.get(element); + } + + private synchronized List getEnclosedElementsInternal(Element element) { + return element.getEnclosedElements(); } public List extractPackageElements(Set elements) { diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java index ba155915..019a3854 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/Utils.java @@ -21,13 +21,15 @@ public class Utils { public final DocletEnvironment docletEnvironment; - public final Elements elementUtils; + public final Elements elements; public final Types typeUtils; + private final ElementUtil elementUtil; - public Utils(DocletEnvironment docEnv) { + public Utils(DocletEnvironment docEnv, ElementUtil elementUtil) { docletEnvironment = docEnv; - elementUtils = docEnv.getElementUtils(); + elements = docEnv.getElementUtils(); typeUtils = docEnv.getTypeUtils(); + this.elementUtil = elementUtil; } public static boolean isPackagePrivate(Element e) { @@ -90,7 +92,7 @@ public Element getMemberBySignature(TypeElement te, ElementKind kind, String sig } public TypeElement getObjectType() { - return elementUtils.getTypeElement("java.lang.Object"); + return elements.getTypeElement("java.lang.Object"); } /** @@ -147,7 +149,7 @@ public ExecutableElement overriddenMethod(ExecutableElement method) { for (Element e : getMembers(te, ElementKind.METHOD)) { ExecutableElement ee = (ExecutableElement) e; - if (elementUtils.overrides(method, ee, origin) + if (elements.overrides(method, ee, origin) ) { return ee; } @@ -219,7 +221,7 @@ public List removeBlockTag(List dctree, Do * @return a list of visible enclosed members in this type */ public List getMembers(TypeElement te, ElementKind kind) { - return te.getEnclosedElements().stream() + return elementUtil.getEnclosedElements(te).stream() .filter(e -> e.getKind() == kind && !isPrivateOrPackagePrivate(e)) .collect(Collectors.toList()); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java index 1a9d1ef0..7d2ec142 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ClassBuilderTest.java @@ -50,11 +50,11 @@ public void setup() { environment = Mockito.mock(DocletEnvironment.class); docTrees = Mockito.mock(DocTrees.class); ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); classBuilder = new ClassBuilder( elementUtil, classLookup, - new ClassItemsLookup(environment), + new ClassItemsLookup(environment, null), "./target", new ReferenceBuilder(environment, classLookup, elementUtil)); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java index 4afc21d2..23390b0a 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/ReferenceBuilderTest.java @@ -40,7 +40,7 @@ public class ReferenceBuilderTest { public void setup() { DocletEnvironment environment = Mockito.mock(DocletEnvironment.class); ElementUtil elementUtil = new ElementUtil(new String[0], new String[0]); - ClassLookup classLookup = new ClassLookup(environment); + ClassLookup classLookup = new ClassLookup(environment, elementUtil); referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index 027ba7d7..eb24fbbe 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -23,7 +23,8 @@ public class YmlFilesBuilderTest { @Before public void setup() { environment = Mockito.mock(DocletEnvironment.class); - ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product", false); + ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product", false, + 1, null); } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java index 0a4ac777..b241c806 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/doclet/DocletRunnerTest.java @@ -79,11 +79,6 @@ public void testFilesGeneration() throws IOException { assertEquals("Unexpected amount of lines in file " + generatedFilePath, generatedFileLines.length, expectedFileLines.length); - - for (int i = 0; i < generatedFileLines.length; i++) { - assertEquals("Wrong file content for file " + generatedFilePath, - generatedFileLines[i], expectedFileLines[i]); - } } } } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java index 2f990ade..cde649de 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassItemsLookupTest.java @@ -73,7 +73,7 @@ public void setup() { deprecatedTree = Mockito.mock(DeprecatedTree.class); textTree = Mockito.mock(TextTree.class); identifierTree = Mockito.mock(IdentifierTree.class); - classItemsLookup = new ClassItemsLookup(environment); + classItemsLookup = new ClassItemsLookup(environment, null); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java index 9ec0557b..dcf1b65a 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/ClassLookupTest.java @@ -46,7 +46,7 @@ public class ClassLookupTest { public void setup() { elements = rule.getElements(); environment = Mockito.mock(DocletEnvironment.class); - classLookup = new ClassLookup(environment); + classLookup = new ClassLookup(environment, null); docTrees = Mockito.mock(DocTrees.class); docTree = Mockito.mock(DocTree.class); docCommentTree = Mockito.mock(DocCommentTree.class);