File size: 1,682 Bytes
ebd078b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
===========
empty class
===========

class Foo extends Bar {}

---
(ql (moduleMember (dataclass (className) (typeExpr (className)))))

===================================
class with characteristic predicate
===================================

abstract class Foo extends Bar {

  pragma[inline]
  Foo() {
    this = this
  }

}

---

(ql (moduleMember
  (annotation (annotName))
  (dataclass (className) (typeExpr (className))
    (classMember (annotation (annotName)  (annotArg (simpleId)))
      (charpred (className)
        (comp_term (variable (this)) (compop) (variable (this))))))))
==================
class with members
==================

class X extends Y {
  m::F f;

  m::F a() {
    result = f
  }
}

---

(ql (moduleMember
  (dataclass (className) (typeExpr (className))
    (classMember (field (varDecl (typeExpr (moduleExpr (simpleId)) (className)) (varName (simpleId)))))
    (classMember (memberPredicate (typeExpr (moduleExpr (simpleId)) (className)) (predicateName)
    (body (comp_term (variable (result)) (compop) (variable (varName (simpleId))))))))))

===========
class alias
===========

class X = foo::Bas;

---
(ql (moduleMember
  (dataclass (className) (typeAliasBody (typeExpr (moduleExpr (simpleId)) (className))))))


================
class instanceof
================

class X extends Y1, Y2 instanceof Z1, Z2 {
  X() { none() }
}

---

(ql
  (moduleMember
    (dataclass
      (className)
      (typeExpr
        (className))
      (typeExpr
        (className))
      (typeExpr
        (className))
      (typeExpr
        (className))
      (classMember
        (charpred
          (className)
          (special_call
            (specialId)))))))