MainDoclet.java :  » 6.0-JDK-Modules-com.sun » tools » com » sun » tools » javah » Java Open Source

Java Open Source » 6.0 JDK Modules com.sun » tools 
tools » com » sun » tools » javah » MainDoclet.java
/*
 * Copyright 2002-2003 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */


package com.sun.tools.javah;

import com.sun.javadoc.*;
import java.io.*;

/**
 * A doclet to parse and execute commandline options.
 *
 * @author Sucheta Dambalkar(using code from old javap)
 */
public class MainDoclet{
    
    public static  String  odir        = null;
    public static  String  ofile       = null;
    public static  boolean stubs       = false;
    public static  boolean jni         = false;
    public static  boolean llni        = false;
    public static  boolean doubleAlign = false;
    public static  boolean force       = false;
    public static  String  genclass    = null;
    

    /**
     * Entry point.
     */
    public static boolean start(RootDoc root) {
  
  int j = 0;
  int k = 0;
  /**
   * Command line options.
   */
  String [][] cmdoptions = root.options();
  /**
   * Classes specified on command line.
   */
  ClassDoc[] classes = root.classes();
  /**
   * Generator used by javah.  Default is JNI.
   */
  Gen g = new JNI(root);
  
  validateOptions(cmdoptions);
  
  /*
   * Select native interface.
   */
  if (jni && llni)  Util.error("jni.llni.mixed");
  
  if (llni)
      g = new LLNI(doubleAlign, root);
  
  if (g instanceof JNI && stubs)  Util.error("jni.no.stubs");
  
  /*
   * Arrange for output destination.
   */
  if (odir != null && ofile != null)
      Util.error("dir.file.mixed");
  
  if (odir != null)
      g.setOutDir(odir);
  
  if (ofile != null)
      g.setOutFile(ofile);
  
  /*
   * Force set to false will turn off smarts about checking file
   * content before writing.
   */
  g.setForce(force);
  
  /* 
   * Grab the rest of argv[] ... this must be the classes.
   */
  if (classes.length == 0){
      Util.error("no.classes.specified");
  }
  /*
   * Set classes.
   */
  g.setClasses(classes);
  
  try {
      g.run();
  } catch (ClassNotFoundException cnfe) {
      Util.error("class.not.found", cnfe.getMessage());
  } catch (IOException ioe) {
      Util.error("io.exception", ioe.getMessage());
  }
  
  return true;
    }
    
    /**
     * Required doclet method.
     */
    public static int optionLength(String option) {
  if (option.equals("-o")) {
      return 2;
  } else if(option.equals("-d")){
      return 2;
  } else if (option.equals("-td")) {
      return 1;
  } else if (option.equals("-stubs")) {
      return 1; 
  } else if(option.equals("-help")){
      return 1;
  } else if(option.equals("--help")){
      return 1;
  } else if(option.equals("-?")){
      return 1;
  } else if(option.equals("-h")){
      return 1;
  } else if(option.equals("-trace")){
      return 1;
  } else if(option.equals("-version")) {
      return 1;
  } else if(option.equals("-jni")){
      return 1;
  } else if(option.equals("-force")){
      return 1;
  } else if(option.equals("-Xllni")){
      return 1;
  } else if(option.equals("-llni")){
      return 1;
  } else if(option.equals("-llniDouble")){
      return 1;
  } else return 0;
    }
    
    /**
     * Parse the command line options.
     */
    public static void validateOptions(String cmdoptions[][]) { 
  /* Default values for options, overridden by user options. */
  String bootcp = System.getProperty("sun.boot.class.path");
  String  usercp = System.getProperty("env.class.path");

  for(int p = 0; p < cmdoptions.length; p++){
      
      if (cmdoptions[p][0].equals("-o")) {
    ofile = cmdoptions[p][1];
      } else if(cmdoptions[p][0].equals("-d")){
    odir = cmdoptions[p][1];
      } else if (cmdoptions[p][0].equals("-td")) {
    if (p ==cmdoptions.length)
        Util.usage(1);
      } else if (cmdoptions[p][0].equals("-stubs")) {
    stubs = true;
      } else if (cmdoptions[p][0].equals("-verbose")) {
    Util.verbose = true;
      } else if((cmdoptions[p][0].equals("-help")) 
          || (cmdoptions[p][0].equals("--help")) 
          || (cmdoptions[p][0].equals("-?")) 
          || (cmdoptions[p][0].equals("-h"))) {
    Util.usage(0);
      } else if (cmdoptions[p][0].equals("-trace")) {
    System.err.println(Util.getText("tracing.not.supported"));
      } else if (cmdoptions[p][0].equals("-version")) {
    Util.version();
      } else if (cmdoptions[p][0].equals("-jni")) {
    jni = true;
      } else if (cmdoptions[p][0].equals("-force")) {
    force = true;
      } else if (cmdoptions[p][0].equals("-Xllni")) {
    llni = true;
      } else if (cmdoptions[p][0].equals("-llni")) {
    llni = true;
      } else if (cmdoptions[p][0].equals("-llniDouble")) {
    llni = true; doubleAlign = true;
      } else if (cmdoptions[p][0].equals("-classpath")) {
    usercp = cmdoptions[p][1];
      } else if (cmdoptions[p][0].equals("-bootclasspath")) {
    bootcp = cmdoptions[p][1];
      } else if((cmdoptions[p][0].charAt(0) == '-')
          && (!cmdoptions[p][0].equals("-private"))){
    Util.error("unknown.option", cmdoptions[p][0], null, true);
      } else {
    break; /* The rest must be classes. */
      }
  }


  if (Util.verbose) {
    System.err.println("[ Search Path: "
            + bootcp
            + System.getProperty("file.separator")
            + usercp + " ]");
  }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.