Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions java/ql/lib/semmle/code/java/Overlay.qll
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,45 @@ private string baseConfigLocatable(@configLocatable el) {
not isOverlay() and result = getRawFileForConfig(el)
}

overlay[local]
private predicate overlayConfigExtracted(string file) {
isOverlay() and
exists(@configLocatable el | file = getRawFileForConfig(el))
}

overlay[discard_entity]
private predicate discardBaseConfigLocatable(@configLocatable el) {
overlayChangedFiles(baseConfigLocatable(el))
or
// The config extractor is currently not incremental and may extract more
// property files than those included in overlayChangedFiles.
overlayConfigExtracted(baseConfigLocatable(el))
}

/**
* An `@xmllocatable` that should be discarded in the base variant if its file is
* extracted in the overlay variant.
*/
overlay[local]
abstract class DiscardableXmlLocatable extends @xmllocatable {
/** Gets the raw file for an xmllocatable in base. */
string getRawFileInBase() { not isOverlay() and result = getRawFile(this) }

/** Gets a textual representation of this discardable xmllocatable. */
string toString() { none() }
}

overlay[local]
private predicate overlayXmlExtracted(string file) {
isOverlay() and
exists(@xmllocatable el | not files(el, _) and not xmlNs(el, _, _, _) and file = getRawFile(el))
}

overlay[discard_entity]
private predicate discardXmlLocatable(@xmllocatable el) {
overlayChangedFiles(el.(DiscardableXmlLocatable).getRawFileInBase())
or
// The XML extractor is currently not incremental and may extract more
// XML files than those included in overlayChangedFiles.
overlayXmlExtracted(el.(DiscardableXmlLocatable).getRawFileInBase())
}
10 changes: 5 additions & 5 deletions java/ql/lib/semmle/code/xml/XML.qll
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@ private module Input implements InputSig<File, Location> {

import Make<File, Location, Input>

private class DiscardableXmlAttribute extends DiscardableLocatable, @xmlattribute { }
private class DiscardableXmlAttribute extends DiscardableXmlLocatable, @xmlattribute { }

private class DiscardableXmlElement extends DiscardableLocatable, @xmlelement { }
private class DiscardableXmlElement extends DiscardableXmlLocatable, @xmlelement { }

private class DiscardableXmlComment extends DiscardableLocatable, @xmlcomment { }
private class DiscardableXmlComment extends DiscardableXmlLocatable, @xmlcomment { }

private class DiscardableXmlCharacters extends DiscardableLocatable, @xmlcharacters { }
private class DiscardableXmlCharacters extends DiscardableXmlLocatable, @xmlcharacters { }

private class DiscardableXmlDtd extends DiscardableLocatable, @xmldtd { }
private class DiscardableXmlDtd extends DiscardableXmlLocatable, @xmldtd { }
Loading