langtools/make/tools/genstubs/GenStubs.java
author jjh
Wed, 15 Aug 2012 13:48:46 -0700
changeset 13631 dc1212c348f9
parent 13184 8bc3123a920e
child 14364 d79536133493
permissions -rw-r--r--
7191449: update copyright year to match last edit in jdk8 langtools repository Reviewed-by: jjh Contributed-by: steve.sides@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     1
/*
13631
dc1212c348f9 7191449: update copyright year to match last edit in jdk8 langtools repository
jjh
parents: 13184
diff changeset
     2
 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     4
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 4703
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 4703
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    10
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    15
 * accompanied this code).
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    16
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    20
 *
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 4703
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 4703
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 4703
diff changeset
    23
 * questions.
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    24
 */
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    25
12085
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
    26
package genstubs;
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
    27
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    28
import java.io.*;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    29
import java.util.*;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    30
import javax.tools.JavaFileObject;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    31
import javax.tools.StandardJavaFileManager;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    32
import javax.tools.StandardLocation;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    33
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    34
import com.sun.source.tree.CompilationUnitTree;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    35
import com.sun.source.util.JavacTask;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    36
import com.sun.tools.javac.api.JavacTool;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    37
import com.sun.tools.javac.code.Flags;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    38
import com.sun.tools.javac.code.TypeTags;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    39
import com.sun.tools.javac.tree.JCTree;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    40
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    41
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    42
import com.sun.tools.javac.tree.JCTree.JCIdent;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    43
import com.sun.tools.javac.tree.JCTree.JCImport;
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    44
import com.sun.tools.javac.tree.JCTree.JCLiteral;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    45
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    46
import com.sun.tools.javac.tree.JCTree.JCModifiers;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    47
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    48
import com.sun.tools.javac.tree.Pretty;
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    49
import com.sun.tools.javac.tree.TreeMaker;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    50
import com.sun.tools.javac.tree.TreeScanner;
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    51
import com.sun.tools.javac.tree.TreeTranslator;
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    52
import com.sun.tools.javac.util.Context;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    53
import com.sun.tools.javac.util.ListBuffer;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    54
import com.sun.tools.javac.util.Name;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
    55
