Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed Jul 9, 2020
2 parents 0742432 + 24ad68d commit d206272
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions aibolit/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
from aibolit import __version__
from aibolit.config import Config
from aibolit.ml_pipeline.ml_pipeline import train_process, collect_dataset
from aibolit.utils.ast_builder import build_ast

dir_path = os.path.dirname(os.path.realpath(__file__))

Expand Down Expand Up @@ -327,6 +328,23 @@ def run_recommend_for_file(file: str, args):
:return: dict with code lines, filename and pattern name
"""
java_file = str(Path(os.getcwd(), file))
tree = build_ast(file)
classes_with_annonations = find_annotation_by_node_type(tree, javalang.tree.ClassDeclaration)
functions_with_annotations = find_annotation_by_node_type(tree, javalang.tree.MethodDeclaration)
fields_with_annotations = find_annotation_by_node_type(tree, javalang.tree.FieldDeclaration)
classes_with_patterns_ignored = flatten(
[pattern_code for node, pattern_code in classes_with_annonations.items()])
patterns_ignored = defaultdict(list)

for node, patterns_list in functions_with_annotations.items():
start_pos, end_pos = find_start_and_end_lines(node)
for p in patterns_list:
patterns_ignored[p].append([start_pos, end_pos])

for node, patterns_list in fields_with_annotations.items():
for p in patterns_list:
patterns_ignored[p].append([node.position.line, node.position.line])

input_params, code_lines_dict, error_string = calculate_patterns_and_metrics(java_file, args)

if not input_params:
Expand All @@ -338,6 +356,17 @@ def run_recommend_for_file(file: str, args):
error_string = 'Empty java file; ncss = 0'
else:
results_list = inference(input_params, code_lines_dict, args)
new_results: List[Any] = []
for pattern_item in results_list:
# check if the whole class is suppressed
if pattern_item['pattern_code'] not in classes_with_patterns_ignored:
# then check if patterns are ignored in fields or functions
add_pattern_if_ignored(patterns_ignored, pattern_item, new_results)
# add_pattern_if_ignored(patterns_for_fields_ignored, pattern_item, new_results)
else:
continue

results_list = new_results

if error_string:
ncss = 0
Expand Down

0 comments on commit d206272

Please sign in to comment.