Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvement to Inheritance structure needed #24

Open
pjljvandelaar opened this issue Mar 25, 2022 · 1 comment
Open

Improvement to Inheritance structure needed #24

pjljvandelaar opened this issue Mar 25, 2022 · 1 comment

Comments

@pjljvandelaar
Copy link
Collaborator

When running the cyper query

MATCH 
    (user:AdaDeclaration)-[:References]->(provider:AdaDeclaration),
    (user)-[:Source]->(file:File),
    (provider)-[:Source]->(adsFile:AdaSpecificationFile)
WHERE
    adsFile.name ENDS WITH "rejuvenation.ads"
RETURN file, count(user) ORDER BY count(user) DESC

on the current graphml file from rejuvenation library (obtained with Dependency_Graph_Extractor)
one gets

╒══════════════════════════════════════════════════════════════════════╤═════════════╕
│"file"                                                                │"count(user)"│
╞══════════════════════════════════════════════════════════════════════╪═════════════╡
│{"relativeName":"rejuvenation-finder.adb","subtype":"AdaBodyFile","nam│12           │
│e":"file:src\rejuvenation-finder.adb","type":"File","fullyQualifiedNam│             │
│e":"src\rejuvenation-finder.adb"}                                     │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-finder.ads","subtype":"AdaSpecificationF│10           │
│ile","name":"file:src\rejuvenation-finder.ads","type":"File","fullyQua│             │
│lifiedName":"src\rejuvenation-finder.ads"}                            │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-replacer.adb","subtype":"AdaBodyFile","n│8            │
│ame":"file:src\rejuvenation-replacer.adb","fullyQualifiedName":"src\re│             │
│juvenation-replacer.adb","type":"File"}                               │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-match_patterns.ads","subtype":"AdaSpecif│8            │
│icationFile","name":"file:src\rejuvenation-match_patterns.ads","fullyQ│             │
│ualifiedName":"src\rejuvenation-match_patterns.ads","type":"File"}    │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-utils.adb","subtype":"AdaBodyFile","name│7            │
│":"file:src\rejuvenation-utils.adb","type":"File","fullyQualifiedName"│             │
│:"src\rejuvenation-utils.adb"}                                        │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-match_patterns.adb","subtype":"AdaBodyFi│7            │
│le","name":"file:src\rejuvenation-match_patterns.adb","fullyQualifiedN│             │
│ame":"src\rejuvenation-match_patterns.adb","type":"File"}             │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-utils.ads","subtype":"AdaSpecificationFi│7            │
│le","name":"file:src\rejuvenation-utils.ads","type":"File","fullyQuali│             │
│fiedName":"src\rejuvenation-utils.ads"}                               │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-find_and_replacer.adb","subtype":"AdaBod│4            │
│yFile","name":"file:src\rejuvenation-find_and_replacer.adb","fullyQual│             │
│ifiedName":"src\rejuvenation-find_and_replacer.adb","type":"File"}    │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-placeholders.ads","subtype":"AdaSpecific│2            │
│ationFile","name":"file:src\rejuvenation-placeholders.ads","fullyQuali│             │
│fiedName":"src\rejuvenation-placeholders.ads","type":"File"}          │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-placeholders.adb","subtype":"AdaBodyFile│2            │
│","name":"file:src\rejuvenation-placeholders.adb","fullyQualifiedName"│             │
│:"src\rejuvenation-placeholders.adb","type":"File"}                   │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-find_and_replacer.ads","subtype":"AdaSpe│1            │
│cificationFile","name":"file:src\rejuvenation-find_and_replacer.ads","│             │
│fullyQualifiedName":"src\rejuvenation-find_and_replacer.ads","type":"F│             │
│ile"}                                                                 │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-factory.adb","subtype":"AdaBodyFile","na│1            │
│me":"file:src\rejuvenation-factory.adb","fullyQualifiedName":"src\reju│             │
│venation-factory.adb","type":"File"}                                  │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-parameters.ads","subtype":"AdaSpecificat│1            │
│ionFile","name":"file:src\rejuvenation-parameters.ads","fullyQualified│             │
│Name":"src\rejuvenation-parameters.ads","type":"File"}                │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-navigation.ads","subtype":"AdaSpecificat│1            │
│ionFile","name":"file:src\rejuvenation-navigation.ads","fullyQualified│             │
│Name":"src\rejuvenation-navigation.ads","type":"File"}                │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-patterns.adb","subtype":"AdaBodyFile","n│1            │
│ame":"file:src\rejuvenation-patterns.adb","fullyQualifiedName":"src\re│             │
│juvenation-patterns.adb","type":"File"}                               │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-factory.ads","subtype":"AdaSpecification│1            │
│File","name":"file:src\rejuvenation-factory.ads","fullyQualifiedName":│             │
│"src\rejuvenation-factory.ads","type":"File"}                         │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-printer.ads","subtype":"AdaSpecification│1            │
│File","name":"file:src\rejuvenation-printer.ads","fullyQualifiedName":│             │
│"src\rejuvenation-printer.ads","type":"File"}                         │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-node_locations.ads","subtype":"AdaSpecif│1            │
│icationFile","name":"file:src\rejuvenation-node_locations.ads","fullyQ│             │
│ualifiedName":"src\rejuvenation-node_locations.ads","type":"File"}    │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-file_utils.ads","subtype":"AdaSpecificat│1            │
│ionFile","name":"file:src\rejuvenation-file_utils.ads","fullyQualified│             │
│Name":"src\rejuvenation-file_utils.ads","type":"File"}                │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-navigation.adb","subtype":"AdaBodyFile",│1            │
│"name":"file:src\rejuvenation-navigation.adb","fullyQualifiedName":"sr│             │
│c\rejuvenation-navigation.adb","type":"File"}                         │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-replacer.ads","subtype":"AdaSpecificatio│1            │
│nFile","name":"file:src\rejuvenation-replacer.ads","fullyQualifiedName│             │
│":"src\rejuvenation-replacer.ads","type":"File"}                      │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-pretty_print.adb","subtype":"AdaBodyFile│1            │
│","name":"file:src\rejuvenation-pretty_print.adb","fullyQualifiedName"│             │
│:"src\rejuvenation-pretty_print.adb","type":"File"}                   │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-string_utils.adb","subtype":"AdaBodyFile│1            │
│","name":"file:src\rejuvenation-string_utils.adb","fullyQualifiedName"│             │
│:"src\rejuvenation-string_utils.adb","type":"File"}                   │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-indentation.ads","subtype":"AdaSpecifica│1            │
│tionFile","name":"file:src\rejuvenation-indentation.ads","fullyQualifi│             │
│edName":"src\rejuvenation-indentation.ads","type":"File"}             │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-printer.adb","subtype":"AdaBodyFile","na│1            │
│me":"file:src\rejuvenation-printer.adb","fullyQualifiedName":"src\reju│             │
│venation-printer.adb","type":"File"}                                  │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-simple_factory.adb","subtype":"AdaBodyFi│1            │
│le","name":"file:src\rejuvenation-simple_factory.adb","fullyQualifiedN│             │
│ame":"src\rejuvenation-simple_factory.adb","type":"File"}             │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-nested.ads","subtype":"AdaSpecificationF│1            │
│ile","name":"file:src\rejuvenation-nested.ads","type":"File","fullyQua│             │
│lifiedName":"src\rejuvenation-nested.ads"}                            │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-file_utils.adb","subtype":"AdaBodyFile",│1            │
│"name":"file:src\rejuvenation-file_utils.adb","fullyQualifiedName":"sr│             │
│c\rejuvenation-file_utils.adb","type":"File"}                         │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-text_rewrites.ads","subtype":"AdaSpecifi│1            │
│cationFile","name":"file:src\rejuvenation-text_rewrites.ads","fullyQua│             │
│lifiedName":"src\rejuvenation-text_rewrites.ads","type":"File"}       │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-patterns.ads","subtype":"AdaSpecificatio│1            │
│nFile","name":"file:src\rejuvenation-patterns.ads","fullyQualifiedName│             │
│":"src\rejuvenation-patterns.ads","type":"File"}                      │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-pretty_print.ads","subtype":"AdaSpecific│1            │
│ationFile","name":"file:src\rejuvenation-pretty_print.ads","fullyQuali│             │
│fiedName":"src\rejuvenation-pretty_print.ads","type":"File"}          │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-string_utils.ads","subtype":"AdaSpecific│1            │
│ationFile","name":"file:src\rejuvenation-string_utils.ads","fullyQuali│             │
│fiedName":"src\rejuvenation-string_utils.ads","type":"File"}          │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-simple_factory.ads","subtype":"AdaSpecif│1            │
│icationFile","name":"file:src\rejuvenation-simple_factory.ads","fullyQ│             │
│ualifiedName":"src\rejuvenation-simple_factory.ads","type":"File"}    │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-text_rewrites.adb","subtype":"AdaBodyFil│1            │
│e","name":"file:src\rejuvenation-text_rewrites.adb","fullyQualifiedNam│             │
│e":"src\rejuvenation-text_rewrites.adb","type":"File"}                │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-nested.adb","subtype":"AdaBodyFile","nam│1            │
│e":"file:src\rejuvenation-nested.adb","type":"File","fullyQualifiedNam│             │
│e":"src\rejuvenation-nested.adb"}                                     │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-indentation.adb","subtype":"AdaBodyFile"│1            │
│,"name":"file:src\rejuvenation-indentation.adb","fullyQualifiedName":"│             │
│src\rejuvenation-indentation.adb","type":"File"}                      │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-node_locations.adb","subtype":"AdaBodyFi│1            │
│le","name":"file:src\rejuvenation-node_locations.adb","fullyQualifiedN│             │
│ame":"src\rejuvenation-node_locations.adb","type":"File"}             │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation-parameters.adb","subtype":"AdaBodyFile",│1            │
│"name":"file:src\rejuvenation-parameters.adb","fullyQualifiedName":"sr│             │
│c\rejuvenation-parameters.adb","type":"File"}                         │             │
├──────────────────────────────────────────────────────────────────────┼─────────────┤
│{"relativeName":"rejuvenation.ads","subtype":"AdaSpecificationFile","n│1            │
│ame":"file:src\rejuvenation.ads","fullyQualifiedName":"src\rejuvenatio│             │
│n.ads","type":"File"}                                                 │             │
└──────────────────────────────────────────────────────────────────────┴─────────────┘

Should the instances with only one reference (hence only include the "Rejuvenation" package, yet use none of its declarations)
remain part of the rejuvenation inheritance hierarchy?
Especially, file utils and string utils are NOT specific for rejuvenation!

@arjan.mooij What is your opinion?

@pjljvandelaar
Copy link
Collaborator Author

With the following query

MATCH 
    (user:AdaDeclaration)-[:References]->(provider:AdaDeclaration),
    (user)-[:Source]->(file:File),
    (provider)-[:Source]->(adsFile:AdaSpecificationFile)
WHERE
    adsFile.name ENDS WITH "rejuvenation.ads"
RETURN file.relativeName, count(user) ORDER BY count(user) DESC

the results are easier to interpret.

╒════════════════════════════════════╤═════════════╕
│"file.relativeName"                 │"count(user)"│
╞════════════════════════════════════╪═════════════╡
│"rejuvenation-finder.adb"           │12           │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-finder.ads"           │10           │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-match_patterns.ads"   │8            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-replacer.adb"         │8            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-utils.adb"            │7            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-match_patterns.adb"   │7            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-utils.ads"            │7            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-find_and_replacer.adb"│4            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-placeholders.ads"     │2            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-placeholders.adb"     │2            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-text_rewrites.adb"    │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-factory.ads"          │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-printer.ads"          │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-node_locations.adb"   │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-indentation.adb"      │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-text_rewrites.ads"    │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-patterns.adb"         │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-node_locations.ads"   │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-find_and_replacer.ads"│1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-patterns.ads"         │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-file_utils.adb"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-navigation.ads"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-nested.ads"           │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-replacer.ads"         │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-parameters.adb"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-printer.adb"          │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-simple_factory.ads"   │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-nested.adb"           │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-factory.adb"          │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-indentation.ads"      │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-file_utils.ads"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-string_utils.adb"     │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-parameters.ads"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-navigation.adb"       │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-pretty_print.ads"     │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-pretty_print.adb"     │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-simple_factory.adb"   │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation-string_utils.ads"     │1            │
├────────────────────────────────────┼─────────────┤
│"rejuvenation.ads"                  │1            │
└────────────────────────────────────┴─────────────┘

One reason for this organization is that the With Use clauses of the parent is available to the child.
The query doesn't check that!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant