langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/PackageGenerator.java
author shurailine
Tue, 21 Feb 2017 15:38:07 -0800
changeset 44015 27aa35eb727c
parent 38838 3d6ea76b35d6
permissions -rw-r--r--
8151220: Extend sample API to use modules. Reviewed-by: ksrini
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     1
/*
37641
6949903ba85a 8151777: Add "@index" tag to the sampleapi generator
ksrini
parents: 35426
diff changeset
     2
 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     4
 *
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     7
 * published by the Free Software Foundation.
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     8
 *
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    13
 * accompanied this code).
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    14
 *
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    18
 *
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    21
 * questions.
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    22
 */
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    23
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    24
package sampleapi.generator;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    25
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    26
import java.io.File;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    27
import java.io.FileWriter;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    28
import java.io.IOException;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    29
import java.util.ArrayList;
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    30
import java.util.HashMap;
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    31
import java.util.Map;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    32
import javax.xml.parsers.DocumentBuilderFactory;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    33
import org.w3c.dom.Element;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    34
import org.w3c.dom.Node;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    35
import org.w3c.dom.NodeList;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    36
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    37
import com.sun.source.util.JavacTask;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    38
import com.sun.tools.javac.api.JavacTool;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    39
import com.sun.tools.javac.api.JavacTaskImpl;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    40
import com.sun.tools.javac.util.Context;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    41
import com.sun.tools.javac.util.Name;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    42
import com.sun.tools.javac.util.Names;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    43
import com.sun.tools.javac.util.List;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    44
import com.sun.tools.javac.util.ListBuffer;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    45
import com.sun.tools.javac.tree.TreeMaker;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    46
import com.sun.tools.javac.tree.JCTree;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    47
import com.sun.tools.javac.tree.JCTree.*;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    48
import com.sun.tools.javac.code.Flags;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    49
import com.sun.tools.javac.code.Type;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    50
import com.sun.tools.javac.code.TypeTag;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    51
import com.sun.tools.javac.code.Symbol;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    52
import com.sun.tools.javac.code.Symtab;
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    53
import java.nio.file.Path;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    54
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    55
import sampleapi.util.*;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    56
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    57
public class PackageGenerator {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    58
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    59
    public String packageName;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    60
    String packageDirName;
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    61
    public String id;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    62
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    63
    ArrayList<JCCompilationUnit> topLevels;
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    64
    Map<String, Integer> nameIndex;
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    65
    public Map<String, JCClassDecl> idBases;
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    66
    Map<String, JCAnnotation> idAnnos;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    67
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    68
    TreeMaker make;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    69
    Names names;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    70
    Symtab syms;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    71
    DocumentBuilderFactory factory;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    72
    Documentifier documentifier;
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    73
    boolean fx;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    74
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    75
    public PackageGenerator() {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    76
        JavacTool jt = JavacTool.create();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    77
        JavacTask task = jt.getTask(null, null, null, null, null, null);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    78
        Context ctx = ((JavacTaskImpl)task).getContext();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    79
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    80
        make = TreeMaker.instance(ctx);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    81
        names = Names.instance(ctx);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    82
        syms = Symtab.instance(ctx);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    83
        factory = DocumentBuilderFactory.newInstance();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    84
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    85
        documentifier = Documentifier.instance(ctx);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    86
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    87
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
    88
    boolean isDataSetProcessed = false;
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
    89
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    90
    public static PackageGenerator processDataSet(Element rootElement) {
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    91
        PackageGenerator result = new PackageGenerator();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    92
        result.isDataSetProcessed = true;
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    93
        result.topLevels = new ArrayList<>();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    94
        result.nameIndex = new HashMap<>();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    95
        result.idBases = new HashMap<>();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    96
        result.idAnnos = new HashMap<>();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    97
        result.fx = false;
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    98
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
    99
        if (!rootElement.getTagName().equals("package")) {
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   100
            throw new IllegalStateException("Unexpected tag name: "
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   101
                    + rootElement.getTagName());
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   102
        }
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   103
        result.packageName = rootElement.getAttribute("name");
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   104
        result.id = rootElement.getAttribute("id");
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   105
        result.fx = "fx".equals(rootElement.getAttribute("style"));
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   106
        result.packageDirName = result.packageName.replace('.', '/');
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   107
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   108
        // process nodes (toplevels)
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   109
        NodeList nodeList = rootElement.getChildNodes();
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   110
        for (int i = 0; i < nodeList.getLength(); i++) {
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   111
            Node node = nodeList.item(i);
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   112
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   113
            if (!(node instanceof Element)) {
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   114
                continue;
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   115
            }
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   116
            result.processTopLevel((Element) node);
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   117
        }
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   118
        return result;
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   119
    }
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   120
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   121
    public void generate(Path outDir) {
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   122
        if (!isDataSetProcessed)
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   123
            throw new RuntimeException("No Data Set processed");
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   124
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   125
        try {
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   126
            File pkgDir = new File(outDir.toFile(), packageDirName);
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   127
            pkgDir.mkdirs();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   128
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   129
            for (JCCompilationUnit decl : topLevels) {
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   130
                JCClassDecl classDecl = (JCClassDecl) decl.getTypeDecls().get(0);
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   131
                File outFile
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   132
                        = new File(pkgDir, classDecl.getSimpleName().toString() + ".java");
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   133
                FileWriter writer = new FileWriter(outFile);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   134
                writer.write(decl.toString());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   135
                writer.flush();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   136
                writer.close();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   137
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   138
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   139
            // package-info
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   140
            File outFile = new File(pkgDir, "package-info.java");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   141
            FileWriter writer = new FileWriter(outFile);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   142
            writer.write("/**\n");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   143
            writer.write(documentifier.getDocGenerator().getPackageComment());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   144
            writer.write("*/\n");
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   145
            writer.write("package " + packageName + ";\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   146
            writer.flush();
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   147
            writer.close();
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   148
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   149
            // overview
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   150
            outFile = new File(pkgDir, "overview.html");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   151
            writer = new FileWriter(outFile);
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   152
            writer.write("<html>\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   153
            writer.write("<head>\n<title>" + packageName + "</title>\n</head>\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   154
            writer.write("<body>\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   155
            writer.write("<p>Package " + packageName + " overview.\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   156
            writer.write("</body>\n");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   157
            writer.write("</html>\n");
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   158
            writer.flush();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   159
            writer.close();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   160
        } catch (IOException e) {
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   161
            throw new RuntimeException("Error writing output");
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   162
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   163
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   164
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   165
    // levels' processing methods
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   166
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   167
    void processTopLevel(Element tlTag) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   168
        String kind = tlTag.getTagName();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   169
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   170
        if (kind.equals("annodecl")) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   171
            // decls stored separately, does not affect bases
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   172
            String declId = tlTag.getAttribute("id");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   173
            if (!declId.startsWith("@"))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   174
                declId = "@" + declId;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   175
            idAnnos.put(declId, processAnnoDecl(tlTag));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   176
            return;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   177
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   178
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   179
        ListBuffer<JCTree>[] bases = processBases(tlTag, null);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   180
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   181
        for (JCTree base : bases[0]) { // [0] - bases namely
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   182
            JCPackageDecl pkg = make.PackageDecl(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   183
                                    List.<JCAnnotation>nil(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   184
                                    make.QualIdent(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   185
                                        new Symbol.PackageSymbol(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   186
                                            names.fromString(packageName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   187
                                            null)));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   188
            ListBuffer<JCTree> topLevelParts = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   189
            topLevelParts.append(pkg);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   190
            topLevelParts.appendList(bases[1]); // [1] imports
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   191
            topLevelParts.append(base);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   192
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   193
            JCCompilationUnit topLevel = make.TopLevel(topLevelParts.toList());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   194
            documentifier.documentify(topLevel, fx);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   195
            topLevels.add(topLevel);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   196
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   197
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   198
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   199
    ListBuffer<JCTree>[] processBases(Element baseTag, HashMap<String, Integer> scope) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   200
        String kind = baseTag.getTagName();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   201
        String baseName = baseTag.getAttribute("basename");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   202
        String typeParam = baseTag.getAttribute("tparam");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   203
        String baseId = baseTag.getAttribute("id");
44015
27aa35eb727c 8151220: Extend sample API to use modules.
shurailine
parents: 38838
diff changeset
   204
        System.out.println("Found class id: " + baseId);
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   205
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   206
        long kindFlag = 0;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   207
        switch (kind) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   208
            case "class":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   209
                // no flags for class
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   210
                break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   211
            case "interface":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   212
                kindFlag |= Flags.INTERFACE;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   213
                break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   214
            case "enum":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   215
                kindFlag |= Flags.ENUM;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   216
                break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   217
            case "annotation":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   218
                kindFlag |= Flags.ANNOTATION | Flags.INTERFACE;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   219
                break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   220
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   221
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   222
        // go through other nodes; add modifiers to multiplier
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   223
        NodeList nodes = baseTag.getChildNodes();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   224
        ListBuffer<JCTree> bases = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   225
        ListBuffer<JCTree> members = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   226
        ListBuffer<JCTree> imports = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   227
        JCExpression extType = null;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   228
        ListBuffer<JCExpression> implTypes = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   229
        SimpleMultiplier multiply = new SimpleMultiplier();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   230
        for (int i = 0; i < nodes.getLength(); i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   231
            Node node = nodes.item(i);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   232
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   233
            if (!(node instanceof Element))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   234
                continue;
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   235
            Element element = (Element)node;
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   236
            switch (element.getTagName()) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   237
                case "modifier":
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   238
                    multiply.addAxis(element.getTextContent());
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   239
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   240
                case "anno":
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   241
                    multiply.addAxis(element.getTextContent());
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   242
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   243
                case "member":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   244
                    // process members here
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   245
                    members.appendList(processMembers(element, baseName, kind));
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   246
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   247
                case "extend":
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   248
                    String classId = element.getAttribute("id");   // this pkg
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   249
                    String classRef = element.getAttribute("ref"); // external
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   250
                    if (classId.length() !=0 &&
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   251
                        idBases.containsKey(classId)) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   252
                        // if have base, take methods from base members
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   253
                        JCClassDecl baseDecl = idBases.get(classId);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   254
                        extType = make.Type(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   255
                                      getTypeByName(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   256
                                          baseDecl.getSimpleName().toString()));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   257
                        members.appendList(processMethods(baseDecl.getMembers(), false));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   258
                    } else if (classRef.length() !=0) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   259
                        extType = make.Type(getTypeByName(classRef));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   260
                    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   261
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   262
                case "implement":
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   263
                    String interfaceId = element.getAttribute("id");
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   264
                    String interfaceRef = element.getAttribute("ref");
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   265
                    if (interfaceId.length() != 0 &&
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   266
                        idBases.containsKey(interfaceId)) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   267
                        JCClassDecl baseDecl = idBases.get(interfaceId);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   268
                        implTypes.add(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   269
                            make.Type(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   270
                                getTypeByName(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   271
                                    baseDecl.getSimpleName().toString())));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   272
                        members.appendList(processMethods(baseDecl.getMembers(), true));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   273
                    } else if (interfaceRef.length() != 0) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   274
                        implTypes.add(make.Type(getTypeByName(interfaceRef)));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   275
                    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   276
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   277
                case "import":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   278
                    imports.append(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   279
                        make.Import(
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   280
                            make.Ident(names.fromString(element.getTextContent())),
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   281
                            false));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   282
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   283
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   284
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   285
        // process modifiers through multiplier
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   286
        multiply.initIterator();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   287
        while (multiply.hasNext()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   288
            ArrayList<String> tuple = multiply.getNext();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   289
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   290
            long declFlags = kindFlag;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   291
            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   292
            for (String modifier : tuple) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   293
                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   294
                    annos.add(idAnnos.get(modifier)); // it's anno
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   295
                else
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   296
                    declFlags |= getFlagByName(modifier); // it's modifier
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   297
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   298
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   299
            String declName = (scope == null)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   300
                                  ? getUniqName(baseName)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   301
                                  : baseName + getUniqIndex(scope, baseName);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   302
            JCClassDecl baseDecl = make.ClassDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   303
                                       make.Modifiers(declFlags, annos.toList()),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   304
                                       names.fromString(declName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   305
                                       processTypeParams(typeParam), // type params
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   306
                                       extType,                      // ext
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   307
                                       implTypes.toList(),           // impl
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   308
                                       members.toList());            // members
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   309
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   310
            // fix constructors names
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   311
            fixConstructorNames(baseDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   312
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   313
            bases.append(baseDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   314
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   315
            // for non-empty ids store first base occurence from multiplied sequence
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   316
            if (baseId.length() != 0) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   317
                idBases.put(baseId, baseDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   318
                baseId = "";
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   319
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   320
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   321
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   322
        return new ListBuffer[] { bases, imports };
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   323
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   324
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   325
    List<JCTypeParameter> processTypeParams(String typeParams) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   326
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   327
        if (typeParams == null || typeParams.length() == 0)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   328
            return List.<JCTypeParameter>nil(); // empty
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   329
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   330
        String[] typeVarsArr = typeParams.split(",");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   331
        ListBuffer<JCTypeParameter> typeParamsDecls = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   332
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   333
        for (String typeVar : typeVarsArr) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   334
            typeParamsDecls.add(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   335
                make.TypeParameter(names.fromString(typeVar),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   336
                                    List.<JCExpression>nil()));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   337
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   338
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   339
        return typeParamsDecls.toList();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   340
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   341
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   342
    ListBuffer<JCTree> processMembers(Element memberTag, String name, String kind) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   343
        ListBuffer<JCTree> members = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   344
        NodeList nodes = memberTag.getChildNodes();
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   345
        HashMap<String, Integer> scope = new HashMap<>();
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   346
        for (int i = 0; i < nodes.getLength(); i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   347
            Node node = nodes.item(i);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   348
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   349
            if (!(node instanceof Element))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   350
                continue;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   351
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   352
            switch (((Element)node).getTagName()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   353
                case "field":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   354
                    members.appendList(processFields((Element)node, scope));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   355
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   356
                case "serialfield":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   357
                    members.append(processSerialFields((Element)node));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   358
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   359
                case "constant":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   360
                    members.appendList(processConstants((Element)node, scope));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   361
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   362
                case "constructor":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   363
                    members.appendList(processMethods((Element)node, scope, true, true));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   364
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   365
                case "method":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   366
                    boolean needBody = kind.equals("class") || kind.equals("enum");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   367
                    members.appendList(processMethods((Element)node, scope, needBody, false));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   368
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   369
                case "class":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   370
                case "interface":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   371
                case "enum":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   372
                case "annotation":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   373
                    members.appendList(processBases((Element)node, scope)[0]);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   374
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   375
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   376
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   377
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   378
        return members;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   379
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   380
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   381
    ListBuffer<JCTree> processFields(Element fieldsNode, HashMap<String, Integer> scope) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   382
        String kind = fieldsNode.getTagName();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   383
        String baseName = fieldsNode.getAttribute("basename");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   384
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   385
        ListBuffer<JCTree> fields = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   386
        NodeList nodes = fieldsNode.getChildNodes();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   387
        SimpleMultiplier multiply = new SimpleMultiplier(); // for modifiers
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   388
        String[] types = new String[] {};
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   389
        for (int i = 0; i < nodes.getLength(); i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   390
            Node node = nodes.item(i);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   391
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   392
            if (!(node instanceof Element))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   393
                continue;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   394
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   395
            // parse type and modifiers
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   396
            switch (((Element)node).getTagName()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   397
                case "modifier":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   398
                    multiply.addAxis(((Element)node).getTextContent());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   399
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   400
                case "anno":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   401
                    multiply.addAxis(((Element)node).getTextContent());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   402
                case "type":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   403
                    types = ((Element)node).getTextContent().split("\\|");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   404
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   405
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   406
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   407
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   408
        // process through modifiers and types
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   409
        multiply.initIterator();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   410
        while (multiply.hasNext()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   411
            ArrayList<String> tuple = multiply.getNext();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   412
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   413
            long declFlags = 0;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   414
            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   415
            for (String modifier : tuple) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   416
                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   417
                    annos.add(idAnnos.get(modifier)); // it's anno
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   418
                else
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   419
                    declFlags |= getFlagByName(modifier); // it's modifier
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   420
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   421
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   422
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   423
            for (String type : types) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   424
                String declName = baseName + getUniqIndex(scope, baseName);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   425
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   426
                Type initType = getTypeByName(type);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   427
                JCExpression initExpr = null;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   428
                if ((declFlags & Flags.STATIC) != 0) // static to be initialized
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   429
                    initExpr = make.Literal(initType.isPrimitive() ?
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   430
                                             initType.getTag() :
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   431
                                             TypeTag.BOT,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   432
                                             "String".equals(type)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   433
                                                 ? new String("blah-blah-blah")
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   434
                                                 : Integer.valueOf(0));
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   435
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   436
                JCVariableDecl fieldDecl = make.VarDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   437
                                               make.Modifiers(declFlags, annos.toList()),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   438
                                               names.fromString(declName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   439
                                               make.Type(getTypeByName(type)),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   440
                                               initExpr);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   441
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   442
                fields.append(fieldDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   443
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   444
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   445
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   446
        return fields;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   447
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   448
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   449
    JCTree processSerialFields(Element sfNode) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   450
        String baseName = sfNode.getAttribute("basename");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   451
        String[] fieldTypes = sfNode.getTextContent().split(",");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   452
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   453
        ListBuffer<JCExpression> serialFields = new ListBuffer<>();
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   454
        HashMap<String, Integer> scope = new HashMap<>();
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   455
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   456
        for (String fType : fieldTypes) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   457
            String fieldName = baseName + getUniqIndex(scope, baseName);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   458
            serialFields.add(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   459
                make.NewClass(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   460
                    null,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   461
                    null,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   462
                    make.Type(getTypeByName("ObjectStreamField")),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   463
                    List.from(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   464
                        new JCTree.JCExpression[] {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   465
                            make.Literal(fieldName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   466
                            make.Ident(names.fromString(fType + ".class"))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   467
                        }),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   468
                    null));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   469
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   470
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   471
        JCTree sfDecl = make.VarDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   472
                            make.Modifiers(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   473
                                Flags.PRIVATE | Flags.STATIC | Flags.FINAL),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   474
                            names.fromString("serialPersistentFields"),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   475
                            make.TypeArray(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   476
                                make.Type(getTypeByName("ObjectStreamField"))),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   477
                            make.NewArray(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   478
                                null,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   479
                                List.<JCExpression>nil(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   480
                                serialFields.toList()));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   481
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   482
        return sfDecl;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   483
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   484
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   485
    ListBuffer<JCTree> processConstants(Element constNode, HashMap<String, Integer> scope) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   486
        String baseName = constNode.getAttribute("basename");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   487
        int count = 1;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   488
        try {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   489
            count = Integer.parseInt(constNode.getAttribute("count"));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   490
        } catch (Exception e) {} // nothing to do, will use count = 1
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   491
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   492
        long declFlags = Flags.PUBLIC | Flags.STATIC | Flags.FINAL | Flags.ENUM;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   493
        ListBuffer<JCTree> fields = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   494
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   495
        for (int i = 0; i < count; i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   496
            String declName = baseName +
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   497
                              ((count == 1) ? "" : getUniqIndex(scope, baseName));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   498
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   499
            JCVariableDecl constDecl = make.VarDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   500
                                           make.Modifiers(declFlags),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   501
                                           names.fromString(declName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   502
                                           null,  // no need for type in enum decl
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   503
                                           null); // no init
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   504
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   505
            fields.append(constDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   506
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   507
        return fields;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   508
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   509
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   510
    ListBuffer<JCTree> processMethods(Element methodsNode, HashMap<String, Integer> scope, boolean needBody, boolean isConstructor) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   511
        String kind = methodsNode.getTagName();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   512
        String baseName = methodsNode.getAttribute("basename");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   513
        String name = methodsNode.getAttribute("name");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   514
        String methodTypeParam = methodsNode.getAttribute("tparam");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   515
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   516
        ListBuffer<JCTree> methods = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   517
        NodeList nodes = methodsNode.getChildNodes();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   518
        SimpleMultiplier multiply = new SimpleMultiplier(); // for modifiers
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   519
        String[] types = new String[0];
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   520
        String[] params = new String[] { "none" }; // default - no params
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   521
        ListBuffer<Type> throwTypes = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   522
        for (int i = 0; i < nodes.getLength(); i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   523
            Node node = nodes.item(i);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   524
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   525
            if (!(node instanceof Element))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   526
                continue;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   527
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   528
            // parse type and modifiers
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   529
            switch (((Element)node).getTagName()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   530
                case "modifier":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   531
                    multiply.addAxis(((Element)node).getTextContent());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   532
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   533
                case "anno":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   534
                    multiply.addAxis(((Element)node).getTextContent());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   535
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   536
                case "type":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   537
                    types = ((Element)node).getTextContent().split("\\|");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   538
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   539
                case "param":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   540
                    params = ((Element)node).getTextContent().split("\\|");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   541
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   542
                case "throw":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   543
                    throwTypes.add(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   544
                        getTypeByName(((Element)node).getTextContent()));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   545
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   546
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   547
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   548
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   549
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   550
        // constructor?
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   551
        if (isConstructor) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   552
            baseName = "constructor";
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   553
            types = new String[] { "" };
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   554
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   555
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   556
        // direct name not indexed
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   557
        boolean isDirectName = false;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   558
        if (name.length() > 0) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   559
            baseName = name;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   560
            isDirectName = true;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   561
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   562
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   563
        // process through modifiers and types
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   564
        multiply.initIterator();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   565
        while (multiply.hasNext()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   566
            ArrayList<String> tuple = multiply.getNext();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   567
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   568
            long declFlags = 0;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   569
            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   570
            for (String modifier : tuple) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   571
                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   572
                    annos.add(idAnnos.get(modifier)); // it's anno
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   573
                else
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   574
                    declFlags |= getFlagByName(modifier); // it's modifier
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   575
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   576
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   577
            for (String type : types) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   578
                String declName = baseName
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   579
                                  + ((isConstructor || isDirectName)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   580
                                     ? "" : getUniqIndex(scope, baseName));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   581
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   582
                JCBlock body = null;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   583
                if (needBody && (declFlags & Flags.ABSTRACT) == 0) { // create body
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   584
                    List<JCStatement> bodyStatements = List.<JCStatement>nil();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   585
                    if (!type.equals("") && !type.equals("void")) { // create return statement
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   586
                        Type retType = getTypeByName(type);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   587
                        bodyStatements = List.<JCStatement>of(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   588
                                             make.Return(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   589
                                                 make.Literal(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   590
                                                     retType.isPrimitive() ?
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   591
                                                         retType.getTag() :
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   592
                                                         TypeTag.BOT,
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   593
                                                     Integer.valueOf(0))));
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   594
                    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   595
                    body = make.Block(0, bodyStatements);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   596
                }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   597
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   598
                // same method by different params (if they exist)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   599
                for (String param : params) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   600
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   601
                    JCMethodDecl methodDecl =
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   602
                        make.MethodDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   603
                            make.Modifiers(declFlags, annos.toList()),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   604
                            names.fromString(declName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   605
                            isConstructor ? null : make.Type(getTypeByName(type)),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   606
                            processTypeParams(methodTypeParam), // type params
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   607
                            null,                               // no receiver
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   608
                            processParams(param),               // formal params
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   609
                            make.Types(throwTypes.toList()),   // throws
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   610
                            body,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   611
                            null);                              // no default value YET
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   612
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   613
                    methods.append(methodDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   614
                }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   615
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   616
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   617
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   618
        return methods;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   619
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   620
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   621
    JCAnnotation processAnnoDecl(Element annoDeclNode) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   622
        String annoId = annoDeclNode.getAttribute("id");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   623
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   624
        ListBuffer<JCExpression> args = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   625
        String className = "";
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   626
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   627
        NodeList nodes = annoDeclNode.getChildNodes();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   628
        for (int i = 0; i < nodes.getLength(); i++) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   629
            Node node = nodes.item(i);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   630
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   631
            if (!(node instanceof Element))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   632
                continue;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   633
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   634
            switch (((Element)node).getTagName()) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   635
                case "class":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   636
                    className = ((Element)node).getTextContent();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   637
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   638
                case "arg":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   639
                    String argName = ((Element)node).getAttribute("name");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   640
                    String argValue = ((Element)node).getAttribute("value");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   641
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   642
                    JCExpression arg;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   643
                    if (argName.length() == 0)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   644
                        arg = make.Ident(names.fromString(argValue));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   645
                    else
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   646
                        arg = make.Assign(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   647
                                  make.Ident(names.fromString(argName)),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   648
                                  make.Ident(names.fromString(argValue)));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   649
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   650
                    args.add(arg);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   651
                    break;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   652
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   653
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   654
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   655
        return make.Annotation(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   656
                   make.Ident(names.fromString(className)),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   657
                   args.toList());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   658
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   659
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   660
    ListBuffer<JCTree> processMethods(List<JCTree> tree, boolean needBody) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   661
        // for "extends" clause; returns methods only
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   662
        ListBuffer<JCTree> methods = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   663
        for (JCTree memberDecl : tree) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   664
            if (memberDecl instanceof JCMethodDecl) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   665
                JCMethodDecl methodDecl = (JCMethodDecl)memberDecl;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   666
                JCTree retTypeTree = methodDecl.getReturnType();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   667
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   668
                // skip constructors
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   669
                if (retTypeTree == null)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   670
                    continue;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   671
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   672
                if (needBody) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   673
                    // here we need to 'implement' interface declared methods
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   674
                    Type retType = retTypeTree.type;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   675
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   676
                    List<JCStatement> bodyStatements = List.<JCStatement>nil();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   677
                    if (retType.getTag() != TypeTag.VOID)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   678
                        bodyStatements = List.<JCStatement>of(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   679
                                             make.Return(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   680
                                                 make.Literal(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   681
                                                     retType.isPrimitive() ?
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   682
                                                         retType.getTag() :
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   683
                                                         TypeTag.BOT,
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   684
                                                     Integer.valueOf(0))));
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   685
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   686
                    JCBlock body = make.Block(0, bodyStatements);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   687
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   688
                    methodDecl = make.MethodDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   689
                                     methodDecl.getModifiers(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   690
                                     methodDecl.getName(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   691
                                     (JCExpression)methodDecl.getReturnType(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   692
                                     methodDecl.getTypeParameters(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   693
                                     methodDecl.getReceiverParameter(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   694
                                     methodDecl.getParameters(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   695
                                     methodDecl.getThrows(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   696
                                     body,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   697
                                     (JCExpression)methodDecl.getDefaultValue());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   698
                }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   699
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   700
                methods.add(methodDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   701
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   702
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   703
        return methods;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   704
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   705
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   706
    void fixConstructorNames(JCClassDecl baseDecl) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   707
        ListBuffer<JCTree> newMembers = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   708
        List<JCTree> members = baseDecl.getMembers();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   709
        Name name = baseDecl.getSimpleName();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   710
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   711
        for (JCTree memberDecl : members) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   712
            JCTree newDecl = memberDecl;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   713
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   714
            if (memberDecl instanceof JCMethodDecl) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   715
                JCMethodDecl methodDecl = (JCMethodDecl)memberDecl;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   716
                JCTree retTypeTree = methodDecl.getReturnType();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   717
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   718
                if (retTypeTree == null)
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   719
                    newDecl = make.MethodDef(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   720
                                  methodDecl.getModifiers(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   721
                                  name,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   722
                                  (JCExpression)methodDecl.getReturnType(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   723
                                  methodDecl.getTypeParameters(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   724
                                  methodDecl.getReceiverParameter(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   725
                                  methodDecl.getParameters(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   726
                                  methodDecl.getThrows(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   727
                                  methodDecl.getBody(),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   728
                                  (JCExpression)methodDecl.getDefaultValue());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   729
            }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   730
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   731
            newMembers.add(newDecl);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   732
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   733
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   734
        baseDecl.defs = newMembers.toList();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   735
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   736
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   737
    List<JCVariableDecl> processParams(String paramTypes) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   738
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   739
        if ("none".equals(paramTypes))
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   740
            return List.<JCVariableDecl>nil(); // empty
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   741
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   742
        String[] typesArr = paramTypes.split(",(?!(\\w+,)*\\w+>)");
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   743
        ListBuffer<JCVariableDecl> paramsDecls = new ListBuffer<>();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   744
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   745
        int i = 0;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   746
        for (String typeName : typesArr) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   747
            String paramName = "param"
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   748
                               + (typesArr.length == 1 ? "" : String.valueOf(i));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   749
            paramsDecls.add(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   750
                make.VarDef(make.Modifiers(0),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   751
                             names.fromString(paramName),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   752
                             make.Type(getTypeByName(typeName)),
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   753
                             null));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   754
            i++;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   755
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   756
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   757
        return paramsDecls.toList();
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   758
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   759
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   760
    //
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   761
    // util methods
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   762
    //
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   763
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   764
    String getUniqName(String name) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   765
        if (!nameIndex.containsKey(name))
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   766
            nameIndex.put(name, 0);
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   767
        Integer index = nameIndex.get(name);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   768
        String uniqName = name + index;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   769
        nameIndex.put(name, index + 1);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   770
        return uniqName;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   771
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   772
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   773
    int getUniqIndex(HashMap<String, Integer> scope, String name) {
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   774
        if (!scope.containsKey(name))
38838
3d6ea76b35d6 8157975: Remove duplicate files in sample API
ksrini
parents: 37641
diff changeset
   775
            scope.put(name, 0);
33919
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   776
        Integer index = scope.get(name);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   777
        scope.put(name, index + 1);
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   778
        return index;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   779
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   780
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   781
    long getFlagByName(String modifierName) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   782
        switch (modifierName) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   783
            case "public":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   784
                return Flags.PUBLIC;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   785
            case "private":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   786
                return Flags.PRIVATE;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   787
            case "protected":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   788
                return Flags.PROTECTED;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   789
            case "static":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   790
                return Flags.STATIC;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   791
            case "final":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   792
                return Flags.FINAL;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   793
            case "abstract":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   794
                return Flags.ABSTRACT;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   795
            case "strictfp":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   796
                return Flags.STRICTFP;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   797
            default:
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   798
                return 0;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   799
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   800
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   801
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   802
    Type getTypeByName(String typeName) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   803
        //check for primitive types
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   804
        switch (typeName) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   805
            case "void":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   806
                return syms.voidType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   807
            case "boolean":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   808
                return syms.booleanType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   809
            case "byte":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   810
                return syms.byteType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   811
            case "char":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   812
                return syms.charType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   813
            case "double":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   814
                return syms.doubleType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   815
            case "float":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   816
                return syms.floatType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   817
            case "int":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   818
                return syms.intType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   819
            case "long":
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   820
                return syms.longType;
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   821
            default:
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   822
                return getTypeByName(typeName, List.<Type>nil());
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   823
        }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   824
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   825
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   826
    Type getTypeByName(String typeName, List<Type> tparams) {
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   827
        return new Type.ClassType(
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   828
                   Type.noType,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   829
                   tparams,
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   830
                   new Symbol.ClassSymbol(0, names.fromString(typeName), null));
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   831
    }
e9fccc09cfc6 8130880: Create sampleapi regression test
ksrini
parents:
diff changeset
   832
}