Skip to content

Commit 31fa0fe

Browse files
author
thk123
committed
Addressing review comments
Cleaned up some logic Removed some redundant tests relating to java.lang.Object Added missing documentation for helper functions Made the validate_lambda_assignment take a single assignment as the calling functions are already checking that there is precisely one) Addressed linting and formatting problems
1 parent 397c14e commit 31fa0fe

File tree

1 file changed

+49
-24
lines changed

1 file changed

+49
-24
lines changed

unit/java_bytecode/java_bytecode_convert_method/convert_invoke_dynamic.cpp

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ struct lambda_assignment_test_datat
4343
/// \param symbol_table: The loaded symbol table
4444
/// \param instructions: The instructions of the method that calls invokedynamic
4545
/// \param test_data: The parameters for the test
46+
/// \param lambda_assignment: The assignment statement for the lambda method
4647
void validate_lambda_assignment(
4748
const symbol_tablet &symbol_table,
4849
const std::vector<codet> &instructions,
4950
const lambda_assignment_test_datat &test_data,
50-
const require_goto_statements::pointer_assignment_locationt
51-
&lambda_assignment)
51+
const code_assignt &lambda_assignment)
5252
{
53-
const typecast_exprt &rhs_value = require_expr::require_typecast(
54-
lambda_assignment.non_null_assignments[0].rhs());
53+
const typecast_exprt &rhs_value =
54+
require_expr::require_typecast(lambda_assignment.rhs());
5555

5656
const symbol_exprt &rhs_symbol =
5757
require_expr::require_symbol(rhs_value.op0());
@@ -85,15 +85,16 @@ void validate_lambda_assignment(
8585
const class_typet &tmp_lambda_class_type =
8686
require_type::require_complete_class(lambda_implementor_type_symbol.type);
8787

88-
REQUIRE(tmp_lambda_class_type.has_base(test_data.lambda_interface));
8988
REQUIRE(tmp_lambda_class_type.has_base("java::java.lang.Object"));
89+
REQUIRE(tmp_lambda_class_type.has_base(test_data.lambda_interface));
9090

9191
class_hierarchyt class_hierarchy;
9292
class_hierarchy(symbol_table);
9393

9494
const auto &parents = class_hierarchy.get_parents_trans(tmp_class_identifier);
9595
REQUIRE_THAT(
9696
parents,
97+
// NOLINTNEXTLINE(whitespace/braces)
9798
Catch::Matchers::Vector::ContainsElementMatcher<irep_idt>{
9899
test_data.lambda_interface});
99100

@@ -102,6 +103,7 @@ void validate_lambda_assignment(
102103

103104
REQUIRE_THAT(
104105
interface_children,
106+
// NOLINTNEXTLINE(whitespace/braces)
105107
Catch::Matchers::Vector::ContainsElementMatcher<irep_idt>{
106108
tmp_class_identifier});
107109

@@ -111,16 +113,6 @@ void validate_lambda_assignment(
111113
const symbol_typet &super_class_type = require_type::require_symbol(
112114
super_class_component.type(), "java::java.lang.Object");
113115

114-
const symbolt &base_class_symbol = require_symbol::require_symbol_exists(
115-
symbol_table, super_class_type.get_identifier());
116-
117-
REQUIRE(base_class_symbol.is_type);
118-
const class_typet &super_class_type_struct =
119-
require_type::require_incomplete_class(base_class_symbol.type);
120-
121-
require_type::require_component(super_class_type_struct, "@class_identifier");
122-
// TODO verify the components of the class have been set correctly
123-
124116
THEN("The function in the class should call the lambda method")
125117
{
126118
const irep_idt method_identifier =
@@ -175,6 +167,11 @@ void validate_lambda_assignment(
175167

176168
/// Find the assignment to the lambda and then call validate_lamdba_assignement
177169
/// for full validation.
170+
/// \param symbol_table: The loaded symbol table
171+
/// \param instructions: The instructions of the method that calls invokedynamic
172+
/// \param test_data: The parameters for the test
173+
/// \param lambda_variable_id: A regex matching the name of the variable which
174+
/// stores the lambda
178175
void validate_local_variable_lambda_assignment(
179176
const symbol_tablet &symbol_table,
180177
const std::vector<codet> &instructions,
@@ -189,7 +186,10 @@ void validate_local_variable_lambda_assignment(
189186
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
190187

191188
validate_lambda_assignment(
192-
symbol_table, instructions, test_data, lambda_assignment);
189+
symbol_table,
190+
instructions,
191+
test_data,
192+
lambda_assignment.non_null_assignments[0]);
193193
}
194194

195195
SCENARIO(
@@ -248,6 +248,7 @@ SCENARIO(
248248
symbol_exprt integer_param{"primitive", java_int_type()};
249249
symbol_exprt ref_param{"reference",
250250
java_type_from_string("Ljava/lang/Object;")};
251+
// NOLINTNEXTLINE(whitespace/braces)
251252
symbol_exprt generic_param{
252253
"specalisedGeneric",
253254
java_type_from_string("LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -275,6 +276,8 @@ SCENARIO(
275276
symbol_exprt integer_param{"primitive", java_type_from_string("[I")};
276277
symbol_exprt ref_param{"reference",
277278
java_type_from_string("[Ljava/lang/Object;")};
279+
280+
// NOLINTNEXTLINE(whitespace/braces)
278281
symbol_exprt generic_param{
279282
"specalisedGeneric",
280283
java_type_from_string("[LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -315,7 +318,6 @@ SCENARIO(
315318
test_data.lambda_interface_method_descriptor =
316319
".Execute:()Ljava/lang/Object;";
317320

318-
//"java::LocalLambdas.lambda$test$0:()V"
319321
test_data.lambda_function_id =
320322
"java::LocalLambdas.lambda$test$4:()Ljava/lang/Object;";
321323
test_data.expected_params = {};
@@ -348,14 +350,20 @@ SCENARIO(
348350
function_prefix_regex_str +
349351
R"(::\d+::returningSpecalisedGenericLambda$)"));
350352
}
351-
// TODO[TG-2482]: Tests for local lambdas that capture variables
353+
// TODO(tkiley): Tests for local lambdas that capture
354+
// TODO(tkiley): variables [TG-2482]
352355
}
353356
}
354357
});
355358
}
356359

357360
/// Find the assignment to the lambda in the constructor
358361
/// and then call validate_lamdba_assignement for full validation.
362+
/// \param symbol_table: The loaded symbol table
363+
/// \param instructions: The instructions of the method that calls invokedynamic
364+
/// \param test_data: The parameters for the test
365+
/// \param lambda_variable_id: The name of the member variable that stores the
366+
/// lambda
359367
void validate_member_variable_lambda_assignment(
360368
const symbol_tablet &symbol_table,
361369
const std::vector<codet> &instructions,
@@ -370,7 +378,10 @@ void validate_member_variable_lambda_assignment(
370378
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
371379

372380
validate_lambda_assignment(
373-
symbol_table, instructions, test_data, lambda_assignment);
381+
symbol_table,
382+
instructions,
383+
test_data,
384+
lambda_assignment.non_null_assignments[0]);
374385
}
375386

376387
SCENARIO(
@@ -423,8 +434,9 @@ SCENARIO(
423434
"(ILjava/lang/Object;LDummyGeneric;)V";
424435

425436
symbol_exprt integer_param{"primitive", java_int_type()};
426-
symbol_exprt ref_param{"reference",
437+
symbol_exprt ref_param{"reference", // NOLINT(whitespace/braces)
427438
java_type_from_string("Ljava/lang/Object;")};
439+
// NOLINTNEXTLINE(whitespace/braces)
428440
symbol_exprt generic_param{
429441
"specalisedGeneric",
430442
java_type_from_string("LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -447,8 +459,9 @@ SCENARIO(
447459
"([I[Ljava/lang/Object;[LDummyGeneric;)V";
448460

449461
symbol_exprt integer_param{"primitive", java_type_from_string("[I")};
450-
symbol_exprt ref_param{"reference",
462+
symbol_exprt ref_param{"reference", // NOLINT(whitespace/braces)
451463
java_type_from_string("[Ljava/lang/Object;")};
464+
// NOLINTNEXTLINE(whitespace/braces)
452465
symbol_exprt generic_param{
453466
"specalisedGeneric",
454467
java_type_from_string("[LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -505,14 +518,20 @@ SCENARIO(
505518
"returningSpecalisedGenericLambda");
506519
}
507520

508-
// TODO[TG-2486]: Tests for member lambdas that capture member variables
521+
// TODO(tkiley): Tests for member lambdas that capture member variables
522+
// TODO(tkiley): [TG-2486]
509523
}
510524
}
511525
});
512526
}
513527

514528
/// Find the assignment to the lambda in the <clinit> and then call
515529
/// validate_lamdba_assignement for full validation.
530+
/// \param symbol_table: The loaded symbol table
531+
/// \param instructions: The instructions of the method that calls invokedynamic
532+
/// \param test_data: The parameters for the test
533+
/// \param static_field_name: The name of the static variable that stores the
534+
/// lambda
516535
void validate_static_member_variable_lambda_assignment(
517536
const symbol_tablet &symbol_table,
518537
const std::vector<codet> &instructions,
@@ -527,7 +546,10 @@ void validate_static_member_variable_lambda_assignment(
527546
REQUIRE_FALSE(lambda_assignment.null_assignment.has_value());
528547

529548
validate_lambda_assignment(
530-
symbol_table, instructions, test_data, lambda_assignment);
549+
symbol_table,
550+
instructions,
551+
test_data,
552+
lambda_assignment.non_null_assignments[0]);
531553
}
532554

533555
SCENARIO(
@@ -586,6 +608,7 @@ SCENARIO(
586608
symbol_exprt integer_param{"primitive", java_int_type()};
587609
symbol_exprt ref_param{"reference",
588610
java_type_from_string("Ljava/lang/Object;")};
611+
// NOLINTNEXTLINE(whitespace/braces)
589612
symbol_exprt generic_param{
590613
"specalisedGeneric",
591614
java_type_from_string("LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -610,6 +633,7 @@ SCENARIO(
610633
symbol_exprt integer_param{"primitive", java_type_from_string("[I")};
611634
symbol_exprt ref_param{"reference",
612635
java_type_from_string("[Ljava/lang/Object;")};
636+
// NOLINTNEXTLINE(whitespace/braces)
613637
symbol_exprt generic_param{
614638
"specalisedGeneric",
615639
java_type_from_string("[LDummyGeneric<Ljava/lang/Interger;>;")};
@@ -667,7 +691,8 @@ SCENARIO(
667691
"returningSpecalisedGenericLambda");
668692
}
669693

670-
// TODO[TG-2486]: Tests for member lambdas that capture member variables
694+
// TODO(tkiley): Tests for member lambdas that capture member variables
695+
// TODO(tkiley): [TG-2486]
671696
}
672697
}
673698
});

0 commit comments

Comments
 (0)