src/share/classes/com/sun/tools/javah/JavahTask.java

Print this page




  42 import java.util.Map;
  43 import java.util.MissingResourceException;
  44 import java.util.ResourceBundle;
  45 import java.util.Set;
  46 
  47 import javax.annotation.processing.AbstractProcessor;
  48 import javax.annotation.processing.Messager;
  49 import javax.annotation.processing.RoundEnvironment;
  50 import javax.annotation.processing.SupportedAnnotationTypes;
  51 import javax.annotation.processing.SupportedSourceVersion;
  52 
  53 import javax.lang.model.SourceVersion;
  54 import javax.lang.model.element.ExecutableElement;
  55 import javax.lang.model.element.TypeElement;
  56 import javax.lang.model.element.VariableElement;
  57 import javax.lang.model.type.ArrayType;
  58 import javax.lang.model.type.DeclaredType;
  59 import javax.lang.model.type.TypeMirror;
  60 import javax.lang.model.type.TypeVisitor;
  61 import javax.lang.model.util.ElementFilter;
  62 import javax.lang.model.util.SimpleTypeVisitor6;
  63 import javax.lang.model.util.Types;
  64 
  65 import javax.tools.Diagnostic;
  66 import javax.tools.DiagnosticListener;
  67 import javax.tools.JavaCompiler;
  68 import javax.tools.JavaCompiler.CompilationTask;
  69 import javax.tools.JavaFileManager;
  70 import javax.tools.JavaFileObject;
  71 import javax.tools.StandardJavaFileManager;
  72 import javax.tools.StandardLocation;
  73 import javax.tools.ToolProvider;
  74 
  75 /**
  76  * Javah generates support files for native methods.
  77  * Parse commandline options & Invokes javadoc to execute those commands.
  78  *
  79  * <p><b>This is NOT part of any API supported by Sun Microsystems.
  80  * If you write code that depends on this, you do so at your own
  81  * risk.  This code and its internal interfaces are subject to change
  82  * or deletion without notice.</b></p>


 688                 allClasses.add(c);
 689                 getAllClasses0(ElementFilter.typesIn(c.getEnclosedElements()), allClasses);
 690             }
 691         }
 692 
 693         // 4942232:
 694         // check that classes exist for all the parameters of native methods
 695         private void checkMethodParameters(Set<TypeElement> classes) {
 696             Types types = processingEnv.getTypeUtils();
 697             for (TypeElement te: classes) {
 698                 for (ExecutableElement ee: ElementFilter.methodsIn(te.getEnclosedElements())) {
 699                     for (VariableElement ve: ee.getParameters()) {
 700                         TypeMirror tm = ve.asType();
 701                         checkMethodParametersVisitor.visit(tm, types);
 702                     }
 703                 }
 704             }
 705         }
 706 
 707         private TypeVisitor<Void,Types> checkMethodParametersVisitor =
 708                 new SimpleTypeVisitor6<Void,Types>() {
 709             @Override
 710             public Void visitArray(ArrayType t, Types types) {
 711                 visit(t.getComponentType(), types);
 712                 return null;
 713             }
 714             @Override
 715             public Void visitDeclared(DeclaredType t, Types types) {
 716                 t.asElement().getKind(); // ensure class exists
 717                 for (TypeMirror st: types.directSupertypes(t))
 718                     visit(st, types);
 719                 return null;
 720             }
 721         };
 722 
 723         private Gen g;
 724         private Util.Exit exit;
 725     }
 726 }


  42 import java.util.Map;
  43 import java.util.MissingResourceException;
  44 import java.util.ResourceBundle;
  45 import java.util.Set;
  46 
  47 import javax.annotation.processing.AbstractProcessor;
  48 import javax.annotation.processing.Messager;
  49 import javax.annotation.processing.RoundEnvironment;
  50 import javax.annotation.processing.SupportedAnnotationTypes;
  51 import javax.annotation.processing.SupportedSourceVersion;
  52 
  53 import javax.lang.model.SourceVersion;
  54 import javax.lang.model.element.ExecutableElement;
  55 import javax.lang.model.element.TypeElement;
  56 import javax.lang.model.element.VariableElement;
  57 import javax.lang.model.type.ArrayType;
  58 import javax.lang.model.type.DeclaredType;
  59 import javax.lang.model.type.TypeMirror;
  60 import javax.lang.model.type.TypeVisitor;
  61 import javax.lang.model.util.ElementFilter;
  62 import javax.lang.model.util.SimpleTypeVisitor7;
  63 import javax.lang.model.util.Types;
  64 
  65 import javax.tools.Diagnostic;
  66 import javax.tools.DiagnosticListener;
  67 import javax.tools.JavaCompiler;
  68 import javax.tools.JavaCompiler.CompilationTask;
  69 import javax.tools.JavaFileManager;
  70 import javax.tools.JavaFileObject;
  71 import javax.tools.StandardJavaFileManager;
  72 import javax.tools.StandardLocation;
  73 import javax.tools.ToolProvider;
  74 
  75 /**
  76  * Javah generates support files for native methods.
  77  * Parse commandline options & Invokes javadoc to execute those commands.
  78  *
  79  * <p><b>This is NOT part of any API supported by Sun Microsystems.
  80  * If you write code that depends on this, you do so at your own
  81  * risk.  This code and its internal interfaces are subject to change
  82  * or deletion without notice.</b></p>


 688                 allClasses.add(c);
 689                 getAllClasses0(ElementFilter.typesIn(c.getEnclosedElements()), allClasses);
 690             }
 691         }
 692 
 693         // 4942232:
 694         // check that classes exist for all the parameters of native methods
 695         private void checkMethodParameters(Set<TypeElement> classes) {
 696             Types types = processingEnv.getTypeUtils();
 697             for (TypeElement te: classes) {
 698                 for (ExecutableElement ee: ElementFilter.methodsIn(te.getEnclosedElements())) {
 699                     for (VariableElement ve: ee.getParameters()) {
 700                         TypeMirror tm = ve.asType();
 701                         checkMethodParametersVisitor.visit(tm, types);
 702                     }
 703                 }
 704             }
 705         }
 706 
 707         private TypeVisitor<Void,Types> checkMethodParametersVisitor =
 708                 new SimpleTypeVisitor7<Void,Types>() {
 709             @Override
 710             public Void visitArray(ArrayType t, Types types) {
 711                 visit(t.getComponentType(), types);
 712                 return null;
 713             }
 714             @Override
 715             public Void visitDeclared(DeclaredType t, Types types) {
 716                 t.asElement().getKind(); // ensure class exists
 717                 for (TypeMirror st: types.directSupertypes(t))
 718                     visit(st, types);
 719                 return null;
 720             }
 721         };
 722 
 723         private Gen g;
 724         private Util.Exit exit;
 725     }
 726 }