-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEvaluateTools.java
240 lines (210 loc) · 10.7 KB
/
EvaluateTools.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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
package evaluate;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import cloneMatchingAlgorithms.CloneMatcher;
import database.Clone;
import database.BigCloneBenchDB;
public class EvaluateTools {
public static int INTRA_PROJECT_CLONES = 1;
public static int INTER_PROJECT_CLONES = 2;
private static String addConditions(String sql, Long functionality_id, Integer type, Integer project_granularity,
Double line_gt_similarity, Double token_gt_similarity, Double avg_gt_similarity, Double both_gt_similarity,
Double line_gte_similarity, Double token_gte_similarity, Double avg_gte_similarity, Double both_gte_similarity,
Double line_lt_similarity, Double token_lt_similarity, Double avg_lt_similarity, Double both_lt_similarity,
Double line_lte_similarity, Double token_lte_similarity, Double avg_lte_similarity, Double both_lte_similarity,
Integer min_size, Integer max_size, Integer min_pretty_size, Integer max_pretty_size, Integer min_tokens, Integer max_tokens,
Integer min_judges, Integer min_confidence, boolean include_internal) {
if(!include_internal)
sql += " AND internal = FALSE ";
if(functionality_id != null)
sql += " AND functionality_id = " + functionality_id;
if(type != null)
sql += " AND syntactic_type = " + type;
if(line_gt_similarity != null)
sql += " AND similarity_line > " + line_gt_similarity;
if(token_gt_similarity != null)
sql += " AND similarity_token > " + token_gt_similarity;
if(avg_gt_similarity != null)
sql += " AND (1.0*similarity_line + 1.0*similarity_token)/2.0 > " + avg_gt_similarity;
if(both_gt_similarity != null)
sql += " AND least(similarity_line, similarity_token) > " + both_gt_similarity;
if(line_gte_similarity != null)
sql += " AND similarity_line >= " + line_gte_similarity;
if(token_gte_similarity != null)
sql += " AND similarity_token >= " + token_gte_similarity;
if(avg_gte_similarity != null)
sql += " AND (1.0*similarity_line + 1.0*similarity_token)/2.0 >= " + avg_gte_similarity;
if(both_gte_similarity != null)
sql += " AND least(similarity_line, similarity_token) >= " + both_gte_similarity;
if(line_lt_similarity != null)
sql += " AND similarity_line < " + line_lt_similarity;
if(token_lt_similarity != null)
sql += " AND similarity_token < " + token_lt_similarity;
if(avg_lt_similarity != null)
sql += " AND (1.0*similarity_line + 1.0*similarity_token)/2.0 < " + avg_lt_similarity;
if(both_lt_similarity != null)
sql += " AND least(similarity_line, similarity_token) < " + both_lt_similarity;
if(line_lte_similarity != null)
sql += " AND similarity_line <= " + line_lte_similarity;
if(token_lte_similarity != null)
sql += " AND similarity_token <= " + token_lte_similarity;
if(avg_lte_similarity != null)
sql += " AND (1.0*similarity_line + 1.0*similarity_token)/2.0 <= " + avg_lte_similarity;
if(both_lte_similarity != null)
sql += " AND least(similarity_line, similarity_token) <= " + both_lte_similarity;
if(min_size != null)
sql += " AND min_size >= " + min_size;
if(max_size != null)
sql += " AND max_size <= " + max_size;
if(min_pretty_size != null)
sql += " AND min_pretty_size >= " + min_pretty_size;
if(max_pretty_size != null)
sql += " AND max_pretty_size <= " + max_pretty_size;
if(min_tokens != null)
sql += " AND min_tokens >= " + min_tokens;
if(max_tokens != null)
sql += " AND max_tokens <= " + max_tokens;
if(min_judges != null)
sql += " AND min_judges >= " + min_judges;
if(max_tokens != null)
sql += " AND max_tokens <= " + max_tokens;
if (project_granularity != null) {
if(project_granularity == EvaluateTools.INTER_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) != (SELECT project FROM functions WHERE id = function_id_two))";
} else if (project_granularity == EvaluateTools.INTRA_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) = (SELECT project FROM functions WHERE id = function_id_two))";
}
}
return sql;
}
public static int numTrueDetected (Long tool_id, CloneMatcher matcher, Long functionality_id, Integer type, Integer project_granularity,
Double line_gt_similarity, Double token_gt_similarity, Double avg_gt_similarity, Double both_gt_similarity,
Double line_gte_similarity, Double token_gte_similarity, Double avg_gte_similarity, Double both_gte_similarity,
Double line_lt_similarity, Double token_lt_similarity, Double avg_lt_similarity, Double both_lt_similarity,
Double line_lte_similarity, Double token_lte_similarity, Double avg_lte_similarity, Double both_lte_similarity,
Integer min_size, Integer max_size, Integer min_pretty_size, Integer max_pretty_size, Integer min_tokens, Integer max_tokens,
Integer min_judges, Integer min_confidence, boolean includeInternal) throws SQLException {
String sql = "SELECT function_id_one, function_id_two FROM clones WHERE 1 = 1";
sql = addConditions(sql, functionality_id, type, project_granularity,
line_gt_similarity, token_gt_similarity, avg_gt_similarity, both_gt_similarity,
line_gte_similarity, token_gte_similarity, avg_gte_similarity, both_gte_similarity,
line_lt_similarity, token_lt_similarity, avg_lt_similarity, both_lt_similarity,
line_lte_similarity, token_lte_similarity, avg_lte_similarity, both_lte_similarity,
min_size, max_size, min_pretty_size, max_pretty_size, min_tokens, max_tokens,
min_judges, min_confidence, includeInternal);
Connection conn = BigCloneBenchDB.getConnection();
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.setFetchSize(1000);
ResultSet rs = stmt.executeQuery(sql);
int numDetected = 0;
while(rs.next()) {
long f1_id = rs.getLong(1);
long f2_id = rs.getLong(2);
Clone clone1 = new Clone(f1_id, f2_id);
Clone clone2 = new Clone(f2_id, f1_id);
if(matcher.isDetected(clone1) || matcher.isDetected(clone2)) {
numDetected++;
}
}
rs.close();
stmt.close();
conn.setAutoCommit(true);
conn.close();
return numDetected;
}
public static int numClones (Long functionality_id, Integer type, Integer project_granularity,
Double line_gt_similarity, Double token_gt_similarity, Double avg_gt_similarity, Double both_gt_similarity,
Double line_gte_similarity, Double token_gte_similarity, Double avg_gte_similarity, Double both_gte_similarity,
Double line_lt_similarity, Double token_lt_similarity, Double avg_lt_similarity, Double both_lt_similarity,
Double line_lte_similarity, Double token_lte_similarity, Double avg_lte_similarity, Double both_lte_similarity,
Integer min_size, Integer max_size, Integer min_pretty_size, Integer max_pretty_size, Integer min_tokens, Integer max_tokens,
Integer min_judges, Integer min_confidence, boolean includeInternal) throws SQLException {
String sql = "SELECT count(1) FROM clones WHERE 1 = 1";
sql = addConditions(sql, functionality_id, type, project_granularity,
line_gt_similarity, token_gt_similarity, avg_gt_similarity, both_gt_similarity,
line_gte_similarity, token_gte_similarity, avg_gte_similarity, both_gte_similarity,
line_lt_similarity, token_lt_similarity, avg_lt_similarity, both_lt_similarity,
line_lte_similarity, token_lte_similarity, avg_lte_similarity, both_lte_similarity,
min_size, max_size, min_pretty_size, max_pretty_size, min_tokens, max_tokens,
min_judges, min_confidence, includeInternal);
//System.out.println(sql);
Connection conn = BigCloneBenchDB.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs.next();
int numClones = rs.getInt(1);
rs.close();
stmt.close();
conn.setAutoCommit(true);
conn.close();
return numClones;
}
public static int numFalsePositives(Long functionality_id, Integer min_judges, Integer min_confidence, Integer project_granularity) throws SQLException {
String sql = "SELECT count(1) FROM false_positives WHERE 1 = 1 ";
if(functionality_id != null)
sql += " AND functionality_id = " + functionality_id;
if(min_judges != null)
sql += " AND min_judges >= " + min_judges;
if(min_confidence != null)
sql += " AND min_confidence >= " + min_confidence;
if (project_granularity != null) {
if(project_granularity == EvaluateTools.INTER_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) != (SELECT project FROM functions WHERE id = function_id_two))";
} else if (project_granularity == EvaluateTools.INTRA_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) = (SELECT project FROM functions WHERE id = function_id_two))";
}
}
Connection conn = BigCloneBenchDB.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
rs.next();
int num = rs.getInt(1);
rs.close();
stmt.close();
conn.close();
return num;
}
public static int numFalseDetected(Long tool_id, Long functionality_id, Integer min_judges, Integer min_confidence, Integer project_granularity, CloneMatcher matching_algorithm) throws SQLException {
Connection conn;
Statement stmt;
ResultSet rs;
String sql;
int numDetected = 0;
sql = "SELECT function_id_one, function_id_two from false_positives WHERE 1 = 1 ";
if(functionality_id != null)
sql += " AND functionality_id = " + functionality_id;
if(min_judges != null)
sql += " AND min_judges >= " + min_judges;
if(min_confidence != null)
sql += " AND min_confidence >= " + min_confidence;
if (project_granularity != null) {
if(project_granularity == EvaluateTools.INTER_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) != (SELECT project FROM functions WHERE id = function_id_two))";
} else if (project_granularity == EvaluateTools.INTRA_PROJECT_CLONES) {
sql += " AND ((SELECT project FROM functions WHERE id = function_id_one) = (SELECT project FROM functions WHERE id = function_id_two))";
}
}
conn = BigCloneBenchDB.getConnection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.setFetchSize(1000);
rs = stmt.executeQuery(sql);
while(rs.next()) {
long f1_id = rs.getLong(1);
long f2_id = rs.getLong(2);
Clone clone1 = new Clone(f1_id ,f2_id);
Clone clone2 = new Clone(f2_id, f1_id);
if(matching_algorithm.isDetected(clone1) || matching_algorithm.isDetected(clone2)) {
numDetected++;
}
}
rs.close();
stmt.close();
conn.setAutoCommit(true);
conn.close();
return numDetected;
}
}