3fc32dc0fcd692de139f7beb8d82fd445205c2e3
[controller.git] / opendaylight / config / yang-jmx-generator-plugin / src / test / java / org / opendaylight / controller / config / yangjmxgenerator / plugin / MbeASTVisitor.java
1 /*
2  * Copyright (c) 2016 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.yangjmxgenerator.plugin;
9
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;
25 import java.util.Map;
26 import java.util.Set;
27 import org.opendaylight.controller.config.api.annotations.RequireInterface;
28
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<>();
35
36     String implmts;
37
38     MbeASTVisitor(final String expectedPackageName, final String fileName) {
39         super(expectedPackageName, fileName);
40     }
41
42     @Override
43     public void visit(final NormalAnnotationExpr expr, final Void arg) {
44         super.visit(expr, arg);
45
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().toString(), reqVal);
53             }
54         }
55     }
56
57     @Override
58     public void visit(final ConstructorDeclaration n, final Void arg) {
59         constructors.add(n.toString());
60         super.visit(n, arg);
61     }
62
63     @Override
64     public void visit(final MethodDeclaration n, final Void arg) {
65         final String signature = n.getDeclarationAsString(false, false);
66
67         methods.add(signature);
68
69         final Comment c = n.getComment();
70         if (c instanceof JavadocComment) {
71             methodJavadoc.put(signature, c.toString());
72         }
73         super.visit(n, arg);
74     }
75
76     @Override
77     public void visit(final FieldDeclaration n, final Void arg) {
78         fieldDeclarations.add(n.toStringWithoutComments());
79         super.visit(n, arg);
80     }
81
82     @Override
83     public void visit(final ClassOrInterfaceDeclaration n, final Void arg) {
84         super.visit(n, arg);
85
86         List<?> superIfcs = n.getImplements();
87         implmts = superIfcs != null && !superIfcs.isEmpty() ? superIfcs.toString() : null;
88
89         if (!n.isInterface()) {
90             final List<ClassOrInterfaceType> e = n.getExtends();
91             if (!e.isEmpty()) {
92                 extnds = e.get(0).toString();
93             }
94         }
95     }
96
97     void assertConstructors(final int expected) {
98         assertEquals("Incorrenct number of generated constructors", expected, constructors.size());
99     }
100
101     void assertField(final String declaration) {
102         assertTrue("Missing field " + declaration + ", got: " + fieldDeclarations,
103             fieldDeclarations.contains(declaration + ";"));
104     }
105
106     void assertFields(final int expected) {
107         assertEquals("Incorrect number of generated fields", expected, fieldDeclarations.size());
108     }
109
110     void assertMethodJavadoc(final String method, final String signature) {
111         assertNotNull("Missing javadoc for " + method + " method " + methodJavadoc, methodJavadoc.get(signature));
112     }
113
114     void assertMethodJavadocs(final int expected) {
115         assertEquals("Incorrenct number of generated method javadoc", expected, methodJavadoc.size());
116     }
117 }

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.