forked from facebook/redex
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCallGraphTest.java
161 lines (130 loc) · 3.08 KB
/
CallGraphTest.java
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.redextest;
public class CallGraphTest {
static {
// root of the graph
Base b = new Extended();
callsReturnsInt(b);
Extended.foo();
MoreThan5 moreThan5 = new MoreThan5Impl1();
int get1 = moreThan5.returnNum();
MoreThan5Impl1 moreThan5Impl1 = new MoreThan5Impl1();
int get2 = moreThan5Impl1.returnNum();
LessThan5 lessThan5 = new LessThan5Impl3();
int get3 = lessThan5.returnNum();
MoreThan5ClassExtends1 moreThan5ClassExtends1 = new MoreThan5ClassExtends1();
int get4 = moreThan5ClassExtends1.returnSuperNum();
}
static int callsReturnsInt(Base b) {
return b.returnsInt();
}
}
class Base {
int returnsInt() {
return 1;
}
static int foo() {
return 2;
}
}
class Extended extends Base {
int returnsInt() {
return 2;
}
}
class ExtendedExtended extends Extended {
int returnsInt() {
return super.returnsInt();
}
}
interface MoreThan5 {
public int returnNum();
}
class MoreThan5Impl1 implements MoreThan5 {
public int returnNum() { return 1; }
}
class MoreThan5Impl2 implements MoreThan5 {
public int returnNum() { return 2; }
}
class MoreThan5Impl3 implements MoreThan5 {
public int returnNum() { return 3; }
}
class MoreThan5Impl4 implements MoreThan5 {
public int returnNum() { return 4; }
}
class MoreThan5Impl5 implements MoreThan5 {
public int returnNum() { return 5; }
}
class MoreThan5Impl6 implements MoreThan5 {
public int returnNum() { return 6; }
}
interface LessThan5 {
public int returnNum();
}
class LessThan5Impl1 implements LessThan5 {
public int returnNum() { return 1; }
}
class LessThan5Impl2 implements LessThan5 {
public int returnNum() { return 2; }
}
class LessThan5Impl3 implements LessThan5 {
public int returnNum() { return 3; }
}
class LessThan5Impl4 implements LessThan5 {
public int returnNum() {
PureRefImpl2 pureRef = new PureRefImpl3();
int get5 = pureRef.returnNum();
return 4;
}
}
interface PureRef {
public int returnNum();
}
abstract class PureRefImpl1 implements PureRef {}
abstract class PureRefImpl2 extends PureRefImpl1 {}
class PureRefImpl3 extends PureRefImpl2 {
public int returnNum() { return 5; }
}
class MoreThan5Class {
public int returnNum() {
return 0;
}
}
class MoreThan5ClassExtends1 extends MoreThan5Class {
public int returnNum() {
return 1;
}
public int returnSuperNum() {
return super.returnNum();
}
}
class MoreThan5ClassExtends2 extends MoreThan5Class {
public int returnNum() {
return 2;
}
}
class MoreThan5ClassExtends3 extends MoreThan5Class {
public int returnNum() {
return 3;
}
}
class MoreThan5ClassExtends4 extends MoreThan5Class {
public int returnNum() {
return 4;
}
}
class MoreThan5ClassExtends5 extends MoreThan5Class {
public int returnNum() {
return 5;
}
}
class MoreThan5ClassExtends6 extends MoreThan5Class {
public int returnNum() {
return 6;
}
}