2 * Copyright (c) 2016 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import com.github.javaparser.ast.Node;
14 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
15 import com.github.javaparser.ast.body.ConstructorDeclaration;
16 import com.github.javaparser.ast.body.FieldDeclaration;
17 import com.github.javaparser.ast.body.MethodDeclaration;
18 import com.github.javaparser.ast.comments.Comment;
19 import com.github.javaparser.ast.comments.JavadocComment;
20 import com.github.javaparser.ast.expr.NormalAnnotationExpr;
21 import com.github.javaparser.ast.type.ClassOrInterfaceType;
22 import java.util.HashMap;
23 import java.util.HashSet;
24 import java.util.List;
27 import org.opendaylight.controller.config.api.annotations.RequireInterface;
29 class MbeASTVisitor extends SieASTVisitor {
30 private final Set<String> constructors = new HashSet<>();
31 private final Set<String> fieldDeclarations = new HashSet<>();
32 final Set<String> methods = new HashSet<>();
33 private final Map<String, String> methodJavadoc = new HashMap<>();
34 final Map<String, String> requireIfc = new HashMap<>();
38 MbeASTVisitor(final String expectedPackageName, final String fileName) {
39 super(expectedPackageName, fileName);
43 public void visit(final NormalAnnotationExpr expr, final Void arg) {
44 super.visit(expr, arg);
46 final String fqcn = expr.getName().toString();
47 if (fqcn.equals(RequireInterface.class.getCanonicalName()) && expr.getParentNode() instanceof MethodDeclaration) {
48 final Node parent = expr.getParentNode();
49 if (parent instanceof MethodDeclaration) {
50 // remember only top level description annotation
51 String reqVal = expr.getPairs().get(0).toString();
52 requireIfc.put(((MethodDeclaration) parent).getName(), reqVal);
58 public void visit(final ConstructorDeclaration n, final Void arg) {
59 constructors.add(n.toString());
64 public void visit(final MethodDeclaration n, final Void arg) {
65 final String signature = n.getDeclarationAsString(false, false);
67 methods.add(signature);
69 final Comment c = n.getComment();
70 if (c instanceof JavadocComment) {
71 methodJavadoc.put(signature, c.toString());
77 public void visit(final FieldDeclaration n, final Void arg) {
78 fieldDeclarations.add(n.toStringWithoutComments());
83 public void visit(final ClassOrInterfaceDeclaration n, final Void arg) {
86 List<?> superIfcs = n.getImplements();
87 implmts = superIfcs != null && !superIfcs.isEmpty() ? superIfcs.toString() : null;
89 if (!n.isInterface()) {
90 final List<ClassOrInterfaceType> e = n.getExtends();
92 extnds = e.get(0).toString();
97 void assertConstructors(final int expected) {
98 assertEquals("Incorrenct number of generated constructors", expected, constructors.size());
101 void assertField(final String declaration) {
102 assertTrue("Missing field " + declaration + ", got: " + fieldDeclarations,
103 fieldDeclarations.contains(declaration + ";"));
106 void assertFields(final int expected) {
107 assertEquals("Incorrect number of generated fields", expected, fieldDeclarations.size());
110 void assertMethodJavadoc(final String method, final String signature) {
111 assertNotNull("Missing javadoc for " + method + " method " + methodJavadoc, methodJavadoc.get(signature));
114 void assertMethodJavadocs(final int expected) {
115 assertEquals("Incorrenct number of generated method javadoc", expected, methodJavadoc.size());