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

Print this page




  28 
  29 import java.io.OutputStream;
  30 import java.io.PrintWriter;
  31 import java.util.ArrayList;
  32 import java.util.HashSet;
  33 import java.util.List;
  34 
  35 import java.util.Set;
  36 import javax.lang.model.element.Element;
  37 import javax.lang.model.element.ExecutableElement;
  38 import javax.lang.model.element.Modifier;
  39 import javax.lang.model.element.Name;
  40 import javax.lang.model.element.TypeElement;
  41 import javax.lang.model.element.VariableElement;
  42 import javax.lang.model.type.ArrayType;
  43 import javax.lang.model.type.PrimitiveType;
  44 import javax.lang.model.type.TypeKind;
  45 import javax.lang.model.type.TypeMirror;
  46 import javax.lang.model.type.TypeVisitor;
  47 import javax.lang.model.util.ElementFilter;
  48 import javax.lang.model.util.SimpleTypeVisitor6;
  49 
  50 /*
  51  * <p><b>This is NOT part of any API supported by Sun Microsystems.
  52  * If you write code that depends on this, you do so at your own
  53  * risk.  This code and its internal interfaces are subject to change
  54  * or deletion without notice.</b></p>
  55  *
  56  * @author  Sucheta Dambalkar(Revised)
  57  */
  58 public class LLNI extends Gen {
  59 
  60     protected final char  innerDelim = '$';     /* For inner classes */
  61     protected Set<String>  doneHandleTypes;
  62     List<VariableElement> fields;
  63     List<ExecutableElement> methods;
  64     private boolean       doubleAlign;
  65     private int           padFieldNum = 0;
  66 
  67     LLNI(boolean doubleAlign, Util util) {
  68         super(util);


 603             default:
 604                 throw new Error(t.getKind() + " " + t); // FIXME
 605         }
 606 
 607         return res;
 608     }
 609 
 610     protected final String cRcvrDecl(Element field, String cname) {
 611         return (field.getModifiers().contains(Modifier.STATIC) ? "jclass" : "jobject");
 612     }
 613 
 614     protected String maskName(String s) {
 615         return "LLNI_mask(" + s + ")";
 616     }
 617 
 618     protected String llniFieldName(VariableElement field) {
 619         return maskName(field.getSimpleName().toString());
 620     }
 621 
 622     protected final boolean isLongOrDouble(TypeMirror t) {
 623         TypeVisitor<Boolean,Void> v = new SimpleTypeVisitor6<Boolean,Void>() {
 624             public Boolean defaultAction(TypeMirror t, Void p){
 625                 return false;
 626             }
 627             public Boolean visitArray(ArrayType t, Void p) {
 628                 return visit(t.getComponentType(), p);
 629             }
 630             public Boolean visitPrimitive(PrimitiveType t, Void p) {
 631                 TypeKind tk = t.getKind();
 632                 return (tk == TypeKind.LONG || tk == TypeKind.DOUBLE);
 633             }
 634         };
 635         return v.visit(t, null);
 636     }
 637 
 638     /* Do unicode to ansi C identifier conversion.
 639        %%% This may not be right, but should be called more often. */
 640     protected final String nameToIdentifier(String name) {
 641         int len = name.length();
 642         StringBuffer buf = new StringBuffer(len);
 643         for (int i = 0; i < len; i++) {




  28 
  29 import java.io.OutputStream;
  30 import java.io.PrintWriter;
  31 import java.util.ArrayList;
  32 import java.util.HashSet;
  33 import java.util.List;
  34 
  35 import java.util.Set;
  36 import javax.lang.model.element.Element;
  37 import javax.lang.model.element.ExecutableElement;
  38 import javax.lang.model.element.Modifier;
  39 import javax.lang.model.element.Name;
  40 import javax.lang.model.element.TypeElement;
  41 import javax.lang.model.element.VariableElement;
  42 import javax.lang.model.type.ArrayType;
  43 import javax.lang.model.type.PrimitiveType;
  44 import javax.lang.model.type.TypeKind;
  45 import javax.lang.model.type.TypeMirror;
  46 import javax.lang.model.type.TypeVisitor;
  47 import javax.lang.model.util.ElementFilter;
  48 import javax.lang.model.util.SimpleTypeVisitor7;
  49 
  50 /*
  51  * <p><b>This is NOT part of any API supported by Sun Microsystems.
  52  * If you write code that depends on this, you do so at your own
  53  * risk.  This code and its internal interfaces are subject to change
  54  * or deletion without notice.</b></p>
  55  *
  56  * @author  Sucheta Dambalkar(Revised)
  57  */
  58 public class LLNI extends Gen {
  59 
  60     protected final char  innerDelim = '$';     /* For inner classes */
  61     protected Set<String>  doneHandleTypes;
  62     List<VariableElement> fields;
  63     List<ExecutableElement> methods;
  64     private boolean       doubleAlign;
  65     private int           padFieldNum = 0;
  66 
  67     LLNI(boolean doubleAlign, Util util) {
  68         super(util);


 603             default:
 604                 throw new Error(t.getKind() + " " + t); // FIXME
 605         }
 606 
 607         return res;
 608     }
 609 
 610     protected final String cRcvrDecl(Element field, String cname) {
 611         return (field.getModifiers().contains(Modifier.STATIC) ? "jclass" : "jobject");
 612     }
 613 
 614     protected String maskName(String s) {
 615         return "LLNI_mask(" + s + ")";
 616     }
 617 
 618     protected String llniFieldName(VariableElement field) {
 619         return maskName(field.getSimpleName().toString());
 620     }
 621 
 622     protected final boolean isLongOrDouble(TypeMirror t) {
 623         TypeVisitor<Boolean,Void> v = new SimpleTypeVisitor7<Boolean,Void>() {
 624             public Boolean defaultAction(TypeMirror t, Void p){
 625                 return false;
 626             }
 627             public Boolean visitArray(ArrayType t, Void p) {
 628                 return visit(t.getComponentType(), p);
 629             }
 630             public Boolean visitPrimitive(PrimitiveType t, Void p) {
 631                 TypeKind tk = t.getKind();
 632                 return (tk == TypeKind.LONG || tk == TypeKind.DOUBLE);
 633             }
 634         };
 635         return v.visit(t, null);
 636     }
 637 
 638     /* Do unicode to ansi C identifier conversion.
 639        %%% This may not be right, but should be called more often. */
 640     protected final String nameToIdentifier(String name) {
 641         int len = name.length();
 642         StringBuffer buf = new StringBuffer(len);
 643         for (int i = 0; i < len; i++) {