Skip to content

Commit

Permalink
Benchmark documentation from javadoc
Browse files Browse the repository at this point in the history
  • Loading branch information
mjok committed Feb 4, 2021
1 parent c904f95 commit df44961
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.gocypher.cybench.core.annotation;

import com.google.auto.service.AutoService;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.util.Name;

import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

@SupportedAnnotationTypes(
"org.openjdk.jmh.annotations.Benchmark")
@SupportedSourceVersion(SourceVersion.RELEASE_8)

@AutoService(Processor.class)
public class BenchmarkJavaDocProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) {
Set<? extends Element> annotatedElements
= roundEnv.getElementsAnnotatedWith(annotation);

Properties p = new Properties();

annotatedElements.stream().forEach(element -> {

String docComment = processingEnv.getElementUtils().getDocComment(element);
if (docComment != null) {
Symbol.ClassSymbol classSymbol = ((Symbol.MethodSymbol) element).enclClass();
// Name nm = classSymbol.getQualifiedName().subName(classSymbol.getQualifiedName().lastIndexOf((byte) '.') + 1, classSymbol.getQualifiedName().length());
// Name pck = classSymbol.getQualifiedName().subName(0, classSymbol.getQualifiedName().lastIndexOf((byte) '.'));
final Name qualifiedName = ((Symbol.MethodSymbol) element).getQualifiedName();

processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Found " + ((Symbol.MethodSymbol) element).getQualifiedName());
p.put(classSymbol + "." + qualifiedName, docComment);
}


});

if (!p.isEmpty()) {
try {
FileObject file = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", "benchJavaDoc");
p.store(file.openWriter(), "");
} catch (IOException e) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage());

}
}


}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.reflect.Method;
Expand Down Expand Up @@ -225,6 +226,7 @@ public static void main(String[] args) throws Exception {
Optional<Method> benchmarkMethod = JMHUtils.getBenchmarkMethod(method, aClass);
appendMetadataFromMethod(benchmarkMethod, benchmarkReport);
appendMetadataFromClass(aClass, benchmarkReport);
appendMetadataFromJavaDoc(aClass, benchmarkMethod, benchmarkReport);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Expand Down Expand Up @@ -286,6 +288,27 @@ public static void main(String[] args) throws Exception {
LOG.info("-----------------------------------------------------------------------------------------");
}

private static void appendMetadataFromJavaDoc(Class<?> aClass, Optional<Method> benchmarkMethod, BenchmarkReport benchmarkReport) {
final String key = aClass.getName() + "." + benchmarkMethod.get().getName();

LOG.info("Appending javadoc for {}", key);
Properties p = new Properties();
try {
p.load(ClassLoader.getSystemResourceAsStream("benchJavaDoc"));

final String property = p.getProperty(key);
if (property != null) {
LOG.info("Appending javadoc {} for {}", key, property);

benchmarkReport.addMetadata("description", property);

}
} catch (IOException e) {
LOG.error("Cannot load Javadoc", e);
}

}

private static void customBenchmarksCategoryCheck() {

}
Expand Down

0 comments on commit df44961

Please sign in to comment.