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++) {
|