< prev index next >

src/jdk.internal.clang/share/classes/jdk/internal/clang/Cursor.java

Print this page




  42          * @param parent
  43          * @param current
  44          * @param data
  45          * @return 0 - break, 1 - continue, 2 - recurse
  46          */
  47         VisitResult visit(Cursor current, Cursor parent, Object data);
  48     }
  49 
  50     private static int visit(Visitor v, ByteBuffer c, ByteBuffer p, Object data) {
  51         return v.visit(new Cursor(c), new Cursor(p), data).ordinal();
  52     }
  53 
  54     Cursor(ByteBuffer buf) {
  55         super(buf);
  56     }
  57 
  58     public native boolean isDeclaration();
  59     public native boolean isPreprocessing();
  60     public native boolean isInvalid();
  61     public native boolean isDefinition();




  62     public native boolean isAnonymousStruct();
  63     public native boolean isMacroFunctionLike();
  64 
  65     public boolean isAnonymousEnum() {
  66         // libclang::clang_Cursor_isAnonymous only applies to struct, not enum
  67         return (type().kind() == TypeKind.Enum && spelling().isEmpty());
  68     }
  69 
  70     public boolean isAnonymous() {
  71         return isAnonymousStruct() || isAnonymousEnum();
  72     }
  73 
  74     public native String spelling();
  75     public native String USR();
  76 
  77     public native int kind1();
  78 
  79     public native int visitChildren(Visitor visitor, Object data);
  80 
  81     public native boolean equalCursor(Cursor other);
  82 
  83     public native Type type();
  84     public native Type getEnumDeclIntegerType();
  85 
  86     public native Cursor getDefinition();
  87 
  88     public native SourceLocation getSourceLocation();
  89     public native SourceRange getExtent();
  90 
  91     public native int numberOfArgs();
  92     public native Cursor getArgument(int idx);
  93 
  94     // C long long, 64-bit
  95     public native long getEnumConstantValue();
  96     // C unsigned long long, 64-bit
  97     public native long getEnumConstantUnsignedValue();
  98 
  99     public native boolean isBitField();
 100     public native int getBitFieldWidth();
 101 
 102     native long getTranslationUnit0();
 103     public final TranslationUnit getTranslationUnit() {
 104         return new TranslationUnit(getTranslationUnit0());
 105     }
 106 
 107     public native String getMangling();
 108 
 109     public CursorKind kind() {
 110         int v = kind1();
 111         // FIXME: assert(v == getData().getInt(0));
 112         return CursorKind.valueOf(v);
 113     }
 114 
 115     public boolean equals(Cursor other) {
 116         return getData().equals(other.getData());
 117     }
 118 
 119     public Stream<Cursor> children() {
 120         ArrayList<Cursor> ar = new ArrayList<>();
 121         visitChildren((c, p, d) -> {
 122             @SuppressWarnings("unchecked")
 123             List<Cursor> a = (List<Cursor>) d;
 124             a.add(c);
 125             return VisitResult.Continue;
 126         }, ar);
 127         return ar.stream();
 128     }
 129 
 130     public Stream<Cursor> stream() {
 131         return children().flatMap(c -> Stream.concat(Stream.of(c), c.children()));
 132     }


















 133 }


  42          * @param parent
  43          * @param current
  44          * @param data
  45          * @return 0 - break, 1 - continue, 2 - recurse
  46          */
  47         VisitResult visit(Cursor current, Cursor parent, Object data);
  48     }
  49 
  50     private static int visit(Visitor v, ByteBuffer c, ByteBuffer p, Object data) {
  51         return v.visit(new Cursor(c), new Cursor(p), data).ordinal();
  52     }
  53 
  54     Cursor(ByteBuffer buf) {
  55         super(buf);
  56     }
  57 
  58     public native boolean isDeclaration();
  59     public native boolean isPreprocessing();
  60     public native boolean isInvalid();
  61     public native boolean isDefinition();
  62 
  63     // Determine whether the given cursor represents an anonymous record declaration.
  64     // "Anonymous" here is not just about name (spelling) being empty. This is an
  65     // anonymous struct or union embedded in another struct or union.
  66     public native boolean isAnonymousStruct();
  67     public native boolean isMacroFunctionLike();
  68 









  69     public native String spelling();
  70     public native String USR();
  71 
  72     public native int kind1();
  73 
  74     public native int visitChildren(Visitor visitor, Object data);
  75 


  76     public native Type type();
  77     public native Type getEnumDeclIntegerType();
  78 
  79     public native Cursor getDefinition();
  80 
  81     public native SourceLocation getSourceLocation();
  82     public native SourceRange getExtent();
  83 
  84     public native int numberOfArgs();
  85     public native Cursor getArgument(int idx);
  86 
  87     // C long long, 64-bit
  88     public native long getEnumConstantValue();
  89     // C unsigned long long, 64-bit
  90     public native long getEnumConstantUnsignedValue();
  91 
  92     public native boolean isBitField();
  93     public native int getBitFieldWidth();
  94 
  95     native long getTranslationUnit0();
  96     public final TranslationUnit getTranslationUnit() {
  97         return new TranslationUnit(getTranslationUnit0());
  98     }
  99 
 100     public native String getMangling();
 101 
 102     public CursorKind kind() {
 103         int v = kind1();
 104         // FIXME: assert(v == getData().getInt(0));
 105         return CursorKind.valueOf(v);
 106     }
 107 




 108     public Stream<Cursor> children() {
 109         ArrayList<Cursor> ar = new ArrayList<>();
 110         visitChildren((c, p, d) -> {
 111             @SuppressWarnings("unchecked")
 112             List<Cursor> a = (List<Cursor>) d;
 113             a.add(c);
 114             return VisitResult.Continue;
 115         }, ar);
 116         return ar.stream();
 117     }
 118 
 119     public Stream<Cursor> allChildren() {
 120         return children().flatMap(c -> Stream.concat(Stream.of(c), c.children()));
 121     }
 122 
 123     public native boolean equalCursor(Cursor other);
 124 
 125     @Override
 126     public boolean equals(Object other) {
 127         if (this == other) {
 128             return true;
 129         }
 130         if (!(other instanceof Cursor)) {
 131             return false;
 132         }
 133         return equalCursor((Cursor)other);
 134     }
 135 
 136     @Override
 137     public int hashCode() {
 138         return spelling().hashCode();
 139     }
 140 }
< prev index next >