import javax.tools.JavaFileManager;
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    56
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    57
/**
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    58
 * Generate stub source files by removing implementation details from input files.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    59
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    60
 * This is a special purpose stub generator, specific to the needs of generating
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    61
 * stub files for JDK 7 API that are needed to compile langtools files that depend
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    62
 * on that API. The stub generator works by removing as much of the API source code
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    63
 * as possible without affecting the public signature, in order to reduce the
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    64
 * transitive closure of the API being referenced. The resulting stubs can be
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    65
 * put on the langtools sourcepath with -implicit:none to compile the langtools
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    66
 * files that depend on the JDK 7 API.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    67
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    68
 * Usage:
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    69
 *  genstubs -s <outdir> -sourcepath <path> <classnames>
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    70
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    71
 * The specified class names are looked up on the sourcepath, and corresponding
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    72
 * stubs are written to the source output directory.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    73
 *
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    74
 * Classes are parsed into javac ASTs, then processed with a javac TreeTranslator
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    75
 * to remove implementation details, and written out in the source output directory.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    76
 * Documentation comments and annotations are removed. Method bodies are removed
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    77
 * and methods are marked native. Private and package-private field definitions
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    78
 * have their initializers replace with 0, 0.0, false, null as appropriate.
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    79
 */
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    80
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    81
public class GenStubs {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    82
    static class Fault extends Exception {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    83
        private static final long serialVersionUID = 0;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    84
        Fault(String message) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    85
            super(message);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    86
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    87
        Fault(String message, Throwable cause) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    88
            super(message);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    89
            initCause(cause);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    90
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    91
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    92
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    93
    public static void main(String[] args) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    94
        boolean ok = new GenStubs().run(args);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    95
        if (!ok)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    96
            System.exit(1);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    97
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
    98
12085
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
    99
    public boolean run(String... args) {
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   100
        File outdir = null;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   101
        String sourcepath = null;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   102
        List<String> classes = new ArrayList<String>();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   103
        for (ListIterator<String> iter = Arrays.asList(args).listIterator(); iter.hasNext(); ) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   104
            String arg = iter.next();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   105
            if (arg.equals("-s") && iter.hasNext())
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   106
                outdir = new File(iter.next());
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   107
            else if (arg.equals("-sourcepath") && iter.hasNext())
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   108
                sourcepath = iter.next();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   109
            else if (arg.startsWith("-"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   110
                throw new IllegalArgumentException(arg);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   111
            else {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   112
                classes.add(arg);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   113
                while (iter.hasNext())
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   114
                    classes.add(iter.next());
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   115
            }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   116
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   117
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   118
        return run(sourcepath, outdir, classes);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   119
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   120
12085
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
   121
    public boolean run(String sourcepath, File outdir, List<String> classes) {
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   122
        //System.err.println("run: sourcepath:" + sourcepath + " outdir:" + outdir + " classes:" + classes);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   123
        if (sourcepath == null)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   124
            throw new IllegalArgumentException("sourcepath not set");
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   125
        if (outdir == null)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   126
            throw new IllegalArgumentException("source output dir not set");
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   127
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   128
        JavacTool tool = JavacTool.create();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   129
        StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   130
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   131
        try {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   132
            fm.setLocation(StandardLocation.SOURCE_OUTPUT, Collections.singleton(outdir));
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   133
            fm.setLocation(StandardLocation.SOURCE_PATH, splitPath(sourcepath));
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   134
            List<JavaFileObject> files = new ArrayList<JavaFileObject>();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   135
            for (String c: classes) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   136
                JavaFileObject fo = fm.getJavaFileForInput(
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   137
                        StandardLocation.SOURCE_PATH, c, JavaFileObject.Kind.SOURCE);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   138
                if (fo == null)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   139
                    error("class not found: " + c);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   140
                else
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   141
                    files.add(fo);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   142
            }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   143
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   144
            JavacTask t = tool.getTask(null, fm, null, null, null, files);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   145
            Iterable<? extends CompilationUnitTree> trees = t.parse();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   146
            for (CompilationUnitTree tree: trees) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   147
                makeStub(fm, tree);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   148
            }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   149
        } catch (IOException e) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   150
            error("IO error " + e, e);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   151
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   152
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   153
        return (errors == 0);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   154
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   155
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   156
    void makeStub(StandardJavaFileManager fm, CompilationUnitTree tree) throws IOException {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   157
        CompilationUnitTree tree2 = new StubMaker().translate(tree);
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   158
        CompilationUnitTree tree3 = new ImportCleaner(fm).removeRedundantImports(tree2);
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   159
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   160
        String className = fm.inferBinaryName(StandardLocation.SOURCE_PATH, tree.getSourceFile());
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   161
        JavaFileObject fo = fm.getJavaFileForOutput(StandardLocation.SOURCE_OUTPUT,
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   162
                className, JavaFileObject.Kind.SOURCE, null);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   163
        // System.err.println("Writing " + className + " to " + fo.getName());
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   164
        Writer out = fo.openWriter();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   165
        try {
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   166
            new Pretty(out, true).printExpr((JCTree) tree3);
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   167
        } finally {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   168
            out.close();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   169
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   170
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   171
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   172
    List<File> splitPath(String path) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   173
        List<File> list = new ArrayList<File>();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   174
        for (String p: path.split(File.pathSeparator)) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   175
            if (p.length() > 0)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   176
                list.add(new File(p));
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   177
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   178
        return list;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   179
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   180
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   181
    void error(String message) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   182
        System.err.println(message);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   183
        errors++;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   184
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   185
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   186
    void error(String message, Throwable cause) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   187
        error(message);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   188
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   189
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   190
    int errors;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   191
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   192
    class StubMaker extends TreeTranslator {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   193
        CompilationUnitTree translate(CompilationUnitTree tree) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   194
            return super.translate((JCCompilationUnit) tree);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   195
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   196
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   197
        /**
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   198
         * compilation units: remove javadoc comments
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   199
         * -- required, in order to remove @deprecated tags, since we
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   200
         * (separately) remove all annotations, including @Deprecated
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   201
         */
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   202
        public void visitTopLevel(JCCompilationUnit tree) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   203
            super.visitTopLevel(tree);
13184
8bc3123a920e 7180594: Fix GenStubs in langtools for build-infra builds
erikj
parents: 12085
diff changeset
   204
            tree.docComments = null;
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   205
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   206
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   207
        /**
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   208
         * methods: remove method bodies, make methods native
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   209
         */
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   210
        @Override
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   211
        public void visitMethodDef(JCMethodDecl tree) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   212
            tree.mods = translate(tree.mods);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   213
            tree.restype = translate(tree.restype);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   214
            tree.typarams = translateTypeParams(tree.typarams);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   215
            tree.params = translateVarDefs(tree.params);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   216
            tree.thrown = translate(tree.thrown);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   217
            if (tree.restype != null && tree.body != null) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   218
                tree.mods.flags |= Flags.NATIVE;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   219
                tree.body = null;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   220
            }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   221
            result = tree;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   222
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   223
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   224
        /**
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   225
         * modifiers: remove annotations
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   226
         */
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   227
        @Override
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   228
        public void visitModifiers(JCModifiers tree) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   229
            tree.annotations = com.sun.tools.javac.util.List.nil();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   230
            result = tree;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   231
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   232
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   233
        /**
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   234
         * field definitions: replace initializers with 0, 0.0, false etc
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   235
         * when possible -- i.e. leave public, protected initializers alone
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   236
         */
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   237
        @Override
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   238
        public void visitVarDef(JCVariableDecl tree) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   239
            tree.mods = translate(tree.mods);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   240
            tree.vartype = translate(tree.vartype);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   241
            if (tree.init != null) {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   242
                if ((tree.mods.flags & (Flags.PUBLIC | Flags.PROTECTED)) != 0)
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   243
                    tree.init = translate(tree.init);
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   244
                else {
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   245
                    String t = tree.vartype.toString();
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   246
                    if (t.equals("boolean"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   247
                        tree.init = new JCLiteral(TypeTags.BOOLEAN, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   248
                    else if (t.equals("byte"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   249
                        tree.init = new JCLiteral(TypeTags.BYTE, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   250
                    else if (t.equals("char"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   251
                        tree.init = new JCLiteral(TypeTags.CHAR, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   252
                    else if (t.equals("double"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   253
                        tree.init = new JCLiteral(TypeTags.DOUBLE, 0.d) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   254
                    else if (t.equals("float"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   255
                        tree.init = new JCLiteral(TypeTags.FLOAT, 0.f) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   256
                    else if (t.equals("int"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   257
                        tree.init = new JCLiteral(TypeTags.INT, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   258
                    else if (t.equals("long"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   259
                        tree.init = new JCLiteral(TypeTags.LONG, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   260
                    else if (t.equals("short"))
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   261
                        tree.init = new JCLiteral(TypeTags.SHORT, 0) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   262
                    else
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   263
                        tree.init = new JCLiteral(TypeTags.BOT, null) { };
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   264
                }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   265
            }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   266
            result = tree;
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   267
        }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   268
    }
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   269
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   270
    class ImportCleaner extends TreeScanner {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   271
        private Set<Name> names = new HashSet<Name>();
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   272
        private TreeMaker m;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   273
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   274
        ImportCleaner(JavaFileManager fm) {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   275
            // ImportCleaner itself doesn't require a filemanager, but instantiating
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   276
            // a TreeMaker does, indirectly (via ClassReader, sigh)
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   277
            Context c = new Context();
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   278
            c.put(JavaFileManager.class, fm);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   279
            m = TreeMaker.instance(c);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   280
        }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   281
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   282
        CompilationUnitTree removeRedundantImports(CompilationUnitTree t) {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   283
            JCCompilationUnit tree = (JCCompilationUnit) t;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   284
            tree.accept(this);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   285
            ListBuffer<JCTree> defs = new ListBuffer<JCTree>();
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   286
            for (JCTree def: tree.defs) {
12085
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
   287
                if (def.getTag() == JCTree.Tag.IMPORT) {
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   288
                    JCImport imp = (JCImport) def;
12085
ce2780cb121f 7150579: Moved ant code into a separate package, anttasks.
ohrstrom
parents: 9087
diff changeset
   289
                    if (imp.qualid.getTag() == JCTree.Tag.SELECT) {
4703
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   290
                        JCFieldAccess qualid = (JCFieldAccess) imp.qualid;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   291
                        if (!qualid.name.toString().equals("*")
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   292
                                && !names.contains(qualid.name)) {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   293
                            continue;
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   294
                        }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   295
                    }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   296
                }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   297
                defs.add(def);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   298
            }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   299
            return m.TopLevel(tree.packageAnnotations, tree.pid, defs.toList());
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   300
        }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   301
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   302
        @Override
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   303
        public void visitImport(JCImport tree) { } // ignore names found in imports
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   304
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   305
        @Override
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   306
        public void visitIdent(JCIdent tree) {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   307
            names.add(tree.name);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   308
        }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   309
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   310
        @Override
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   311
        public void visitSelect(JCFieldAccess tree) {
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   312
            super.visitSelect(tree);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   313
            names.add(tree.name);
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   314
        }
800e1750ff18 6909470: langtools stub generator should prune unnecessary imports
jjg
parents: 4415
diff changeset
   315
    }
4415
7d4f73717fba 6902337: fix langtools build to allow forward refs into jdk/ repo
jjg
parents:
diff changeset
   316
}