-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Overlay: Future-proof Java config & XML discard predicates #20484
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -18,7 +18,7 @@ predicate isOverlay() { databaseMetadata("isOverlay", "true") } | |
| overlay[local] | ||
| string getRawFile(@locatable el) { | ||
| exists(@location loc, @file file | | ||
| hasLocation(el, loc) and | ||
| (hasLocation(el, loc) or xmllocations(el, loc)) and | ||
| locations_default(loc, file, _, _, _, _) and | ||
| files(file, result) | ||
| ) | ||
|
|
@@ -73,40 +73,22 @@ private predicate discardReferableLocatable(@locatable el) { | |
| ) | ||
| } | ||
|
|
||
| /** Gets the raw file for a configLocatable. */ | ||
| overlay[local] | ||
| private predicate baseConfigLocatable(@configLocatable l) { not isOverlay() and exists(l) } | ||
|
|
||
| overlay[local] | ||
| private predicate overlayHasConfigLocatables() { | ||
| isOverlay() and | ||
| exists(@configLocatable el) | ||
| } | ||
|
|
||
| overlay[discard_entity] | ||
| private predicate discardBaseConfigLocatable(@configLocatable el) { | ||
| // The properties extractor is currently not incremental, so if | ||
| // the overlay contains any config locatables, the overlay should | ||
| // contain a full extraction and all config locatables from base | ||
| // should be discarded. | ||
| baseConfigLocatable(el) and overlayHasConfigLocatables() | ||
| } | ||
|
|
||
| overlay[local] | ||
| private predicate baseXmlLocatable(@xmllocatable l) { | ||
| not isOverlay() and not files(l, _) and not xmlNs(l, _, _, _) | ||
| private string getRawFileForConfig(@configLocatable el) { | ||
| exists(@location loc, @file file | | ||
| configLocations(el, loc) and | ||
| locations_default(loc, file, _, _, _, _) and | ||
| files(file, result) | ||
| ) | ||
|
Comment on lines
+76
to
+83
|
||
| } | ||
|
|
||
| overlay[local] | ||
| private predicate overlayHasXmlLocatable() { | ||
| isOverlay() and | ||
| exists(@xmllocatable l | not files(l, _) and not xmlNs(l, _, _, _)) | ||
| private string baseConfigLocatable(@configLocatable el) { | ||
| not isOverlay() and result = getRawFileForConfig(el) | ||
| } | ||
|
|
||
| overlay[discard_entity] | ||
| private predicate discardBaseXmlLocatable(@xmllocatable el) { | ||
| // The XML extractor is currently not incremental, so if | ||
| // the overlay contains any XML locatables, the overlay should | ||
| // contain a full extraction and all XML locatables from base | ||
| // should be discarded. | ||
| baseXmlLocatable(el) and overlayHasXmlLocatable() | ||
| private predicate discardBaseConfigLocatable(@configLocatable el) { | ||
| overlayChangedFiles(baseConfigLocatable(el)) | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,7 @@ module; | |
|
|
||
| import semmle.files.FileSystem | ||
| private import codeql.xml.Xml | ||
| private import semmle.code.java.Overlay | ||
|
|
||
| private module Input implements InputSig<File, Location> { | ||
| class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; | ||
|
|
@@ -69,3 +70,13 @@ private module Input implements InputSig<File, Location> { | |
| } | ||
|
|
||
| import Make<File, Location, Input> | ||
|
|
||
| private class DiscardableXmlAttribute extends DiscardableLocatable, @xmlattribute { } | ||
|
|
||
| private class DiscardableXmlElement extends DiscardableLocatable, @xmlelement { } | ||
|
|
||
| private class DiscardableXmlComment extends DiscardableLocatable, @xmlcomment { } | ||
|
|
||
| private class DiscardableXmlCharacters extends DiscardableLocatable, @xmlcharacters { } | ||
|
|
||
| private class DiscardableXmlDtd extends DiscardableLocatable, @xmldtd { } | ||
|
Comment on lines
+74
to
+82
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] Please add a short doc comment clarifying that getRawFile now handles XML locatables via xmllocations in addition to standard locations, since this broadens the function’s scope and improves discoverability.