mirror of
https://github.com/github/codeql.git
synced 2026-07-05 19:45:29 +02:00
Compare commits
102 Commits
codeql-cli
...
criemen/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5c14dca5a | ||
|
|
22e1921391 | ||
|
|
b589fcad11 | ||
|
|
80b6135a64 | ||
|
|
3a864d3de2 | ||
|
|
085bf2f662 | ||
|
|
287857c5db | ||
|
|
b79be718e1 | ||
|
|
b3fa4f3d9e | ||
|
|
0738e01e7e | ||
|
|
e81fdc951a | ||
|
|
77bfe39ca7 | ||
|
|
4381bae5d1 | ||
|
|
d8c8bcd386 | ||
|
|
cbb58d0041 | ||
|
|
34d83a6b0d | ||
|
|
4e3440aad0 | ||
|
|
16c2cf24b3 | ||
|
|
592e2eafb6 | ||
|
|
c4c8c9ddc1 | ||
|
|
3ac8108c4a | ||
|
|
6a7d8b5301 | ||
|
|
7d500cf58c | ||
|
|
d710c1e89d | ||
|
|
d84e745ce9 | ||
|
|
65189e09f5 | ||
|
|
8df7fbf6d6 | ||
|
|
d27b28d371 | ||
|
|
9703f67794 | ||
|
|
6bc8407bd6 | ||
|
|
c3b36325b2 | ||
|
|
20d9fd11ac | ||
|
|
19c2eb17c4 | ||
|
|
67d94376e8 | ||
|
|
d935c47231 | ||
|
|
e6424f0f45 | ||
|
|
18b99ffecc | ||
|
|
6827bedaa7 | ||
|
|
3dce56b0b1 | ||
|
|
4cd34531c6 | ||
|
|
2edadbf423 | ||
|
|
a1688f6a1a | ||
|
|
81239dcd95 | ||
|
|
bd69b96752 | ||
|
|
43f54db4db | ||
|
|
d41d7c8246 | ||
|
|
a213982b48 | ||
|
|
09aca6b47e | ||
|
|
d97a301fef | ||
|
|
e94fabcc19 | ||
|
|
cb1b1da422 | ||
|
|
b0003c0453 | ||
|
|
f7bf5e89be | ||
|
|
7c4733e88f | ||
|
|
7049499e95 | ||
|
|
3aa32e4aff | ||
|
|
f7ea8a1563 | ||
|
|
5751fc2d3a | ||
|
|
45d4d5138a | ||
|
|
79718f1cd6 | ||
|
|
75772c5832 | ||
|
|
5d14307ea2 | ||
|
|
f13f19d5dc | ||
|
|
2939cefc68 | ||
|
|
c99a84689b | ||
|
|
525b6f30e3 | ||
|
|
5fbdd83a23 | ||
|
|
273c0bd121 | ||
|
|
1787bcb05a | ||
|
|
74739bedfc | ||
|
|
831a66d812 | ||
|
|
e594e7283d | ||
|
|
c2b25c7f2b | ||
|
|
b8d0b691da | ||
|
|
bc1dd45d4f | ||
|
|
9429e5ccba | ||
|
|
81a815c343 | ||
|
|
bdcc5e7b67 | ||
|
|
bc0ae4cd1e | ||
|
|
9bd3f3dee0 | ||
|
|
fc301206d1 | ||
|
|
3acab640b2 | ||
|
|
15b5bcc67c | ||
|
|
8b9617cd38 | ||
|
|
ea3e5c8a99 | ||
|
|
f1f6f9b580 | ||
|
|
22802fd41f | ||
|
|
5d34dbf2c2 | ||
|
|
624d2b83c0 | ||
|
|
21366dd502 | ||
|
|
6ea01b81bb | ||
|
|
fd311d5143 | ||
|
|
d15e1b5598 | ||
|
|
c4b0f81883 | ||
|
|
20dc242830 | ||
|
|
6d4f3bd014 | ||
|
|
7dcdad066f | ||
|
|
81787a159e | ||
|
|
e84dda4fa6 | ||
|
|
d638b5c7d4 | ||
|
|
f6ec56a977 | ||
|
|
be0a60a7f6 |
2
.github/workflows/buildifier.yml
vendored
2
.github/workflows/buildifier.yml
vendored
@@ -24,5 +24,5 @@ jobs:
|
||||
extra_args: >
|
||||
buildifier --all-files 2>&1 ||
|
||||
(
|
||||
echo -e "In order to format all bazel files, please run:\n bazel run //misc/bazel:buildifier"; exit 1
|
||||
echo -e "In order to format all bazel files, please run:\n bazel run //misc/bazel/buildifier"; exit 1
|
||||
)
|
||||
|
||||
@@ -26,7 +26,7 @@ repos:
|
||||
name: Format bazel files
|
||||
files: \.(bazel|bzl)
|
||||
language: system
|
||||
entry: bazel run //misc/bazel:buildifier
|
||||
entry: bazel run //misc/bazel/buildifier
|
||||
pass_filenames: false
|
||||
|
||||
# DISABLED: can be enabled by copying this config and installing `pre-commit` with `--config` on the copy
|
||||
|
||||
@@ -848,6 +848,8 @@ edges
|
||||
| simple.cpp:120:8:120:8 | *a [i] | simple.cpp:120:10:120:10 | i | provenance | |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | |
|
||||
| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
|
||||
| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
|
||||
| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | provenance | |
|
||||
| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | provenance | |
|
||||
@@ -1758,6 +1760,8 @@ nodes
|
||||
| simple.cpp:120:10:120:10 | i | semmle.label | i |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] |
|
||||
| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] |
|
||||
| struct_init.c:15:8:15:9 | *ab [a] | semmle.label | *ab [a] |
|
||||
| struct_init.c:15:8:15:9 | *ab [a] | semmle.label | *ab [a] |
|
||||
| struct_init.c:15:12:15:12 | a | semmle.label | a |
|
||||
| struct_init.c:20:13:20:14 | *definition of ab [a] | semmle.label | *definition of ab [a] |
|
||||
|
||||
@@ -737,6 +737,8 @@ edges
|
||||
| simple.cpp:120:8:120:8 | a [i] | simple.cpp:120:10:120:10 | i | provenance | |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | |
|
||||
| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
|
||||
| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
|
||||
| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
|
||||
| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | |
|
||||
@@ -1549,6 +1551,8 @@ nodes
|
||||
| simple.cpp:120:10:120:10 | i | semmle.label | i |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
|
||||
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
|
||||
| struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] |
|
||||
| struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] |
|
||||
| struct_init.c:15:8:15:9 | ab [post update] [a] | semmle.label | ab [post update] [a] |
|
||||
| struct_init.c:15:12:15:12 | a | semmle.label | a |
|
||||
|
||||
@@ -450,7 +450,7 @@ void test_qualifiers()
|
||||
b.member = source();
|
||||
sink(b); // $ ir MISSING: ast
|
||||
sink(b.member); // $ ast,ir
|
||||
sink(b.getMember()); // $ ir MISSING: ast
|
||||
sink(b.getMember()); // $ MISSING: ir ast
|
||||
|
||||
c = new MyClass2(0);
|
||||
|
||||
|
||||
@@ -115,8 +115,8 @@ void test_vector_swap() {
|
||||
v3.swap(v4);
|
||||
|
||||
sink(v1);
|
||||
sink(v2); // $ ir MISSING:ast
|
||||
sink(v3); // $ ir MISSING:ast
|
||||
sink(v2); // $ MISSING:ir ast
|
||||
sink(v3); // $ MISSING:ir ast
|
||||
sink(v4);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Semmle.Extraction.Entities;
|
||||
using Semmle.Util;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities
|
||||
@@ -89,13 +90,21 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
trapFile.compilation_finished(this, (float)p.Total.Cpu.TotalSeconds, (float)p.Total.Elapsed.TotalSeconds);
|
||||
}
|
||||
|
||||
public void PopulateAggregatedMessages()
|
||||
{
|
||||
ExtractionMessage.groupedMessageCounts.ForEach(pair =>
|
||||
{
|
||||
Context.TrapWriter.Writer.compilation_info(this, $"Extractor message count for group '{pair.Key}'", pair.Value.ToString());
|
||||
});
|
||||
}
|
||||
|
||||
public override void WriteId(EscapingTextWriter trapFile)
|
||||
{
|
||||
trapFile.Write(hashCode);
|
||||
trapFile.Write(";compilation");
|
||||
}
|
||||
|
||||
public override Location ReportingLocation => throw new NotImplementedException();
|
||||
public override Microsoft.CodeAnalysis.Location ReportingLocation => throw new NotImplementedException();
|
||||
|
||||
public override bool NeedsPopulation => Context.IsAssemblyScope;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
public override Microsoft.CodeAnalysis.Location ReportingLocation =>
|
||||
IsCompilerGeneratedDelegate()
|
||||
? Symbol.ContainingType.GetSymbolLocation()
|
||||
: Symbol.GetSymbolLocation();
|
||||
: BodyDeclaringSymbol.GetSymbolLocation();
|
||||
|
||||
public override bool NeedsPopulation => base.NeedsPopulation || IsCompilerGeneratedDelegate();
|
||||
|
||||
|
||||
@@ -250,6 +250,8 @@ namespace Semmle.Extraction.CSharp
|
||||
|
||||
public void LogPerformance(Entities.PerformanceMetrics p) => compilationEntity.PopulatePerformance(p);
|
||||
|
||||
public void ExtractAggregatedMessages() => compilationEntity.PopulateAggregatedMessages();
|
||||
|
||||
#nullable restore warnings
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -458,6 +458,7 @@ namespace Semmle.Extraction.CSharp
|
||||
|
||||
sw.Restart();
|
||||
analyser.PerformExtraction(options.Threads);
|
||||
analyser.ExtractAggregatedMessages();
|
||||
sw.Stop();
|
||||
var cpuTime2 = currentProcess.TotalProcessorTime;
|
||||
var userTime2 = currentProcess.UserProcessorTime;
|
||||
|
||||
@@ -26,6 +26,7 @@ codeql_csharp_library(
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
internals_visible_to = ["Semmle.Extraction.CSharp"],
|
||||
visibility = ["//csharp:__subpackages__"],
|
||||
deps = [
|
||||
"//csharp/extractor/Semmle.Util",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using Semmle.Util;
|
||||
|
||||
@@ -7,6 +8,8 @@ namespace Semmle.Extraction.Entities
|
||||
internal class ExtractionMessage : FreshEntity
|
||||
{
|
||||
private static readonly int limit = EnvironmentVariables.TryGetExtractorNumberOption<int>("MESSAGE_LIMIT") ?? 10000;
|
||||
|
||||
internal static readonly ConcurrentDictionary<string, int> groupedMessageCounts = [];
|
||||
private static int messageCount = 0;
|
||||
|
||||
private readonly Message msg;
|
||||
@@ -25,6 +28,10 @@ namespace Semmle.Extraction.Entities
|
||||
|
||||
protected override void Populate(TextWriter trapFile)
|
||||
{
|
||||
// For the time being we're counting the number of messages per severity, we could introduce other groupings in the future
|
||||
var key = msg.Severity.ToString();
|
||||
groupedMessageCounts.AddOrUpdate(key, 1, (_, c) => c + 1);
|
||||
|
||||
if (!bypassLimit)
|
||||
{
|
||||
var val = Interlocked.Increment(ref messageCount);
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Semmle.Util\Semmle.Util.csproj" />
|
||||
|
||||
<InternalsVisibleTo Include="Semmle.Extraction.CSharp" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\..\.paket\Paket.Restore.targets" />
|
||||
</Project>
|
||||
|
||||
@@ -7,3 +7,5 @@ extractorMessagesLeachedLimit
|
||||
compilationInfo
|
||||
| Compiler diagnostic count for CS0103 | 3.0 |
|
||||
| Compiler diagnostic count for CS8019 | 7.0 |
|
||||
| Extractor message count for group 'Error' | 8.0 |
|
||||
| Extractor message count for group 'Warning' | 1.0 |
|
||||
|
||||
@@ -11,7 +11,8 @@ query predicate extractorMessagesLeachedLimit(ExtractorMessage msg) {
|
||||
|
||||
query predicate compilationInfo(string key, float value) {
|
||||
exists(Compilation c, string infoValue |
|
||||
infoValue = c.getInfo(key) and key.matches("Compiler diagnostic count for%")
|
||||
infoValue = c.getInfo(key) and
|
||||
key.matches(["Compiler diagnostic count for%", "Extractor message count for group%"])
|
||||
|
|
||||
value = infoValue.toFloat()
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import semmle.code.csharp.commons.Diagnostics
|
||||
query predicate compilationInfo(string key, float value) {
|
||||
key != "Resolved references" and
|
||||
key != "Resolved assembly conflicts" and
|
||||
not key.matches("Compiler diagnostic count for%") and
|
||||
not key.matches(["Compiler diagnostic count for%", "Extractor message count for group%"]) and
|
||||
exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) |
|
||||
key = infoKey and
|
||||
value = infoValue.toFloat()
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Parameters of public methods in abstract controller-like classes are now considered remote flow sources.
|
||||
4
csharp/ql/lib/change-notes/2024-08-21-partial-methods.md
Normal file
4
csharp/ql/lib/change-notes/2024-08-21-partial-methods.md
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The reported location of `partial` methods has been changed from the definition to the implementation part.
|
||||
@@ -1,504 +1,4 @@
|
||||
/**
|
||||
* Provides classes for performing global (inter-procedural)
|
||||
* content-sensitive data flow analyses.
|
||||
*
|
||||
* Unlike `DataFlow::Global`, we allow for data to be stored (possibly nested) inside
|
||||
* contents of sources and sinks.
|
||||
* We track flow paths of the form
|
||||
*
|
||||
* ```
|
||||
* source --value-->* node
|
||||
* (--read--> node --value-->* node)*
|
||||
* --(non-value|value)-->* node
|
||||
* (--store--> node --value-->* node)*
|
||||
* --value-->* sink
|
||||
* ```
|
||||
*
|
||||
* where `--value-->` is a value-preserving flow step, `--read-->` is a read
|
||||
* step, `--store-->` is a store step, and `--(non-value)-->` is a
|
||||
* non-value-preserving flow step.
|
||||
*
|
||||
* That is, first a sequence of 0 or more reads, followed by 0 or more additional
|
||||
* steps, followed by 0 or more stores, with value-preserving steps allowed in
|
||||
* between all other steps.
|
||||
*/
|
||||
|
||||
private import csharp
|
||||
private import codeql.util.Boolean
|
||||
private import DataFlowImplCommon
|
||||
private import DataFlowImplSpecific::Private
|
||||
private import DataFlowImplSpecific::Private as DataFlowPrivate
|
||||
|
||||
/**
|
||||
* An input configuration for content data flow.
|
||||
*/
|
||||
signature module ConfigSig {
|
||||
/**
|
||||
* Holds if `source` is a relevant data flow source.
|
||||
*/
|
||||
predicate isSource(DataFlow::Node source);
|
||||
|
||||
/**
|
||||
* Holds if `sink` is a relevant data flow sink.
|
||||
*/
|
||||
predicate isSink(DataFlow::Node sink);
|
||||
|
||||
/**
|
||||
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
|
||||
*/
|
||||
default predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
|
||||
|
||||
/** Holds if data flow into `node` is prohibited. */
|
||||
default predicate isBarrier(DataFlow::Node node) { none() }
|
||||
|
||||
/**
|
||||
* Gets a data flow configuration feature to add restrictions to the set of
|
||||
* valid flow paths.
|
||||
*
|
||||
* - `FeatureHasSourceCallContext`:
|
||||
* Assume that sources have some existing call context to disallow
|
||||
* conflicting return-flow directly following the source.
|
||||
* - `FeatureHasSinkCallContext`:
|
||||
* Assume that sinks have some existing call context to disallow
|
||||
* conflicting argument-to-parameter flow directly preceding the sink.
|
||||
* - `FeatureEqualSourceSinkCallContext`:
|
||||
* Implies both of the above and additionally ensures that the entire flow
|
||||
* path preserves the call context.
|
||||
*/
|
||||
default DataFlow::FlowFeature getAFeature() { none() }
|
||||
|
||||
/** Gets a limit on the number of reads out of sources and number of stores into sinks. */
|
||||
default int accessPathLimit() { result = DataFlowPrivate::accessPathLimit() }
|
||||
|
||||
/** Holds if `c` is relevant for reads out of sources or stores into sinks. */
|
||||
default predicate isRelevantContent(DataFlow::ContentSet c) { any() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a global content data flow computation.
|
||||
*/
|
||||
module Global<ConfigSig ContentConfig> {
|
||||
private module FlowConfig implements DataFlow::StateConfigSig {
|
||||
class FlowState = State;
|
||||
|
||||
predicate isSource(DataFlow::Node source, FlowState state) {
|
||||
ContentConfig::isSource(source) and
|
||||
state.(InitState).decode(true)
|
||||
}
|
||||
|
||||
predicate isSink(DataFlow::Node sink, FlowState state) {
|
||||
ContentConfig::isSink(sink) and
|
||||
(
|
||||
state instanceof InitState or
|
||||
state instanceof StoreState or
|
||||
state instanceof ReadState
|
||||
)
|
||||
}
|
||||
|
||||
predicate isAdditionalFlowStep(
|
||||
DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2
|
||||
) {
|
||||
storeStep(node1, state1, _, node2, state2) or
|
||||
readStep(node1, state1, _, node2, state2) or
|
||||
additionalStep(node1, state1, node2, state2)
|
||||
}
|
||||
|
||||
predicate isAdditionalFlowStep = ContentConfig::isAdditionalFlowStep/2;
|
||||
|
||||
predicate isBarrier = ContentConfig::isBarrier/1;
|
||||
|
||||
DataFlow::FlowFeature getAFeature() { result = ContentConfig::getAFeature() }
|
||||
|
||||
predicate accessPathLimit = ContentConfig::accessPathLimit/0;
|
||||
|
||||
// needed to record reads/stores inside summarized callables
|
||||
predicate includeHiddenNodes() { any() }
|
||||
}
|
||||
|
||||
private module Flow = DataFlow::GlobalWithState<FlowConfig>;
|
||||
|
||||
/**
|
||||
* Holds if data stored inside `sourceAp` on `source` flows to `sinkAp` inside `sink`
|
||||
* for this configuration. `preservesValue` indicates whether any of the additional
|
||||
* flow steps defined by `isAdditionalFlowStep` are needed.
|
||||
*
|
||||
* For the source access path, `sourceAp`, the top of the stack represents the content
|
||||
* that was last read from. That is, if `sourceAp` is `Field1.Field2` (with `Field1`
|
||||
* being the top of the stack), then there is flow from `source.Field2.Field1`.
|
||||
*
|
||||
* For the sink access path, `sinkAp`, the top of the stack represents the content
|
||||
* that was last stored into. That is, if `sinkAp` is `Field1.Field2` (with `Field1`
|
||||
* being the top of the stack), then there is flow into `sink.Field1.Field2`.
|
||||
*/
|
||||
predicate flow(
|
||||
DataFlow::Node source, AccessPath sourceAp, DataFlow::Node sink, AccessPath sinkAp,
|
||||
boolean preservesValue
|
||||
) {
|
||||
exists(Flow::PathNode pathSource, Flow::PathNode pathSink |
|
||||
Flow::flowPath(pathSource, pathSink) and
|
||||
nodeReaches(pathSource, TAccessPathNil(), TAccessPathNil(), pathSink, sourceAp, sinkAp) and
|
||||
source = pathSource.getNode() and
|
||||
sink = pathSink.getNode()
|
||||
|
|
||||
pathSink.getState().(InitState).decode(preservesValue)
|
||||
or
|
||||
pathSink.getState().(ReadState).decode(_, preservesValue)
|
||||
or
|
||||
pathSink.getState().(StoreState).decode(_, preservesValue)
|
||||
)
|
||||
}
|
||||
|
||||
private newtype TState =
|
||||
TInitState(Boolean preservesValue) or
|
||||
TStoreState(int size, Boolean preservesValue) {
|
||||
size in [1 .. ContentConfig::accessPathLimit()]
|
||||
} or
|
||||
TReadState(int size, Boolean preservesValue) { size in [1 .. ContentConfig::accessPathLimit()] }
|
||||
|
||||
abstract private class State extends TState {
|
||||
abstract string toString();
|
||||
}
|
||||
|
||||
/** A flow state representing no reads or stores. */
|
||||
private class InitState extends State, TInitState {
|
||||
private boolean preservesValue_;
|
||||
|
||||
InitState() { this = TInitState(preservesValue_) }
|
||||
|
||||
override string toString() { result = "Init(" + preservesValue_ + ")" }
|
||||
|
||||
predicate decode(boolean preservesValue) { preservesValue = preservesValue_ }
|
||||
}
|
||||
|
||||
/** A flow state representing that content has been stored into. */
|
||||
private class StoreState extends State, TStoreState {
|
||||
private boolean preservesValue_;
|
||||
private int size_;
|
||||
|
||||
StoreState() { this = TStoreState(size_, preservesValue_) }
|
||||
|
||||
override string toString() { result = "StoreState(" + size_ + "," + preservesValue_ + ")" }
|
||||
|
||||
predicate decode(int size, boolean preservesValue) {
|
||||
size = size_ and preservesValue = preservesValue_
|
||||
}
|
||||
}
|
||||
|
||||
/** A flow state representing that content has been read from. */
|
||||
private class ReadState extends State, TReadState {
|
||||
private boolean preservesValue_;
|
||||
private int size_;
|
||||
|
||||
ReadState() { this = TReadState(size_, preservesValue_) }
|
||||
|
||||
override string toString() { result = "ReadState(" + size_ + "," + preservesValue_ + ")" }
|
||||
|
||||
predicate decode(int size, boolean preservesValue) {
|
||||
size = size_ and preservesValue = preservesValue_
|
||||
}
|
||||
}
|
||||
|
||||
private predicate storeStep(
|
||||
DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2,
|
||||
StoreState state2
|
||||
) {
|
||||
exists(boolean preservesValue, int size |
|
||||
storeSet(node1, c, node2, _, _) and
|
||||
ContentConfig::isRelevantContent(c) and
|
||||
state2.decode(size + 1, preservesValue)
|
||||
|
|
||||
state1.(InitState).decode(preservesValue) and size = 0
|
||||
or
|
||||
state1.(ReadState).decode(_, preservesValue) and size = 0
|
||||
or
|
||||
state1.(StoreState).decode(size, preservesValue)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate readStep(
|
||||
DataFlow::Node node1, State state1, DataFlow::ContentSet c, DataFlow::Node node2,
|
||||
ReadState state2
|
||||
) {
|
||||
exists(int size |
|
||||
readSet(node1, c, node2) and
|
||||
ContentConfig::isRelevantContent(c) and
|
||||
state2.decode(size + 1, true)
|
||||
|
|
||||
state1.(InitState).decode(true) and
|
||||
size = 0
|
||||
or
|
||||
state1.(ReadState).decode(size, true)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate additionalStep(
|
||||
DataFlow::Node node1, State state1, DataFlow::Node node2, State state2
|
||||
) {
|
||||
ContentConfig::isAdditionalFlowStep(node1, node2) and
|
||||
(
|
||||
state1 instanceof InitState and
|
||||
state2.(InitState).decode(false)
|
||||
or
|
||||
exists(int size |
|
||||
state1.(ReadState).decode(size, _) and
|
||||
state2.(ReadState).decode(size, false)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private newtype TAccessPath =
|
||||
TAccessPathNil() or
|
||||
TAccessPathCons(DataFlow::ContentSet head, AccessPath tail) {
|
||||
nodeReachesStore(_, _, _, _, head, _, tail)
|
||||
or
|
||||
nodeReachesRead(_, _, _, _, head, tail, _)
|
||||
}
|
||||
|
||||
/** An access path. */
|
||||
class AccessPath extends TAccessPath {
|
||||
/** Gets the head of this access path, if any. */
|
||||
DataFlow::ContentSet getHead() { this = TAccessPathCons(result, _) }
|
||||
|
||||
/** Gets the tail of this access path, if any. */
|
||||
AccessPath getTail() { this = TAccessPathCons(_, result) }
|
||||
|
||||
/**
|
||||
* Gets a textual representation of this access path.
|
||||
*
|
||||
* Elements are dot-separated, and the head of the stack is
|
||||
* rendered first.
|
||||
*/
|
||||
string toString() {
|
||||
this = TAccessPathNil() and
|
||||
result = ""
|
||||
or
|
||||
exists(DataFlow::ContentSet head, AccessPath tail |
|
||||
this = TAccessPathCons(head, tail) and
|
||||
result = head + "." + tail
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a big-step flow relation, where flow stops at read/store steps that
|
||||
* must be recorded, and flow via `subpaths` such that reads/stores inside
|
||||
* summarized callables can be recorded as well.
|
||||
*/
|
||||
private module BigStepFlow {
|
||||
private predicate reachesSink(Flow::PathNode node) {
|
||||
FlowConfig::isSink(node.getNode(), node.getState())
|
||||
or
|
||||
reachesSink(node.getASuccessor())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the flow step `pred -> succ` should not be allowed to be included
|
||||
* in the big-step relation.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
pred.getASuccessor() = succ and
|
||||
(
|
||||
// we need to record reads/stores inside summarized callables
|
||||
Flow::PathGraph::subpaths(pred, _, _, succ)
|
||||
or
|
||||
// only allow flow into a summarized callable, as part of the big-step
|
||||
// relation, when flow can reach a sink without going back out
|
||||
Flow::PathGraph::subpaths(pred, succ, _, _) and
|
||||
not reachesSink(succ)
|
||||
or
|
||||
// needed to record store steps
|
||||
storeStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState())
|
||||
or
|
||||
// needed to record read steps
|
||||
readStep(pred.getNode(), pred.getState(), _, succ.getNode(), succ.getState())
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private DataFlowCallable getEnclosingCallableImpl(Flow::PathNode node) {
|
||||
result = getNodeEnclosingCallable(node.getNode())
|
||||
}
|
||||
|
||||
pragma[inline]
|
||||
private DataFlowCallable getEnclosingCallable(Flow::PathNode node) {
|
||||
pragma[only_bind_into](result) = getEnclosingCallableImpl(pragma[only_bind_out](node))
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate bigStepEntry(Flow::PathNode node) {
|
||||
(
|
||||
FlowConfig::isSource(node.getNode(), node.getState())
|
||||
or
|
||||
excludeStep(_, node)
|
||||
or
|
||||
Flow::PathGraph::subpaths(_, node, _, _)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate bigStepExit(Flow::PathNode node) {
|
||||
(
|
||||
bigStepEntry(node)
|
||||
or
|
||||
FlowConfig::isSink(node.getNode(), node.getState())
|
||||
or
|
||||
excludeStep(node, _)
|
||||
or
|
||||
Flow::PathGraph::subpaths(_, _, node, _)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate step(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
pred.getASuccessor() = succ and
|
||||
not excludeStep(pred, succ)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate stepRec(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
step(pred, succ) and
|
||||
not bigStepEntry(pred)
|
||||
}
|
||||
|
||||
private predicate stepRecPlus(Flow::PathNode n1, Flow::PathNode n2) = fastTC(stepRec/2)(n1, n2)
|
||||
|
||||
/**
|
||||
* Holds if there is flow `pathSucc+(pred) = succ`, and such a flow path does
|
||||
* not go through any reads/stores that need to be recorded, or summarized
|
||||
* steps.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate bigStep(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
exists(Flow::PathNode mid |
|
||||
bigStepEntry(pred) and
|
||||
step(pred, mid)
|
||||
|
|
||||
succ = mid
|
||||
or
|
||||
stepRecPlus(mid, succ)
|
||||
) and
|
||||
bigStepExit(succ)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
predicate bigStepNotLocal(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
bigStep(pred, succ) and
|
||||
not getEnclosingCallable(pred) = getEnclosingCallable(succ)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
predicate bigStepMaybeLocal(Flow::PathNode pred, Flow::PathNode succ) {
|
||||
bigStep(pred, succ) and
|
||||
getEnclosingCallable(pred) = getEnclosingCallable(succ)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `source` can reach `node`, having read `reads` from the source and
|
||||
* written `stores` into `node`.
|
||||
*
|
||||
* `source` is either a source from a configuration, in which case `scReads` and
|
||||
* `scStores` are always empty, or it is the parameter of a summarized callable,
|
||||
* in which case `scReads` and `scStores` record the reads/stores for a summary
|
||||
* context, that is, the reads/stores for an argument that can reach the parameter.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private predicate nodeReaches(
|
||||
Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node,
|
||||
AccessPath reads, AccessPath stores
|
||||
) {
|
||||
node = source and
|
||||
reads = scReads and
|
||||
stores = scStores and
|
||||
(
|
||||
Flow::flowPath(source, _) and
|
||||
scReads = TAccessPathNil() and
|
||||
scStores = TAccessPathNil()
|
||||
or
|
||||
// the argument in a sub path can be reached, so we start flow from the sub path
|
||||
// parameter, while recording the read/store summary context
|
||||
exists(Flow::PathNode arg |
|
||||
nodeReachesSubpathArg(_, _, _, arg, scReads, scStores) and
|
||||
Flow::PathGraph::subpaths(arg, source, _, _)
|
||||
)
|
||||
)
|
||||
or
|
||||
exists(Flow::PathNode mid |
|
||||
nodeReaches(source, scReads, scStores, mid, reads, stores) and
|
||||
BigStepFlow::bigStepMaybeLocal(mid, node)
|
||||
)
|
||||
or
|
||||
exists(Flow::PathNode mid |
|
||||
nodeReaches(source, scReads, scStores, mid, reads, stores) and
|
||||
BigStepFlow::bigStepNotLocal(mid, node) and
|
||||
// when flow is not local, we cannot flow back out, so we may stop
|
||||
// flow early when computing summary flow
|
||||
Flow::flowPath(source, _) and
|
||||
scReads = TAccessPathNil() and
|
||||
scStores = TAccessPathNil()
|
||||
)
|
||||
or
|
||||
// store step
|
||||
exists(AccessPath storesMid, DataFlow::ContentSet c |
|
||||
nodeReachesStore(source, scReads, scStores, node, c, reads, storesMid) and
|
||||
stores = TAccessPathCons(c, storesMid)
|
||||
)
|
||||
or
|
||||
// read step
|
||||
exists(AccessPath readsMid, DataFlow::ContentSet c |
|
||||
nodeReachesRead(source, scReads, scStores, node, c, readsMid, stores) and
|
||||
reads = TAccessPathCons(c, readsMid)
|
||||
)
|
||||
or
|
||||
// flow-through step; match outer stores/reads with inner store/read summary contexts
|
||||
exists(Flow::PathNode mid, AccessPath innerScReads, AccessPath innerScStores |
|
||||
nodeReachesSubpathArg(source, scReads, scStores, mid, innerScReads, innerScStores) and
|
||||
subpathArgReachesOut(mid, innerScReads, innerScStores, node, reads, stores)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate nodeReachesStore(
|
||||
Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node,
|
||||
DataFlow::ContentSet c, AccessPath reads, AccessPath stores
|
||||
) {
|
||||
exists(Flow::PathNode mid |
|
||||
nodeReaches(source, scReads, scStores, mid, reads, stores) and
|
||||
storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and
|
||||
mid.getASuccessor() = node
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate nodeReachesRead(
|
||||
Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode node,
|
||||
DataFlow::ContentSet c, AccessPath reads, AccessPath stores
|
||||
) {
|
||||
exists(Flow::PathNode mid |
|
||||
nodeReaches(source, scReads, scStores, mid, reads, stores) and
|
||||
readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and
|
||||
mid.getASuccessor() = node
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate nodeReachesSubpathArg(
|
||||
Flow::PathNode source, AccessPath scReads, AccessPath scStores, Flow::PathNode arg,
|
||||
AccessPath reads, AccessPath stores
|
||||
) {
|
||||
nodeReaches(source, scReads, scStores, arg, reads, stores) and
|
||||
Flow::PathGraph::subpaths(arg, _, _, _)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate subpathArgReachesOut(
|
||||
Flow::PathNode arg, AccessPath scReads, AccessPath scStores, Flow::PathNode out,
|
||||
AccessPath reads, AccessPath stores
|
||||
) {
|
||||
exists(Flow::PathNode source, Flow::PathNode ret |
|
||||
nodeReaches(source, scReads, scStores, ret, reads, stores) and
|
||||
Flow::PathGraph::subpaths(arg, source, ret, out)
|
||||
)
|
||||
}
|
||||
}
|
||||
private import semmle.code.csharp.Location
|
||||
private import DataFlowImplSpecific
|
||||
private import codeql.dataflow.internal.ContentDataFlowImpl
|
||||
import MakeImplContentDataFlow<Location, CsharpDataFlow>
|
||||
|
||||
@@ -908,19 +908,20 @@ private class Argument extends Expr {
|
||||
*
|
||||
* `postUpdate` indicates whether the store targets a post-update node.
|
||||
*/
|
||||
private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, boolean postUpdate) {
|
||||
private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, boolean postUpdate) {
|
||||
exists(FieldOrProperty f |
|
||||
c = f.getContent() and
|
||||
c = f.getContentSet() and
|
||||
(
|
||||
f.isFieldLike() and
|
||||
f instanceof InstanceFieldOrProperty
|
||||
or
|
||||
exists(
|
||||
FlowSummaryImpl::Private::SummarizedCallableImpl sc,
|
||||
FlowSummaryImpl::Private::SummaryComponentStack input
|
||||
FlowSummaryImpl::Private::SummaryComponentStack input, ContentSet readSet
|
||||
|
|
||||
sc.propagatesFlow(input, _, _, _) and
|
||||
input.contains(FlowSummaryImpl::Private::SummaryComponent::content(f.getContent()))
|
||||
input.contains(FlowSummaryImpl::Private::SummaryComponent::content(readSet)) and
|
||||
c.getAStoreContent() = readSet.getAReadContent()
|
||||
)
|
||||
)
|
||||
|
|
||||
@@ -970,28 +971,13 @@ private predicate fieldOrPropertyStore(Expr e, Content c, Expr src, Expr q, bool
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if property `p1` overrides or implements source declaration property `p2`. */
|
||||
private predicate overridesOrImplementsSourceDecl(Property p1, Property p2) {
|
||||
p1.getOverridee*().getUnboundDeclaration() = p2
|
||||
or
|
||||
p1.getAnUltimateImplementee().getUnboundDeclaration() = p2
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `e2` is an expression that reads field or property `c` from
|
||||
* expression `e1`. This takes overriding into account for properties written
|
||||
* from library code.
|
||||
* expression `e1`.
|
||||
*/
|
||||
private predicate fieldOrPropertyRead(Expr e1, Content c, FieldOrPropertyRead e2) {
|
||||
private predicate fieldOrPropertyRead(Expr e1, ContentSet c, FieldOrPropertyRead e2) {
|
||||
e1 = e2.getQualifier() and
|
||||
exists(FieldOrProperty ret | c = ret.getContent() |
|
||||
ret = e2.getTarget()
|
||||
or
|
||||
exists(Property target |
|
||||
target.getGetter() = e2.(PropertyCall).getARuntimeTarget() and
|
||||
overridesOrImplementsSourceDecl(target, ret)
|
||||
)
|
||||
)
|
||||
c = e2.getTarget().(FieldOrProperty).getContentSet()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1208,6 +1194,11 @@ private module Cached {
|
||||
} or
|
||||
TCapturedVariableContent(VariableCapture::CapturedVariable v)
|
||||
|
||||
cached
|
||||
newtype TContentSet =
|
||||
TSingletonContent(Content c) { not c instanceof PropertyContent } or
|
||||
TPropertyContentSet(Property p) { p.isUnboundDeclaration() }
|
||||
|
||||
cached
|
||||
newtype TContentApprox =
|
||||
TFieldApproxContent(string firstChar) { firstChar = approximateFieldContent(_) } or
|
||||
@@ -2076,10 +2067,10 @@ class FieldOrProperty extends Assignable, Modifiable {
|
||||
}
|
||||
|
||||
/** Gets the content that matches this field or property. */
|
||||
Content getContent() {
|
||||
result.(FieldContent).getField() = this.getUnboundDeclaration()
|
||||
ContentSet getContentSet() {
|
||||
result.isField(this.getUnboundDeclaration())
|
||||
or
|
||||
result.(PropertyContent).getProperty() = this.getUnboundDeclaration()
|
||||
result.isProperty(this.getUnboundDeclaration())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2211,8 +2202,8 @@ private class StoreStepConfiguration extends ControlFlowReachabilityConfiguratio
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private PropertyContent getResultContent() {
|
||||
result.getProperty() = any(SystemThreadingTasksTaskTClass c_).getResultProperty()
|
||||
private ContentSet getResultContent() {
|
||||
result.isProperty(any(SystemThreadingTasksTaskTClass c_).getResultProperty())
|
||||
}
|
||||
|
||||
private predicate primaryConstructorParameterStore(
|
||||
@@ -2226,17 +2217,16 @@ private predicate primaryConstructorParameterStore(
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if data can flow from `node1` to `node2` via an assignment to
|
||||
* content `c`.
|
||||
*/
|
||||
predicate storeStep(Node node1, ContentSet c, Node node2) {
|
||||
pragma[nomagic]
|
||||
private predicate recordParameter(RecordType t, Parameter p, string name) {
|
||||
p.getName() = name and p.getCallable().getDeclaringType() = t
|
||||
}
|
||||
|
||||
private predicate storeContentStep(Node node1, Content c, Node node2) {
|
||||
exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate |
|
||||
hasNodePath(x, node1, node) and
|
||||
if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2
|
||||
|
|
||||
fieldOrPropertyStore(_, c, node1.asExpr(), node.getExpr(), postUpdate)
|
||||
or
|
||||
arrayStore(_, node1.asExpr(), node.getExpr(), postUpdate) and c instanceof ElementContent
|
||||
)
|
||||
or
|
||||
@@ -2257,26 +2247,59 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
|
||||
c instanceof ElementContent
|
||||
)
|
||||
or
|
||||
primaryConstructorParameterStore(node1, c, node2)
|
||||
or
|
||||
exists(Parameter p, DataFlowCallable callable |
|
||||
node1 = TExplicitParameterNode(p, callable) and
|
||||
node2 = TPrimaryConstructorThisAccessNode(p, true, callable) and
|
||||
not recordParameter(_, p, _) and
|
||||
c.(PrimaryConstructorParameterContent).getParameter() = p
|
||||
)
|
||||
or
|
||||
VariableCapture::storeStep(node1, c, node2)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate recordProperty(RecordType t, ContentSet c, string name) {
|
||||
exists(Property p |
|
||||
c.isProperty(p) and
|
||||
p.getName() = name and
|
||||
p.getDeclaringType() = t
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if data can flow from `node1` to `node2` via an assignment to
|
||||
* content `c`.
|
||||
*/
|
||||
predicate storeStep(Node node1, ContentSet c, Node node2) {
|
||||
exists(Content cont |
|
||||
storeContentStep(node1, cont, node2) and
|
||||
c.isSingleton(cont)
|
||||
)
|
||||
or
|
||||
exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate |
|
||||
hasNodePath(x, node1, node) and
|
||||
if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2
|
||||
|
|
||||
fieldOrPropertyStore(_, c, node1.asExpr(), node.getExpr(), postUpdate)
|
||||
)
|
||||
or
|
||||
exists(Expr e |
|
||||
e = node1.asExpr() and
|
||||
node2.(AsyncReturnNode).getExpr() = e and
|
||||
c = getResultContent()
|
||||
)
|
||||
or
|
||||
primaryConstructorParameterStore(node1, c, node2)
|
||||
or
|
||||
exists(Parameter p, DataFlowCallable callable |
|
||||
exists(Parameter p, DataFlowCallable callable, RecordType t, string name |
|
||||
node1 = TExplicitParameterNode(p, callable) and
|
||||
node2 = TPrimaryConstructorThisAccessNode(p, true, callable) and
|
||||
if p.getCallable().getDeclaringType() instanceof RecordType
|
||||
then c.(PropertyContent).getProperty().getName() = p.getName()
|
||||
else c.(PrimaryConstructorParameterContent).getParameter() = p
|
||||
recordParameter(t, p, name) and
|
||||
recordProperty(t, c, name)
|
||||
)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c,
|
||||
node2.(FlowSummaryNode).getSummaryNode())
|
||||
or
|
||||
VariableCapture::storeStep(node1, c, node2)
|
||||
}
|
||||
|
||||
private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration {
|
||||
@@ -2344,14 +2367,8 @@ private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if data can flow from `node1` to `node2` via a read of content `c`.
|
||||
*/
|
||||
predicate readStep(Node node1, ContentSet c, Node node2) {
|
||||
private predicate readContentStep(Node node1, Content c, Node node2) {
|
||||
exists(ReadStepConfiguration x |
|
||||
hasNodePath(x, node1, node2) and
|
||||
fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr())
|
||||
or
|
||||
hasNodePath(x, node1, node2) and
|
||||
arrayRead(node1.asExpr(), node2.asExpr()) and
|
||||
c instanceof ElementContent
|
||||
@@ -2363,10 +2380,6 @@ predicate readStep(Node node1, ContentSet c, Node node2) {
|
||||
c instanceof ElementContent
|
||||
)
|
||||
or
|
||||
hasNodePath(x, node1, node2) and
|
||||
node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and
|
||||
c = getResultContent()
|
||||
or
|
||||
node1 =
|
||||
any(InstanceParameterAccessPreNode n |
|
||||
n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and
|
||||
@@ -2404,31 +2417,30 @@ predicate readStep(Node node1, ContentSet c, Node node2) {
|
||||
)
|
||||
)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c,
|
||||
node2.(FlowSummaryNode).getSummaryNode())
|
||||
or
|
||||
VariableCapture::readStep(node1, c, node2)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if values stored inside content `c` are cleared at node `n`. For example,
|
||||
* any value stored inside `f` is cleared at the pre-update node associated with `x`
|
||||
* in `x.f = newValue`.
|
||||
* Holds if data can flow from `node1` to `node2` via a read of content `c`.
|
||||
*/
|
||||
predicate clearsContent(Node n, ContentSet c) {
|
||||
fieldOrPropertyStore(_, c, _, n.asExpr(), true)
|
||||
or
|
||||
fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c)
|
||||
or
|
||||
exists(WithExpr we, ObjectInitializer oi, FieldOrProperty f |
|
||||
oi = we.getInitializer() and
|
||||
n.asExpr() = oi and
|
||||
f = oi.getAMemberInitializer().getInitializedMember() and
|
||||
c = f.getContent()
|
||||
predicate readStep(Node node1, ContentSet c, Node node2) {
|
||||
exists(Content cont |
|
||||
readContentStep(node1, cont, node2) and
|
||||
c.isSingleton(cont)
|
||||
)
|
||||
or
|
||||
exists(ReadStepConfiguration x | hasNodePath(x, node1, node2) |
|
||||
fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr())
|
||||
or
|
||||
node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and
|
||||
c = getResultContent()
|
||||
)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c,
|
||||
node2.(FlowSummaryNode).getSummaryNode())
|
||||
}
|
||||
|
||||
private predicate clearsCont(Node n, Content c) {
|
||||
exists(Argument a, Struct s, Field f |
|
||||
a = n.(PostUpdateNode).getPreUpdateNode().asExpr() and
|
||||
a.getType() = s and
|
||||
@@ -2442,6 +2454,31 @@ predicate clearsContent(Node n, ContentSet c) {
|
||||
VariableCapture::clearsContent(n, c)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if values stored inside content `c` are cleared at node `n`. For example,
|
||||
* any value stored inside `f` is cleared at the pre-update node associated with `x`
|
||||
* in `x.f = newValue`.
|
||||
*/
|
||||
predicate clearsContent(Node n, ContentSet c) {
|
||||
exists(Content cont |
|
||||
clearsCont(n, cont) and
|
||||
c.isSingleton(cont)
|
||||
)
|
||||
or
|
||||
fieldOrPropertyStore(_, c, _, n.asExpr(), true)
|
||||
or
|
||||
fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c)
|
||||
or
|
||||
exists(WithExpr we, ObjectInitializer oi, FieldOrProperty f |
|
||||
oi = we.getInitializer() and
|
||||
n.asExpr() = oi and
|
||||
f = oi.getAMemberInitializer().getInitializedMember() and
|
||||
c = f.getContentSet()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the value that is being tracked is expected to be stored inside content `c`
|
||||
* at node `n`.
|
||||
@@ -2449,7 +2486,7 @@ predicate clearsContent(Node n, ContentSet c) {
|
||||
predicate expectsContent(Node n, ContentSet c) {
|
||||
FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c)
|
||||
or
|
||||
n.asExpr() instanceof SpreadElementExpr and c instanceof ElementContent
|
||||
n.asExpr() instanceof SpreadElementExpr and c.isElement()
|
||||
}
|
||||
|
||||
class NodeRegion instanceof ControlFlow::BasicBlock {
|
||||
@@ -3050,8 +3087,3 @@ abstract class SyntheticField extends string {
|
||||
/** Gets the type of this synthetic field. */
|
||||
Type getType() { result instanceof ObjectType }
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the the content `c` is a container.
|
||||
*/
|
||||
predicate containerContent(DataFlow::Content c) { c instanceof DataFlow::ElementContent }
|
||||
|
||||
@@ -267,22 +267,82 @@ class CapturedVariableContent extends Content, TCapturedVariableContent {
|
||||
override Location getLocation() { result = v.getLocation() }
|
||||
}
|
||||
|
||||
/** Holds if property `p1` overrides or implements source declaration property `p2`. */
|
||||
private predicate overridesOrImplementsSourceDecl(Property p1, Property p2) {
|
||||
p1.getOverridee*().getUnboundDeclaration() = p2
|
||||
or
|
||||
p1.getAnUltimateImplementee().getUnboundDeclaration() = p2
|
||||
}
|
||||
|
||||
/**
|
||||
* An entity that represents a set of `Content`s.
|
||||
*
|
||||
* The set may be interpreted differently depending on whether it is
|
||||
* stored into (`getAStoreContent`) or read from (`getAReadContent`).
|
||||
*/
|
||||
class ContentSet instanceof Content {
|
||||
class ContentSet extends TContentSet {
|
||||
/** Holds if this content set is the singleton `{c}`. */
|
||||
predicate isSingleton(Content c) { this = TSingletonContent(c) }
|
||||
|
||||
/**
|
||||
* Holds if this content set represents the property `p`.
|
||||
*
|
||||
*
|
||||
* For `getAReadContent`, this set represents all properties that may
|
||||
* (reflexively and transitively) override/implement `p` (or vice versa).
|
||||
*/
|
||||
predicate isProperty(Property p) { this = TPropertyContentSet(p) }
|
||||
|
||||
/** Holds if this content set represent the field `f`. */
|
||||
predicate isField(Field f) { this.isSingleton(TFieldContent(f)) }
|
||||
|
||||
/** Holds if this content set represents an element in a collection. */
|
||||
predicate isElement() { this.isSingleton(TElementContent()) }
|
||||
|
||||
/** Gets a content that may be stored into when storing into this set. */
|
||||
Content getAStoreContent() { result = this }
|
||||
Content getAStoreContent() {
|
||||
this.isSingleton(result)
|
||||
or
|
||||
this.isProperty(result.(PropertyContent).getProperty())
|
||||
}
|
||||
|
||||
/** Gets a content that may be read from when reading from this set. */
|
||||
Content getAReadContent() { result = this }
|
||||
Content getAReadContent() {
|
||||
this.isSingleton(result)
|
||||
or
|
||||
exists(Property p1, Property p2 |
|
||||
this.isProperty(p1) and
|
||||
p2 = result.(PropertyContent).getProperty()
|
||||
|
|
||||
overridesOrImplementsSourceDecl(p2, p1)
|
||||
or
|
||||
overridesOrImplementsSourceDecl(p1, p2)
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets a textual representation of this content set. */
|
||||
string toString() { result = super.toString() }
|
||||
string toString() {
|
||||
exists(Content c |
|
||||
this.isSingleton(c) and
|
||||
result = c.toString()
|
||||
)
|
||||
or
|
||||
exists(Property p |
|
||||
this.isProperty(p) and
|
||||
result = "property " + p.getName()
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the location of this content set. */
|
||||
Location getLocation() { result = super.getLocation() }
|
||||
Location getLocation() {
|
||||
exists(Content c |
|
||||
this.isSingleton(c) and
|
||||
result = c.getLocation()
|
||||
)
|
||||
or
|
||||
exists(Property p |
|
||||
this.isProperty(p) and
|
||||
result = p.getLocation()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ module Input implements InputSig<Location, DataFlowImplSpecific::CsharpDataFlow>
|
||||
result = "delegate-self"
|
||||
}
|
||||
|
||||
string encodeContent(ContentSet c, string arg) {
|
||||
private string encodeCont(Content c, string arg) {
|
||||
c = TElementContent() and result = "Element" and arg = ""
|
||||
or
|
||||
exists(Field f, string qualifier, string name |
|
||||
@@ -56,27 +56,34 @@ module Input implements InputSig<Location, DataFlowImplSpecific::CsharpDataFlow>
|
||||
result = "Field"
|
||||
)
|
||||
or
|
||||
exists(Property p, string qualifier, string name |
|
||||
c = TPropertyContent(p) and
|
||||
p.hasFullyQualifiedName(qualifier, name) and
|
||||
arg = getQualifiedName(qualifier, name) and
|
||||
result = "Property"
|
||||
)
|
||||
or
|
||||
exists(SyntheticField f |
|
||||
c = TSyntheticFieldContent(f) and result = "SyntheticField" and arg = f
|
||||
)
|
||||
}
|
||||
|
||||
string encodeContent(ContentSet c, string arg) {
|
||||
exists(Content cont |
|
||||
c.isSingleton(cont) and
|
||||
result = encodeCont(cont, arg)
|
||||
)
|
||||
or
|
||||
exists(Property p, string qualifier, string name |
|
||||
c.isProperty(p) and
|
||||
p.hasFullyQualifiedName(qualifier, name) and
|
||||
arg = getQualifiedName(qualifier, name) and
|
||||
result = "Property"
|
||||
)
|
||||
}
|
||||
|
||||
string encodeWithoutContent(ContentSet c, string arg) {
|
||||
result = "WithoutElement" and
|
||||
c = TElementContent() and
|
||||
c.isElement() and
|
||||
arg = ""
|
||||
}
|
||||
|
||||
string encodeWithContent(ContentSet c, string arg) {
|
||||
result = "WithElement" and
|
||||
c = TElementContent() and
|
||||
c.isElement() and
|
||||
arg = ""
|
||||
}
|
||||
|
||||
@@ -103,12 +110,10 @@ private module TypesInput implements Impl::Private::TypesInputSig {
|
||||
result.asGvnType() = Gvn::getGlobalValueNumber(any(ObjectType t))
|
||||
}
|
||||
|
||||
DataFlowType getContentType(ContentSet c) {
|
||||
private DataFlowType getContType(Content c) {
|
||||
exists(Type t | result.asGvnType() = Gvn::getGlobalValueNumber(t) |
|
||||
t = c.(FieldContent).getField().getType()
|
||||
or
|
||||
t = c.(PropertyContent).getProperty().getType()
|
||||
or
|
||||
t = c.(SyntheticFieldContent).getField().getType()
|
||||
or
|
||||
c instanceof ElementContent and
|
||||
@@ -116,6 +121,17 @@ private module TypesInput implements Impl::Private::TypesInputSig {
|
||||
)
|
||||
}
|
||||
|
||||
DataFlowType getContentType(ContentSet c) {
|
||||
exists(Content cont |
|
||||
c.isSingleton(cont) and
|
||||
result = getContType(cont)
|
||||
)
|
||||
or
|
||||
exists(Property p |
|
||||
c.isProperty(p) and result.asGvnType() = Gvn::getGlobalValueNumber(p.getType())
|
||||
)
|
||||
}
|
||||
|
||||
DataFlowType getParameterType(Impl::Public::SummarizedCallable c, ParameterPosition pos) {
|
||||
exists(Type t | result.asGvnType() = Gvn::getGlobalValueNumber(t) |
|
||||
exists(int i |
|
||||
@@ -311,17 +327,16 @@ module Private {
|
||||
}
|
||||
|
||||
/** Gets a summary component that represents an element in a collection. */
|
||||
SummaryComponent element() { result = content(any(DataFlow::ElementContent c)) }
|
||||
SummaryComponent element() { result = content(any(ContentSet cs | cs.isElement())) }
|
||||
|
||||
/** Gets a summary component for property `p`. */
|
||||
SummaryComponent property(Property p) {
|
||||
result =
|
||||
content(any(DataFlow::PropertyContent c | c.getProperty() = p.getUnboundDeclaration()))
|
||||
result = content(any(DataFlow::ContentSet c | c.isProperty(p.getUnboundDeclaration())))
|
||||
}
|
||||
|
||||
/** Gets a summary component for field `f`. */
|
||||
SummaryComponent field(Field f) {
|
||||
result = content(any(DataFlow::FieldContent c | c.getField() = f.getUnboundDeclaration()))
|
||||
result = content(any(DataFlow::ContentSet c | c.isField(f.getUnboundDeclaration())))
|
||||
}
|
||||
|
||||
/** Gets a summary component that represents the return value of a call. */
|
||||
|
||||
@@ -122,22 +122,22 @@ private module Cached {
|
||||
FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(nodeFrom, nodeTo, _)
|
||||
or
|
||||
// Taint collection by adding a tainted element
|
||||
exists(DataFlow::ElementContent c |
|
||||
exists(DataFlow::ContentSet c | c.isElement() |
|
||||
storeStep(nodeFrom, c, nodeTo)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summarySetterStep(nodeFrom, c, nodeTo, _)
|
||||
)
|
||||
or
|
||||
exists(DataFlow::Content c |
|
||||
exists(DataFlow::ContentSet c |
|
||||
readStep(nodeFrom, c, nodeTo)
|
||||
or
|
||||
FlowSummaryImpl::Private::Steps::summaryGetterStep(nodeFrom, c, nodeTo, _)
|
||||
|
|
||||
// Taint members
|
||||
c = any(TaintedMember m).(FieldOrProperty).getContent()
|
||||
c = any(TaintedMember m).(FieldOrProperty).getContentSet()
|
||||
or
|
||||
// Read from a tainted collection
|
||||
c = TElementContent()
|
||||
c.isElement()
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -152,12 +152,12 @@ private module Cached {
|
||||
localTaintStepCommon(nodeFrom, nodeTo)
|
||||
or
|
||||
// Taint members
|
||||
readStep(nodeFrom, any(TaintedMember m).(FieldOrProperty).getContent(), nodeTo)
|
||||
readStep(nodeFrom, any(TaintedMember m).(FieldOrProperty).getContentSet(), nodeTo)
|
||||
or
|
||||
// Although flow through collections is modeled precisely using stores/reads, we still
|
||||
// allow flow out of a _tainted_ collection. This is needed in order to support taint-
|
||||
// tracking configurations where the source is a collection
|
||||
readStep(nodeFrom, TElementContent(), nodeTo)
|
||||
readStep(nodeFrom, any(DataFlow::ContentSet c | c.isElement()), nodeTo)
|
||||
or
|
||||
nodeTo = nodeFrom.(DataFlow::NonLocalJumpNode).getAJumpSuccessor(false)
|
||||
) and
|
||||
|
||||
@@ -282,12 +282,12 @@ module EntityFramework {
|
||||
* If `t2` is a column type, `c2` will be included in the model (see
|
||||
* https://docs.microsoft.com/en-us/ef/core/modeling/entity-types?tabs=data-annotations).
|
||||
*/
|
||||
private predicate step(Content c1, Type t1, Content c2, Type t2, int dist) {
|
||||
private predicate step(ContentSet c1, Type t1, ContentSet c2, Type t2, int dist) {
|
||||
exists(Property p1 |
|
||||
p1 = this.getADbSetProperty(t2) and
|
||||
c1.(PropertyContent).getProperty() = p1 and
|
||||
c1.isProperty(p1) and
|
||||
t1 = p1.getType() and
|
||||
c2 instanceof ElementContent and
|
||||
c2.isElement() and
|
||||
dist = 0
|
||||
)
|
||||
or
|
||||
@@ -299,17 +299,17 @@ module EntityFramework {
|
||||
exists(Property p2 |
|
||||
p2.getDeclaringType().(Class) = t1 and
|
||||
not isColumnType(t1) and
|
||||
c2.(PropertyContent).getProperty() = p2 and
|
||||
c2.isProperty(p2) and
|
||||
t2 = p2.getType() and
|
||||
not isNotMapped(p2)
|
||||
)
|
||||
or
|
||||
exists(ConstructedInterface ci |
|
||||
c1 instanceof PropertyContent and
|
||||
c1.isProperty(_) and
|
||||
t1.(ValueOrRefType).getABaseType*() = ci and
|
||||
not t1 instanceof StringType and
|
||||
ci.getUnboundDeclaration() instanceof SystemCollectionsGenericIEnumerableTInterface and
|
||||
c2 instanceof ElementContent and
|
||||
c2.isElement() and
|
||||
t2 = ci.getTypeArgument(0)
|
||||
)
|
||||
)
|
||||
@@ -340,16 +340,16 @@ module EntityFramework {
|
||||
* ```
|
||||
*/
|
||||
Property getAColumnProperty(int dist) {
|
||||
exists(PropertyContent c, Type t |
|
||||
exists(ContentSet c, Type t |
|
||||
this.step(_, _, c, t, dist) and
|
||||
c.getProperty() = result and
|
||||
c.isProperty(result) and
|
||||
isColumnType(t)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate stepRev(Content c1, Type t1, Content c2, Type t2, int dist) {
|
||||
private predicate stepRev(ContentSet c1, Type t1, ContentSet c2, Type t2, int dist) {
|
||||
this.step(c1, t1, c2, t2, dist) and
|
||||
c2.(PropertyContent).getProperty() = this.getAColumnProperty(dist)
|
||||
c2.isProperty(this.getAColumnProperty(dist))
|
||||
or
|
||||
this.stepRev(c2, t2, _, _, dist + 1) and
|
||||
this.step(c1, t1, c2, t2, dist)
|
||||
@@ -364,13 +364,13 @@ module EntityFramework {
|
||||
|
||||
/** Holds if component stack `head :: tail` is required for the input specification. */
|
||||
predicate requiresComponentStackIn(
|
||||
Content head, Type headType, SummaryComponentStack tail, int dist
|
||||
ContentSet head, Type headType, SummaryComponentStack tail, int dist
|
||||
) {
|
||||
tail = SummaryComponentStack::qualifier() and
|
||||
this.stepRev(head, headType, _, _, 0) and
|
||||
dist = -1
|
||||
or
|
||||
exists(Content tailHead, Type tailType, SummaryComponentStack tailTail |
|
||||
exists(ContentSet tailHead, Type tailType, SummaryComponentStack tailTail |
|
||||
this.requiresComponentStackIn(tailHead, tailType, tailTail, dist - 1) and
|
||||
tail = SummaryComponentStack::push(SummaryComponent::content(tailHead), tailTail) and
|
||||
this.stepRev(tailHead, tailType, head, headType, dist)
|
||||
@@ -379,18 +379,18 @@ module EntityFramework {
|
||||
|
||||
/** Holds if component stack `head :: tail` is required for the output specification. */
|
||||
predicate requiresComponentStackOut(
|
||||
Content head, Type headType, SummaryComponentStack tail, int dist,
|
||||
ContentSet head, Type headType, SummaryComponentStack tail, int dist,
|
||||
DbContextClassSetProperty dbSetProp
|
||||
) {
|
||||
exists(PropertyContent c1 |
|
||||
exists(ContentSet c1 |
|
||||
dbSetProp = this.getADbSetProperty(headType) and
|
||||
this.stepRev(c1, _, head, headType, 0) and
|
||||
c1.getProperty() = dbSetProp and
|
||||
c1.isProperty(dbSetProp) and
|
||||
tail = SummaryComponentStack::return() and
|
||||
dist = 0
|
||||
)
|
||||
or
|
||||
exists(Content tailHead, SummaryComponentStack tailTail, Type tailType |
|
||||
exists(ContentSet tailHead, SummaryComponentStack tailTail, Type tailType |
|
||||
this.requiresComponentStackOut(tailHead, tailType, tailTail, dist - 1, dbSetProp) and
|
||||
tail = SummaryComponentStack::push(SummaryComponent::content(tailHead), tailTail) and
|
||||
this.stepRev(tailHead, tailType, head, headType, dist)
|
||||
@@ -402,9 +402,9 @@ module EntityFramework {
|
||||
*/
|
||||
pragma[noinline]
|
||||
predicate input(SummaryComponentStack input, Property mapped) {
|
||||
exists(PropertyContent head, SummaryComponentStack tail |
|
||||
exists(ContentSet head, SummaryComponentStack tail |
|
||||
this.requiresComponentStackIn(head, _, tail, _) and
|
||||
head.getProperty() = mapped and
|
||||
head.isProperty(mapped) and
|
||||
mapped = this.getAColumnProperty(_) and
|
||||
input = SummaryComponentStack::push(SummaryComponent::content(head), tail)
|
||||
)
|
||||
@@ -418,9 +418,9 @@ module EntityFramework {
|
||||
private predicate output(
|
||||
SummaryComponentStack output, Property mapped, DbContextClassSetProperty dbSet
|
||||
) {
|
||||
exists(PropertyContent head, SummaryComponentStack tail |
|
||||
exists(ContentSet head, SummaryComponentStack tail |
|
||||
this.requiresComponentStackOut(head, _, tail, _, dbSet) and
|
||||
head.getProperty() = mapped and
|
||||
head.isProperty(mapped) and
|
||||
mapped = this.getAColumnProperty(_) and
|
||||
output = SummaryComponentStack::push(SummaryComponent::content(head), tail)
|
||||
)
|
||||
@@ -505,7 +505,7 @@ module EntityFramework {
|
||||
private class DbContextSaveChangesRequiredSummaryComponentStack extends RequiredSummaryComponentStack
|
||||
{
|
||||
override predicate required(SummaryComponent head, SummaryComponentStack tail) {
|
||||
exists(Content c | head = SummaryComponent::content(c) |
|
||||
exists(ContentSet c | head = SummaryComponent::content(c) |
|
||||
any(DbContextClass cls).requiresComponentStackIn(c, _, tail, _)
|
||||
or
|
||||
any(DbContextClass cls).requiresComponentStackOut(c, _, tail, _, _)
|
||||
|
||||
@@ -205,7 +205,6 @@ class MicrosoftAspNetCoreMvcController extends Class {
|
||||
)
|
||||
) and
|
||||
this.isPublic() and
|
||||
(not this.isAbstract() or this instanceof MicrosoftAspNetCoreMvcControllerBaseClass) and
|
||||
not this instanceof Generic and
|
||||
(
|
||||
this.getABaseType*() instanceof MicrosoftAspNetCoreMvcControllerBaseClass
|
||||
|
||||
@@ -12,6 +12,7 @@ import DatabaseQuality
|
||||
|
||||
predicate compilationInfo(string key, float value) {
|
||||
not key.matches("Compiler diagnostic count for%") and
|
||||
not key.matches("Extractor message count for group%") and
|
||||
exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) |
|
||||
key = infoKey and
|
||||
value = infoValue.toFloat()
|
||||
@@ -22,6 +23,16 @@ predicate compilationInfo(string key, float value) {
|
||||
)
|
||||
}
|
||||
|
||||
predicate compilerDiagnostics(string key, int value) {
|
||||
key.matches("Compiler diagnostic count for%") and
|
||||
strictsum(Compilation c | | c.getInfo(key).toInt()) = value
|
||||
}
|
||||
|
||||
predicate extractorMessages(string key, int value) {
|
||||
key.matches("Extractor message count for group%") and
|
||||
strictsum(Compilation c | | c.getInfo(key).toInt()) = value
|
||||
}
|
||||
|
||||
predicate fileCount(string key, int value) {
|
||||
key = "Number of files" and
|
||||
value = strictcount(File f)
|
||||
@@ -140,6 +151,8 @@ from string key, float value
|
||||
where
|
||||
(
|
||||
compilationInfo(key, value) or
|
||||
compilerDiagnostics(key, value) or
|
||||
extractorMessages(key, value) or
|
||||
fileCount(key, value) or
|
||||
fileCountByExtension(key, value) or
|
||||
totalNumberOfLines(key, value) or
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @name Capture Summary Models Partial Path
|
||||
* @description Capture Summary Models Partial Path
|
||||
* @kind path-problem
|
||||
* @precision low
|
||||
* @id csharp/utils/modelgenerator/summary-models-partial-path
|
||||
* @severity info
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import csharp
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import PartialFlow::PartialPathGraph
|
||||
|
||||
int explorationLimit() { result = 3 }
|
||||
|
||||
module PartialFlow = PropagateFlow::FlowExplorationFwd<explorationLimit/0>;
|
||||
|
||||
from
|
||||
PartialFlow::PartialPathNode source, PartialFlow::PartialPathNode sink,
|
||||
DataFlowSummaryTargetApi api, DataFlow::ParameterNode p
|
||||
where
|
||||
PartialFlow::partialFlow(source, sink, _) and
|
||||
p = source.getNode() and
|
||||
p.asParameter() = api.getAParameter()
|
||||
select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(),
|
||||
"parameter", sink.getNode(), "intermediate value"
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @name Capture Summary Models Path
|
||||
* @description Capture Summary Models Path
|
||||
* @kind path-problem
|
||||
* @precision low
|
||||
* @id csharp/utils/modelgenerator/summary-models-path
|
||||
* @severity warning
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import csharp
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import PropagateFlow::PathGraph
|
||||
|
||||
from
|
||||
PropagateFlow::PathNode source, PropagateFlow::PathNode sink, DataFlowSummaryTargetApi api,
|
||||
DataFlow::Node p, DataFlow::Node returnNodeExt
|
||||
where
|
||||
PropagateFlow::flowPath(source, sink) and
|
||||
p = source.getNode() and
|
||||
returnNodeExt = sink.getNode() and
|
||||
exists(captureThroughFlow0(api, p, returnNodeExt))
|
||||
select sink.getNode(), source, sink, "There is flow from $@ to the $@.", source.getNode(),
|
||||
"parameter", sink.getNode(), "return value"
|
||||
1
csharp/ql/src/utils/modelgenerator/debug/README.md
Normal file
1
csharp/ql/src/utils/modelgenerator/debug/README.md
Normal file
@@ -0,0 +1 @@
|
||||
The queries in this directory are purely used for model generator debugging purposes in VS Code.
|
||||
@@ -50,7 +50,7 @@ module Printing = ModelPrinting<ModelPrintingInput>;
|
||||
/**
|
||||
* Holds if `c` is a relevant content kind, where the underlying type is relevant.
|
||||
*/
|
||||
private predicate isRelevantTypeInContent(DataFlow::Content c) {
|
||||
private predicate isRelevantTypeInContent(DataFlow::ContentSet c) {
|
||||
isRelevantType(getUnderlyingContentType(c))
|
||||
}
|
||||
|
||||
@@ -58,24 +58,22 @@ private predicate isRelevantTypeInContent(DataFlow::Content c) {
|
||||
* Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`.
|
||||
*/
|
||||
private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
exists(DataFlow::Content f |
|
||||
exists(DataFlow::ContentSet f |
|
||||
DataFlowPrivate::readStep(node1, f, node2) and
|
||||
// Partially restrict the content types used for intermediate steps.
|
||||
(not exists(getUnderlyingContentType(f)) or isRelevantTypeInContent(f))
|
||||
)
|
||||
or
|
||||
exists(DataFlow::Content f | DataFlowPrivate::storeStep(node1, f, node2) |
|
||||
DataFlowPrivate::containerContent(f)
|
||||
)
|
||||
exists(DataFlow::ContentSet f | DataFlowPrivate::storeStep(node1, f, node2) | containerContent(f))
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if content `c` is either a field, a synthetic field or language specific
|
||||
* content of a relevant type or a container like content.
|
||||
*/
|
||||
private predicate isRelevantContent(DataFlow::Content c) {
|
||||
private predicate isRelevantContent(DataFlow::ContentSet c) {
|
||||
isRelevantTypeInContent(c) or
|
||||
DataFlowPrivate::containerContent(c)
|
||||
containerContent(c)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -170,8 +168,8 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
predicate isAdditionalFlowStep(
|
||||
DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2
|
||||
) {
|
||||
exists(DataFlow::Content c |
|
||||
DataFlowImplCommon::store(node1, c, node2, _, _) and
|
||||
exists(DataFlow::ContentSet c |
|
||||
DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and
|
||||
isRelevantContent(c) and
|
||||
(
|
||||
state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1
|
||||
@@ -180,7 +178,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
)
|
||||
)
|
||||
or
|
||||
exists(DataFlow::Content c |
|
||||
exists(DataFlow::ContentSet c |
|
||||
DataFlowPrivate::readStep(node1, c, node2) and
|
||||
isRelevantContent(c) and
|
||||
state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep()
|
||||
@@ -196,14 +194,13 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
}
|
||||
}
|
||||
|
||||
private module PropagateFlow = TaintTracking::GlobalWithState<PropagateFlowConfig>;
|
||||
module PropagateFlow = TaintTracking::GlobalWithState<PropagateFlowConfig>;
|
||||
|
||||
/**
|
||||
* Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter.
|
||||
*/
|
||||
string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output |
|
||||
PropagateFlow::flow(p, returnNodeExt) and
|
||||
string captureThroughFlow0(
|
||||
DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt
|
||||
) {
|
||||
exists(string input, string output |
|
||||
p.getEnclosingCallable() = api and
|
||||
returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and
|
||||
input = parameterNodeAsInput(p) and
|
||||
output = returnNodeExt.getOutput() and
|
||||
@@ -212,6 +209,16 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter.
|
||||
*/
|
||||
string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt |
|
||||
PropagateFlow::flow(p, returnNodeExt) and
|
||||
result = captureThroughFlow0(api, p, returnNodeExt)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* A dataflow configuration used for finding new sources.
|
||||
* The sources are the already known existing sources and the sinks are the API return nodes.
|
||||
|
||||
@@ -210,10 +210,24 @@ predicate isRelevantType(CS::Type t) {
|
||||
/**
|
||||
* Gets the underlying type of the content `c`.
|
||||
*/
|
||||
CS::Type getUnderlyingContentType(DataFlow::Content c) {
|
||||
private CS::Type getUnderlyingContType(DataFlow::Content c) {
|
||||
result = c.(DataFlow::FieldContent).getField().getType() or
|
||||
result = c.(DataFlow::SyntheticFieldContent).getField().getType() or
|
||||
result = c.(DataFlow::PropertyContent).getProperty().getType()
|
||||
result = c.(DataFlow::SyntheticFieldContent).getField().getType()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the underlying type of the content `c`.
|
||||
*/
|
||||
CS::Type getUnderlyingContentType(DataFlow::ContentSet c) {
|
||||
exists(DataFlow::Content cont |
|
||||
c.isSingleton(cont) and
|
||||
result = getUnderlyingContType(cont)
|
||||
)
|
||||
or
|
||||
exists(CS::Property p |
|
||||
c.isProperty(p) and
|
||||
result = p.getType()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -325,3 +339,8 @@ predicate isRelevantSinkKind(string kind) { any() }
|
||||
*/
|
||||
bindingset[kind]
|
||||
predicate isRelevantSourceKind(string kind) { any() }
|
||||
|
||||
/**
|
||||
* Holds if the the content `c` is a container.
|
||||
*/
|
||||
predicate containerContent(DataFlow::ContentSet c) { c.isElement() }
|
||||
|
||||
@@ -52,12 +52,10 @@ edges
|
||||
| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | provenance | MaD:2 |
|
||||
| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | provenance | MaD:8 |
|
||||
| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | provenance | MaD:16 |
|
||||
| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | provenance | MaD:16 |
|
||||
| CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | provenance | |
|
||||
| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | provenance | MaD:1 |
|
||||
| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | provenance | MaD:7 |
|
||||
| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | provenance | MaD:16 |
|
||||
| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | provenance | MaD:16 |
|
||||
| CollectionFlow.cs:34:57:34:60 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | provenance | |
|
||||
| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First<KeyValuePair<T,Int32>> : KeyValuePair<T,Int32> [property Key] : A | provenance | MaD:16 |
|
||||
| CollectionFlow.cs:34:66:34:77 | call to method First<KeyValuePair<T,Int32>> : KeyValuePair<T,Int32> [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | provenance | |
|
||||
@@ -378,14 +376,10 @@ nodes
|
||||
| CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | semmle.label | dict : Dictionary<T,T> [element, property Value] : A |
|
||||
| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | semmle.label | access to parameter dict : Dictionary<T,T> [element, property Value] : A |
|
||||
| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | semmle.label | access to property Values : ICollection<T> [element] : A |
|
||||
| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection<T> [element] : A | semmle.label | access to property Values : ICollection<T> [element] : A |
|
||||
| CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | semmle.label | call to method First<T> : A |
|
||||
| CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | semmle.label | call to method First<T> : A |
|
||||
| CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | semmle.label | dict : Dictionary<T,T> [element, property Key] : A |
|
||||
| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | semmle.label | access to parameter dict : Dictionary<T,T> [element, property Key] : A |
|
||||
| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | semmle.label | access to property Keys : ICollection<T> [element] : A |
|
||||
| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection<T> [element] : A | semmle.label | access to property Keys : ICollection<T> [element] : A |
|
||||
| CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | semmle.label | call to method First<T> : A |
|
||||
| CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | semmle.label | call to method First<T> : A |
|
||||
| CollectionFlow.cs:34:57:34:60 | dict : Dictionary<T,T> [element, property Key] : A | semmle.label | dict : Dictionary<T,T> [element, property Key] : A |
|
||||
| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary<T,T> [element, property Key] : A | semmle.label | access to parameter dict : Dictionary<T,T> [element, property Key] : A |
|
||||
@@ -671,20 +665,15 @@ subpaths
|
||||
| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero<A> |
|
||||
| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue<A> |
|
||||
| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero<A> |
|
||||
| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue<A> |
|
||||
| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero<A> |
|
||||
| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue<A> |
|
||||
| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:30:69:30:87 | call to method First<T> : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst<A> |
|
||||
| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst<A> |
|
||||
| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst<A> |
|
||||
| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey<A> |
|
||||
| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst<A> |
|
||||
| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First<T> : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst<A> |
|
||||
| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary<T,T> [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey<A> |
|
||||
| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:23:328:27 | array [Return] : A[] [element] : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A |
|
||||
| CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:337:14:337:23 | call to method First<A> |
|
||||
|
||||
@@ -16,10 +16,10 @@ query predicate summaryThroughStep(
|
||||
preservesValue = false
|
||||
}
|
||||
|
||||
query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) {
|
||||
query predicate summaryGetterStep(DataFlow::Node arg, DataFlow::Node out, ContentSet c) {
|
||||
FlowSummaryImpl::Private::Steps::summaryGetterStep(arg, c, out, _)
|
||||
}
|
||||
|
||||
query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, Content c) {
|
||||
query predicate summarySetterStep(DataFlow::Node arg, DataFlow::Node out, ContentSet c) {
|
||||
FlowSummaryImpl::Private::Steps::summarySetterStep(arg, c, out, _)
|
||||
}
|
||||
|
||||
@@ -58,4 +58,9 @@ namespace Testing
|
||||
app.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class AbstractTestController : Controller
|
||||
{
|
||||
public void MyActionMethod(string param) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,3 +12,4 @@ remoteFlowSources
|
||||
| AspRemoteFlowSource.cs:53:63:53:73 | mapPutParam |
|
||||
| AspRemoteFlowSource.cs:54:69:54:82 | mapDeleteParam |
|
||||
| AspRemoteFlowSource.cs:56:41:56:44 | item |
|
||||
| AspRemoteFlowSource.cs:64:43:64:47 | param |
|
||||
|
||||
@@ -301,14 +301,22 @@ edges
|
||||
| GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | provenance | |
|
||||
| GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | provenance | |
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String | provenance | MaD:2 |
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:89:89:89 | s : String | provenance | MaD:2 |
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:104:89:104 | x : String | provenance | MaD:2 |
|
||||
| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | provenance | |
|
||||
| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | provenance | |
|
||||
| GlobalDataFlow.cs:89:89:89:89 | s : String | GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | provenance | |
|
||||
| GlobalDataFlow.cs:89:104:89:104 | x : String | GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | provenance | |
|
||||
| GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate<String,String,String> : String | GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate<String,String,String> : String | provenance | MaD:3 |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:84:91:86 | acc : String | provenance | MaD:3 |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:104:91:104 | x : String | provenance | MaD:3 |
|
||||
| GlobalDataFlow.cs:91:84:91:86 | acc : String | GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | provenance | |
|
||||
| GlobalDataFlow.cs:91:104:91:104 | x : String | GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | provenance | |
|
||||
| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | provenance | MaD:22 |
|
||||
| GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | provenance | |
|
||||
| GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | access to local variable sink22 : Boolean | provenance | MaD:20 |
|
||||
@@ -788,10 +796,18 @@ nodes
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String |
|
||||
| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String |
|
||||
| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String |
|
||||
| GlobalDataFlow.cs:89:89:89:89 | s : String | semmle.label | s : String |
|
||||
| GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | semmle.label | ... + ... : String |
|
||||
| GlobalDataFlow.cs:89:104:89:104 | x : String | semmle.label | x : String |
|
||||
| GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | semmle.label | access to parameter x : String |
|
||||
| GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | semmle.label | access to local variable sink17 |
|
||||
| GlobalDataFlow.cs:91:13:91:18 | access to local variable sink18 : String | semmle.label | access to local variable sink18 : String |
|
||||
| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate<String,String,String> : String | semmle.label | call to method Aggregate<String,String,String> : String |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String |
|
||||
| GlobalDataFlow.cs:91:84:91:86 | acc : String | semmle.label | acc : String |
|
||||
| GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | semmle.label | ... + ... : String |
|
||||
| GlobalDataFlow.cs:91:104:91:104 | x : String | semmle.label | x : String |
|
||||
| GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | semmle.label | access to parameter x : String |
|
||||
| GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | semmle.label | access to local variable sink18 |
|
||||
| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | semmle.label | access to local variable sink18 : String |
|
||||
| GlobalDataFlow.cs:94:36:94:41 | access to local variable sink21 : Int32 | semmle.label | access to local variable sink21 : Int32 |
|
||||
@@ -1102,6 +1118,10 @@ subpaths
|
||||
| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select<String,String> : IEnumerable<T> [element] : String |
|
||||
| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String |
|
||||
| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String |
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:89:89:89 | s : String | GlobalDataFlow.cs:89:95:89:101 | ... + ... : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String |
|
||||
| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:104:89:104 | x : String | GlobalDataFlow.cs:89:109:89:109 | access to parameter x : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:84:91:86 | acc : String | GlobalDataFlow.cs:91:95:91:101 | ... + ... : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate<String,String,String> : String |
|
||||
| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:104:91:104 | x : String | GlobalDataFlow.cs:91:109:91:109 | access to parameter x : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate<String,String,String> : String |
|
||||
| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String |
|
||||
| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String |
|
||||
| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc<String,String> : String |
|
||||
|
||||
@@ -56,6 +56,15 @@ public class HomeController5 : HomeController4
|
||||
}
|
||||
}
|
||||
|
||||
// is abstract
|
||||
public abstract class HomeController6 : Controller
|
||||
{
|
||||
public string Index()
|
||||
{
|
||||
return "This is Home Controller";
|
||||
}
|
||||
}
|
||||
|
||||
// is not public
|
||||
internal class NotHomeController : Controller
|
||||
{
|
||||
@@ -65,17 +74,8 @@ internal class NotHomeController : Controller
|
||||
}
|
||||
}
|
||||
|
||||
// is abstract
|
||||
public abstract class NotHomeController2 : Controller
|
||||
{
|
||||
public string Index()
|
||||
{
|
||||
return "This is Home Controller";
|
||||
}
|
||||
}
|
||||
|
||||
// contains generic parameters
|
||||
public class NotHomeController3<T> : Controller
|
||||
public class NotHomeController2<T> : Controller
|
||||
{
|
||||
public string Index()
|
||||
{
|
||||
@@ -85,7 +85,7 @@ public class NotHomeController3<T> : Controller
|
||||
|
||||
// has [NonController] attribute
|
||||
[NonController]
|
||||
public class NotHomeController4 : Controller
|
||||
public class NotHomeController3 : Controller
|
||||
{
|
||||
public string Index()
|
||||
{
|
||||
@@ -94,10 +94,10 @@ public class NotHomeController4 : Controller
|
||||
}
|
||||
|
||||
// derived from a class that has [NonController] attribute
|
||||
public class NotController : NotHomeController4
|
||||
public class NotController : NotHomeController3
|
||||
{
|
||||
public string Index()
|
||||
{
|
||||
return "This is Home Controller";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
| AspNetCore.cs:32:14:32:28 | HomeController3 |
|
||||
| AspNetCore.cs:42:14:42:28 | HomeController4 |
|
||||
| AspNetCore.cs:51:14:51:28 | HomeController5 |
|
||||
| AspNetCore.cs:60:23:60:37 | HomeController6 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
| Partial.cs:3:18:3:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | true |
|
||||
| Partial.cs:5:17:5:23 | Method2 | false |
|
||||
| Partial.cs:10:18:10:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:11:17:11:23 | Method3 | false |
|
||||
| Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | true |
|
||||
| Partial.cs:17:17:17:23 | Method4 | false |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass |
|
||||
| Partial.cs:3:18:3:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass |
|
||||
| Partial.cs:10:18:10:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:14:15:14:33 | OnePartPartialClass |
|
||||
| Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 |
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:3:18:3:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:10:18:10:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:11:17:11:23 | Method3 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:3:18:3:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:10:18:10:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:8:15:8:26 | TwoPartClass | Partial.cs:11:17:11:23 | Method3 |
|
||||
| Partial.cs:14:15:14:33 | OnePartPartialClass | Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 |
|
||||
| Partial.cs:14:15:14:33 | OnePartPartialClass | Partial.cs:17:17:17:23 | Method4 |
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
| Partial.cs:3:18:3:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | false |
|
||||
| Partial.cs:10:18:10:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:16:18:16:42 | PartialMethodWithoutBody2 | false |
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
Partial.cs:
|
||||
# 1| [Class] TwoPartClass
|
||||
# 3| 5: [Method] PartialMethodWithBody1
|
||||
# 3| -1: [TypeMention] Void
|
||||
# 10| 4: [BlockStmt] {...}
|
||||
# 4| 6: [Method] PartialMethodWithoutBody1
|
||||
# 4| 5: [Method] PartialMethodWithoutBody1
|
||||
# 4| -1: [TypeMention] Void
|
||||
# 5| 7: [Method] Method2
|
||||
# 5| 6: [Method] Method2
|
||||
# 5| -1: [TypeMention] Void
|
||||
# 5| 4: [BlockStmt] {...}
|
||||
# 10| 7: [Method] PartialMethodWithBody1
|
||||
# 3| -1: [TypeMention] Void
|
||||
# 10| 4: [BlockStmt] {...}
|
||||
# 11| 8: [Method] Method3
|
||||
# 11| -1: [TypeMention] Void
|
||||
# 11| 4: [BlockStmt] {...}
|
||||
|
||||
@@ -10,7 +10,12 @@ namespace Test
|
||||
using System.Data;
|
||||
using System.Data.Entity;
|
||||
using System.Data.SqlClient;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.UI.WebControls;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
public class EntityFrameworkContext : DbContext
|
||||
{
|
||||
@@ -110,4 +115,28 @@ namespace Test
|
||||
|
||||
System.Windows.Forms.TextBox box1;
|
||||
}
|
||||
|
||||
public abstract class MyController : Controller
|
||||
{
|
||||
[HttpPost("{userId:string}")]
|
||||
public async Task<IActionResult> GetUserById([FromRoute] string userId, CancellationToken cancellationToken)
|
||||
{
|
||||
// This is a vulnerable method due to SQL injection
|
||||
string query = "SELECT * FROM Users WHERE UserId = '" + userId + "'";
|
||||
|
||||
using (SqlConnection connection = new SqlConnection("YourConnectionString"))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(query, connection);
|
||||
connection.Open();
|
||||
|
||||
SqlDataReader reader = command.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
Console.WriteLine(String.Format("{0}, {1}", reader["UserId"], reader["Username"]));
|
||||
}
|
||||
}
|
||||
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
#select
|
||||
| SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | This query depends on $@. | SecondOrderSqlInjection.cs:20:48:20:78 | call to method ExecuteReader : SqlDataReader | this database input |
|
||||
| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | This query depends on $@. | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | this file stream |
|
||||
| SqlInjection.cs:34:50:34:55 | access to local variable query1 | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:34:50:34:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:69:56:69:61 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:69:56:69:61 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:70:55:70:60 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:70:55:70:60 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:83:50:83:55 | access to local variable query1 | SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:82:21:82:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:93:42:93:52 | access to local variable queryString | SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:92:21:92:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:94:50:94:52 | access to local variable cmd | SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:94:50:94:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:92:21:92:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:104:42:104:52 | access to local variable queryString | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | this read from stdin |
|
||||
| SqlInjection.cs:105:50:105:52 | access to local variable cmd | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:105:50:105:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | this read from stdin |
|
||||
| SqlInjection.cs:39:50:39:55 | access to local variable query1 | SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:39:50:39:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:74:56:74:61 | access to local variable query1 | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:74:56:74:61 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:75:55:75:60 | access to local variable query1 | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:75:55:75:60 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | this ASP.NET user input |
|
||||
| SqlInjection.cs:88:50:88:55 | access to local variable query1 | SqlInjection.cs:87:21:87:29 | access to property Text : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:87:21:87:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:98:42:98:52 | access to local variable queryString | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:97:21:97:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:99:50:99:52 | access to local variable cmd | SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:99:50:99:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:97:21:97:29 | access to property Text : String | this TextBox text |
|
||||
| SqlInjection.cs:109:42:109:52 | access to local variable queryString | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin |
|
||||
| SqlInjection.cs:110:50:110:52 | access to local variable cmd | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:110:50:110:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | this read from stdin |
|
||||
| SqlInjection.cs:129:53:129:57 | access to local variable query | SqlInjection.cs:122:73:122:78 | userId : String | SqlInjection.cs:129:53:129:57 | access to local variable query | This query depends on $@. | SqlInjection.cs:122:73:122:78 | userId : String | this ASP.NET Core MVC action method parameter |
|
||||
| SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | this TextBox text |
|
||||
| SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | this TextBox text |
|
||||
| SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | This query depends on $@. | SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | this TextBox text |
|
||||
@@ -40,27 +41,29 @@ edges
|
||||
| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | Sink:MaD:10 |
|
||||
| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | MaD:28 |
|
||||
| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | provenance | |
|
||||
| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | Sink:MaD:18 |
|
||||
| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | provenance | MaD:26 |
|
||||
| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | Sink:MaD:7 |
|
||||
| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | provenance | Sink:MaD:8 |
|
||||
| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | provenance | MaD:26 |
|
||||
| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | provenance | Sink:MaD:18 |
|
||||
| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | provenance | Sink:MaD:15 |
|
||||
| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | provenance | Sink:MaD:17 |
|
||||
| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | provenance | |
|
||||
| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 |
|
||||
| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString | provenance | Sink:MaD:15 |
|
||||
| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | provenance | Src:MaD:27 |
|
||||
| SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:105:50:105:52 | access to local variable cmd | provenance | Sink:MaD:17 |
|
||||
| SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | provenance | |
|
||||
| SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 |
|
||||
| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | SqlInjection.cs:39:50:39:55 | access to local variable query1 | provenance | Sink:MaD:18 |
|
||||
| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:38:21:38:40 | access to property Text : String | provenance | MaD:26 |
|
||||
| SqlInjection.cs:38:21:38:40 | access to property Text : String | SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:74:56:74:61 | access to local variable query1 | provenance | Sink:MaD:7 |
|
||||
| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | SqlInjection.cs:75:55:75:60 | access to local variable query1 | provenance | Sink:MaD:8 |
|
||||
| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:73:33:73:52 | access to property Text : String | provenance | MaD:26 |
|
||||
| SqlInjection.cs:73:33:73:52 | access to property Text : String | SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | SqlInjection.cs:88:50:88:55 | access to local variable query1 | provenance | Sink:MaD:18 |
|
||||
| SqlInjection.cs:87:21:87:29 | access to property Text : String | SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | provenance | |
|
||||
| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString | provenance | Sink:MaD:15 |
|
||||
| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:97:21:97:29 | access to property Text : String | SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:99:50:99:52 | access to local variable cmd | provenance | Sink:MaD:17 |
|
||||
| SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | provenance | |
|
||||
| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 |
|
||||
| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString | provenance | Sink:MaD:15 |
|
||||
| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | provenance | |
|
||||
| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | provenance | Src:MaD:27 |
|
||||
| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:110:50:110:52 | access to local variable cmd | provenance | Sink:MaD:17 |
|
||||
| SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | provenance | |
|
||||
| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:19 |
|
||||
| SqlInjection.cs:122:73:122:78 | userId : String | SqlInjection.cs:125:20:125:24 | access to local variable query : String | provenance | |
|
||||
| SqlInjection.cs:125:20:125:24 | access to local variable query : String | SqlInjection.cs:129:53:129:57 | access to local variable query | provenance | Sink:MaD:16 |
|
||||
| SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | Sink:MaD:4 |
|
||||
| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | provenance | |
|
||||
| SqlInjectionDapper.cs:29:21:29:25 | access to local variable query : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | Sink:MaD:5 |
|
||||
@@ -144,32 +147,35 @@ nodes
|
||||
| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | semmle.label | access to local variable sql : String |
|
||||
| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | semmle.label | call to method Trim : String |
|
||||
| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | semmle.label | access to local variable sql |
|
||||
| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox |
|
||||
| SqlInjection.cs:33:21:33:40 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:34:50:34:55 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox |
|
||||
| SqlInjection.cs:68:33:68:52 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:69:56:69:61 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:70:55:70:60 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:81:21:81:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:82:21:82:29 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:83:50:83:55 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:91:21:91:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:92:21:92:29 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:93:21:93:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand |
|
||||
| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand |
|
||||
| SqlInjection.cs:93:42:93:52 | access to local variable queryString | semmle.label | access to local variable queryString |
|
||||
| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:94:50:94:52 | access to local variable cmd | semmle.label | access to local variable cmd |
|
||||
| SqlInjection.cs:102:21:102:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:103:21:103:38 | call to method ReadLine : String | semmle.label | call to method ReadLine : String |
|
||||
| SqlInjection.cs:104:21:104:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand |
|
||||
| SqlInjection.cs:104:27:104:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand |
|
||||
| SqlInjection.cs:104:42:104:52 | access to local variable queryString | semmle.label | access to local variable queryString |
|
||||
| SqlInjection.cs:104:42:104:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:105:50:105:52 | access to local variable cmd | semmle.label | access to local variable cmd |
|
||||
| SqlInjection.cs:37:21:37:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:38:21:38:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox |
|
||||
| SqlInjection.cs:38:21:38:40 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:39:50:39:55 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:72:25:72:30 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:73:33:73:47 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox |
|
||||
| SqlInjection.cs:73:33:73:52 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:74:56:74:61 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:75:55:75:60 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:86:21:86:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String |
|
||||
| SqlInjection.cs:87:21:87:29 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:88:50:88:55 | access to local variable query1 | semmle.label | access to local variable query1 |
|
||||
| SqlInjection.cs:96:21:96:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:97:21:97:29 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjection.cs:98:21:98:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand |
|
||||
| SqlInjection.cs:98:27:98:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand |
|
||||
| SqlInjection.cs:98:42:98:52 | access to local variable queryString | semmle.label | access to local variable queryString |
|
||||
| SqlInjection.cs:98:42:98:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:99:50:99:52 | access to local variable cmd | semmle.label | access to local variable cmd |
|
||||
| SqlInjection.cs:107:21:107:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:108:21:108:38 | call to method ReadLine : String | semmle.label | call to method ReadLine : String |
|
||||
| SqlInjection.cs:109:21:109:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand |
|
||||
| SqlInjection.cs:109:27:109:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand |
|
||||
| SqlInjection.cs:109:42:109:52 | access to local variable queryString | semmle.label | access to local variable queryString |
|
||||
| SqlInjection.cs:109:42:109:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String |
|
||||
| SqlInjection.cs:110:50:110:52 | access to local variable cmd | semmle.label | access to local variable cmd |
|
||||
| SqlInjection.cs:122:73:122:78 | userId : String | semmle.label | userId : String |
|
||||
| SqlInjection.cs:125:20:125:24 | access to local variable query : String | semmle.label | access to local variable query : String |
|
||||
| SqlInjection.cs:129:53:129:57 | access to local variable query | semmle.label | access to local variable query |
|
||||
| SqlInjectionDapper.cs:20:21:20:25 | access to local variable query : String | semmle.label | access to local variable query : String |
|
||||
| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | semmle.label | access to property Text : String |
|
||||
| SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | semmle.label | access to local variable query |
|
||||
|
||||
@@ -3,3 +3,4 @@ semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resour
|
||||
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SqlClient/4.8.5/System.Data.SqlClient.csproj
|
||||
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/System.Data.SQLite/1.0.118/System.Data.SQLite.csproj
|
||||
semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs
|
||||
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj
|
||||
|
||||
@@ -47,6 +47,7 @@ codeql_pkg_files(
|
||||
"//go/extractor/cli/go-autobuilder",
|
||||
"//go/extractor/cli/go-bootstrap",
|
||||
"//go/extractor/cli/go-build-runner",
|
||||
"//go/extractor/cli/go-configure-baseline",
|
||||
"//go/extractor/cli/go-extractor",
|
||||
"//go/extractor/cli/go-gen-dbscheme",
|
||||
"//go/extractor/cli/go-tokenizer",
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"paths-ignore": []
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"paths-ignore": [
|
||||
"vendor/**"
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,4 @@
|
||||
@echo off
|
||||
if exist vendor\modules.txt (
|
||||
type "%CODEQL_EXTRACTOR_GO_ROOT%\tools\baseline-config-vendor.json"
|
||||
) else (
|
||||
type "%CODEQL_EXTRACTOR_GO_ROOT%\tools\baseline-config-empty.json"
|
||||
)
|
||||
|
||||
type NUL && "%CODEQL_EXTRACTOR_GO_ROOT%/tools/%CODEQL_PLATFORM%/go-configure-baseline.exe"
|
||||
exit /b %ERRORLEVEL%
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f vendor/modules.txt ]; then
|
||||
cat "$CODEQL_EXTRACTOR_GO_ROOT/tools/baseline-config-vendor.json"
|
||||
else
|
||||
cat "$CODEQL_EXTRACTOR_GO_ROOT/tools/baseline-config-empty.json"
|
||||
fi
|
||||
"$CODEQL_EXTRACTOR_GO_ROOT/tools/$CODEQL_PLATFORM/go-configure-baseline"
|
||||
|
||||
18
go/extractor/cli/go-configure-baseline/BUILD.bazel
generated
Normal file
18
go/extractor/cli/go-configure-baseline/BUILD.bazel
generated
Normal file
@@ -0,0 +1,18 @@
|
||||
# generated running `bazel run //go/gazelle`, do not edit
|
||||
|
||||
load("@rules_go//go:def.bzl", "go_library")
|
||||
load("//go:rules.bzl", "codeql_go_binary")
|
||||
|
||||
go_library(
|
||||
name = "go-configure-baseline_lib",
|
||||
srcs = ["go-configure-baseline.go"],
|
||||
importpath = "github.com/github/codeql-go/extractor/cli/go-configure-baseline",
|
||||
visibility = ["//visibility:private"],
|
||||
deps = ["//go/extractor/configurebaseline"],
|
||||
)
|
||||
|
||||
codeql_go_binary(
|
||||
name = "go-configure-baseline",
|
||||
embed = [":go-configure-baseline_lib"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/github/codeql-go/extractor/configurebaseline"
|
||||
)
|
||||
|
||||
func main() {
|
||||
jsonResult, err := configurebaseline.GetConfigBaselineAsJSON(".")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
fmt.Println(string(jsonResult))
|
||||
}
|
||||
}
|
||||
11
go/extractor/configurebaseline/BUILD.bazel
generated
Normal file
11
go/extractor/configurebaseline/BUILD.bazel
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
# generated running `bazel run //go/gazelle`, do not edit
|
||||
|
||||
load("@rules_go//go:def.bzl", "go_library")
|
||||
|
||||
go_library(
|
||||
name = "configurebaseline",
|
||||
srcs = ["configurebaseline.go"],
|
||||
importpath = "github.com/github/codeql-go/extractor/configurebaseline",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = ["//go/extractor/util"],
|
||||
)
|
||||
52
go/extractor/configurebaseline/configurebaseline.go
Normal file
52
go/extractor/configurebaseline/configurebaseline.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package configurebaseline
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/github/codeql-go/extractor/util"
|
||||
)
|
||||
|
||||
func fileExists(path string) bool {
|
||||
stat, err := os.Stat(path)
|
||||
return err == nil && stat.Mode().IsRegular()
|
||||
}
|
||||
|
||||
// Decides if `dirPath` is a vendor directory by testing whether it is called `vendor`
|
||||
// and contains a `modules.txt` file.
|
||||
func isGolangVendorDirectory(dirPath string) bool {
|
||||
return filepath.Base(dirPath) == "vendor" && fileExists(filepath.Join(dirPath, "modules.txt"))
|
||||
}
|
||||
|
||||
type BaselineConfig struct {
|
||||
PathsIgnore []string `json:"paths-ignore"`
|
||||
}
|
||||
|
||||
func GetConfigBaselineAsJSON(rootDir string) ([]byte, error) {
|
||||
vendorDirs := make([]string, 0)
|
||||
|
||||
if util.IsVendorDirExtractionEnabled() {
|
||||
// The user wants vendor directories scanned; emit an empty report.
|
||||
} else {
|
||||
filepath.WalkDir(rootDir, func(dirPath string, d fs.DirEntry, err error) error {
|
||||
if err != nil {
|
||||
// Ignore any unreadable paths -- if this script can't see it, very likely
|
||||
// it will not be extracted either.
|
||||
return nil
|
||||
}
|
||||
if isGolangVendorDirectory(dirPath) {
|
||||
// Note that CodeQL expects a forward-slash-separated path, even on Windows.
|
||||
vendorDirs = append(vendorDirs, path.Join(filepath.ToSlash(dirPath), "**"))
|
||||
return filepath.SkipDir
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
outputStruct := BaselineConfig{PathsIgnore: vendorDirs}
|
||||
return json.Marshal(outputStruct)
|
||||
}
|
||||
@@ -199,7 +199,7 @@ func ExtractWithFlags(buildFlags []string, patterns []string) error {
|
||||
|
||||
// If CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS is "true", we extract `vendor` directories;
|
||||
// otherwise (the default) is to exclude them from extraction
|
||||
includeVendor := os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true"
|
||||
includeVendor := util.IsVendorDirExtractionEnabled()
|
||||
if !includeVendor {
|
||||
excludedDirs = append(excludedDirs, "vendor")
|
||||
}
|
||||
|
||||
1
go/extractor/util/BUILD.bazel
generated
1
go/extractor/util/BUILD.bazel
generated
@@ -5,6 +5,7 @@ load("@rules_go//go:def.bzl", "go_library", "go_test")
|
||||
go_library(
|
||||
name = "util",
|
||||
srcs = [
|
||||
"extractvendordirs.go",
|
||||
"semver.go",
|
||||
"util.go",
|
||||
],
|
||||
|
||||
9
go/extractor/util/extractvendordirs.go
Normal file
9
go/extractor/util/extractvendordirs.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
func IsVendorDirExtractionEnabled() bool {
|
||||
return os.Getenv("CODEQL_EXTRACTOR_GO_EXTRACT_VENDOR_DIRS") == "true"
|
||||
}
|
||||
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go
vendored
Normal file
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/avendor.go
vendored
Normal file
@@ -0,0 +1 @@
|
||||
package abc
|
||||
0
go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt
vendored
Normal file
0
go/ql/integration-tests/all-platforms/go/configure-baseline/src/a/vendor/modules.txt
vendored
Normal file
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go
vendored
Normal file
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/bvendor.go
vendored
Normal file
@@ -0,0 +1 @@
|
||||
package abc
|
||||
0
go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt
vendored
Normal file
0
go/ql/integration-tests/all-platforms/go/configure-baseline/src/b/vendor/modules.txt
vendored
Normal file
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go
vendored
Normal file
1
go/ql/integration-tests/all-platforms/go/configure-baseline/src/c/vendor/cvendor.go
vendored
Normal file
@@ -0,0 +1 @@
|
||||
package abc
|
||||
@@ -0,0 +1 @@
|
||||
package abc
|
||||
@@ -0,0 +1,9 @@
|
||||
import os.path
|
||||
import json
|
||||
|
||||
def test(codeql, go):
|
||||
codeql.database.init(source_root="src")
|
||||
baseline_info_path = os.path.join("test-db", "baseline-info.json")
|
||||
with open(baseline_info_path, "r") as f:
|
||||
baseline_info = json.load(f)
|
||||
assert set(baseline_info["languages"]["go"]["files"]) == set(["root.go", "c/vendor/cvendor.go"]), "Expected root.go and cvendor.go in baseline"
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: fix
|
||||
---
|
||||
* Golang vendor directories not at the root of a repository are now correctly excluded from the baseline Go file count. This means code coverage information will be more accurate.
|
||||
@@ -213,16 +213,30 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) {
|
||||
)
|
||||
}
|
||||
|
||||
bindingset[p]
|
||||
private string cleanPackage(string p) {
|
||||
exists(string noPrefix |
|
||||
p = fixedVersionPrefix() + noPrefix
|
||||
or
|
||||
not p = fixedVersionPrefix() + any(string s) and
|
||||
noPrefix = p
|
||||
|
|
||||
result = noPrefix.regexpReplaceAll(majorVersionSuffixRegex(), "")
|
||||
)
|
||||
}
|
||||
|
||||
private predicate relevantPackage(string package) {
|
||||
sourceModel(package, _, _, _, _, _, _, _, _, _) or
|
||||
sinkModel(package, _, _, _, _, _, _, _, _, _) or
|
||||
summaryModel(package, _, _, _, _, _, _, _, _, _, _)
|
||||
exists(string p | package = cleanPackage(p) |
|
||||
sourceModel(p, _, _, _, _, _, _, _, _, _) or
|
||||
sinkModel(p, _, _, _, _, _, _, _, _, _) or
|
||||
summaryModel(p, _, _, _, _, _, _, _, _, _, _)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate packageLink(string shortpkg, string longpkg) {
|
||||
relevantPackage(shortpkg) and
|
||||
relevantPackage(longpkg) and
|
||||
longpkg.prefix(longpkg.indexOf(".")) = shortpkg
|
||||
longpkg.prefix(longpkg.indexOf("/")) = shortpkg
|
||||
}
|
||||
|
||||
private predicate canonicalPackage(string package) {
|
||||
@@ -245,26 +259,28 @@ predicate modelCoverage(string package, int pkgs, string kind, string part, int
|
||||
part = "source" and
|
||||
n =
|
||||
strictcount(string subpkg, string type, boolean subtypes, string name, string signature,
|
||||
string ext, string output, string provenance |
|
||||
string ext, string output, string provenance, string x |
|
||||
canonicalPkgLink(package, subpkg) and
|
||||
sourceModel(subpkg, type, subtypes, name, signature, ext, output, kind, provenance, _)
|
||||
subpkg = cleanPackage(x) and
|
||||
sourceModel(x, type, subtypes, name, signature, ext, output, kind, provenance, _)
|
||||
)
|
||||
or
|
||||
part = "sink" and
|
||||
n =
|
||||
strictcount(string subpkg, string type, boolean subtypes, string name, string signature,
|
||||
string ext, string input, string provenance |
|
||||
string ext, string input, string provenance, string x |
|
||||
canonicalPkgLink(package, subpkg) and
|
||||
sinkModel(subpkg, type, subtypes, name, signature, ext, input, kind, provenance, _)
|
||||
subpkg = cleanPackage(x) and
|
||||
sinkModel(x, type, subtypes, name, signature, ext, input, kind, provenance, _)
|
||||
)
|
||||
or
|
||||
part = "summary" and
|
||||
n =
|
||||
strictcount(string subpkg, string type, boolean subtypes, string name, string signature,
|
||||
string ext, string input, string output, string provenance |
|
||||
string ext, string input, string output, string provenance, string x |
|
||||
canonicalPkgLink(package, subpkg) and
|
||||
summaryModel(subpkg, type, subtypes, name, signature, ext, input, output, kind, provenance,
|
||||
_)
|
||||
subpkg = cleanPackage(x) and
|
||||
summaryModel(x, type, subtypes, name, signature, ext, input, output, kind, provenance, _)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -220,26 +220,26 @@ open class LoggerBase(val logCounter: LogCounter) {
|
||||
logStream.write(logMessage.toJsonLine())
|
||||
}
|
||||
|
||||
fun trace(tw: TrapWriter, msg: String) {
|
||||
fun trace(dtw: DiagnosticTrapWriter, msg: String) {
|
||||
if (verbosity >= 4) {
|
||||
val logMessage = LogMessage("TRACE", msg)
|
||||
tw.writeComment(logMessage.toText())
|
||||
dtw.writeComment(logMessage.toText())
|
||||
logStream.write(logMessage.toJsonLine())
|
||||
}
|
||||
}
|
||||
|
||||
fun debug(tw: TrapWriter, msg: String) {
|
||||
fun debug(dtw: DiagnosticTrapWriter, msg: String) {
|
||||
if (verbosity >= 4) {
|
||||
val logMessage = LogMessage("DEBUG", msg)
|
||||
tw.writeComment(logMessage.toText())
|
||||
dtw.writeComment(logMessage.toText())
|
||||
logStream.write(logMessage.toJsonLine())
|
||||
}
|
||||
}
|
||||
|
||||
fun info(tw: TrapWriter, msg: String) {
|
||||
fun info(dtw: DiagnosticTrapWriter, msg: String) {
|
||||
if (verbosity >= 3) {
|
||||
val logMessage = LogMessage("INFO", msg)
|
||||
tw.writeComment(logMessage.toText())
|
||||
dtw.writeComment(logMessage.toText())
|
||||
logStream.write(logMessage.toJsonLine())
|
||||
}
|
||||
}
|
||||
@@ -279,7 +279,7 @@ open class LoggerBase(val logCounter: LogCounter) {
|
||||
}
|
||||
}
|
||||
|
||||
open class Logger(val loggerBase: LoggerBase, open val dtw: DiagnosticTrapWriter) {
|
||||
open class Logger(val loggerBase: LoggerBase, val dtw: DiagnosticTrapWriter) {
|
||||
fun flush() {
|
||||
dtw.flush()
|
||||
loggerBase.flush()
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* @name Capture Summary Models Partial Path
|
||||
* @description Capture Summary Models Partial Path
|
||||
* @kind path-problem
|
||||
* @precision low
|
||||
* @id java/utils/modelgenerator/summary-models-partial-path
|
||||
* @severity info
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import java
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import PartialFlow::PartialPathGraph
|
||||
|
||||
int explorationLimit() { result = 3 }
|
||||
|
||||
module PartialFlow = PropagateFlow::FlowExplorationFwd<explorationLimit/0>;
|
||||
|
||||
from
|
||||
PartialFlow::PartialPathNode source, PartialFlow::PartialPathNode sink,
|
||||
DataFlowSummaryTargetApi api, DataFlow::ParameterNode p
|
||||
where
|
||||
PartialFlow::partialFlow(source, sink, _) and
|
||||
p = source.getNode() and
|
||||
p.asParameter() = api.getAParameter()
|
||||
select sink.getNode(), source, sink, "There is flow from a $@ to $@.", source.getNode(),
|
||||
"parameter", sink.getNode(), "intermediate value"
|
||||
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* @name Capture Summary Models Path
|
||||
* @description Capture Summary Models Path
|
||||
* @kind path-problem
|
||||
* @precision low
|
||||
* @id java/utils/modelgenerator/summary-models-path
|
||||
* @severity warning
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import java
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import PropagateFlow::PathGraph
|
||||
|
||||
from
|
||||
PropagateFlow::PathNode source, PropagateFlow::PathNode sink, DataFlowSummaryTargetApi api,
|
||||
DataFlow::Node p, DataFlow::Node returnNodeExt
|
||||
where
|
||||
PropagateFlow::flowPath(source, sink) and
|
||||
p = source.getNode() and
|
||||
returnNodeExt = sink.getNode() and
|
||||
exists(captureThroughFlow0(api, p, returnNodeExt))
|
||||
select sink.getNode(), source, sink, "There is flow from $@ to the $@.", source.getNode(),
|
||||
"parameter", sink.getNode(), "return value"
|
||||
1
java/ql/src/utils/modelgenerator/debug/README.md
Normal file
1
java/ql/src/utils/modelgenerator/debug/README.md
Normal file
@@ -0,0 +1 @@
|
||||
The queries in this directory are purely used for model generator debugging purposes in VS Code.
|
||||
@@ -50,7 +50,7 @@ module Printing = ModelPrinting<ModelPrintingInput>;
|
||||
/**
|
||||
* Holds if `c` is a relevant content kind, where the underlying type is relevant.
|
||||
*/
|
||||
private predicate isRelevantTypeInContent(DataFlow::Content c) {
|
||||
private predicate isRelevantTypeInContent(DataFlow::ContentSet c) {
|
||||
isRelevantType(getUnderlyingContentType(c))
|
||||
}
|
||||
|
||||
@@ -58,24 +58,22 @@ private predicate isRelevantTypeInContent(DataFlow::Content c) {
|
||||
* Holds if data can flow from `node1` to `node2` either via a read or a write of an intermediate field `f`.
|
||||
*/
|
||||
private predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
exists(DataFlow::Content f |
|
||||
exists(DataFlow::ContentSet f |
|
||||
DataFlowPrivate::readStep(node1, f, node2) and
|
||||
// Partially restrict the content types used for intermediate steps.
|
||||
(not exists(getUnderlyingContentType(f)) or isRelevantTypeInContent(f))
|
||||
)
|
||||
or
|
||||
exists(DataFlow::Content f | DataFlowPrivate::storeStep(node1, f, node2) |
|
||||
DataFlowPrivate::containerContent(f)
|
||||
)
|
||||
exists(DataFlow::ContentSet f | DataFlowPrivate::storeStep(node1, f, node2) | containerContent(f))
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if content `c` is either a field, a synthetic field or language specific
|
||||
* content of a relevant type or a container like content.
|
||||
*/
|
||||
private predicate isRelevantContent(DataFlow::Content c) {
|
||||
private predicate isRelevantContent(DataFlow::ContentSet c) {
|
||||
isRelevantTypeInContent(c) or
|
||||
DataFlowPrivate::containerContent(c)
|
||||
containerContent(c)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -170,8 +168,8 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
predicate isAdditionalFlowStep(
|
||||
DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2
|
||||
) {
|
||||
exists(DataFlow::Content c |
|
||||
DataFlowImplCommon::store(node1, c, node2, _, _) and
|
||||
exists(DataFlow::ContentSet c |
|
||||
DataFlowImplCommon::store(node1, c.getAStoreContent(), node2, _, _) and
|
||||
isRelevantContent(c) and
|
||||
(
|
||||
state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1
|
||||
@@ -180,7 +178,7 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
)
|
||||
)
|
||||
or
|
||||
exists(DataFlow::Content c |
|
||||
exists(DataFlow::ContentSet c |
|
||||
DataFlowPrivate::readStep(node1, c, node2) and
|
||||
isRelevantContent(c) and
|
||||
state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep()
|
||||
@@ -196,14 +194,13 @@ module PropagateFlowConfig implements DataFlow::StateConfigSig {
|
||||
}
|
||||
}
|
||||
|
||||
private module PropagateFlow = TaintTracking::GlobalWithState<PropagateFlowConfig>;
|
||||
module PropagateFlow = TaintTracking::GlobalWithState<PropagateFlowConfig>;
|
||||
|
||||
/**
|
||||
* Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter.
|
||||
*/
|
||||
string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt, string input, string output |
|
||||
PropagateFlow::flow(p, returnNodeExt) and
|
||||
string captureThroughFlow0(
|
||||
DataFlowSummaryTargetApi api, DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt
|
||||
) {
|
||||
exists(string input, string output |
|
||||
p.getEnclosingCallable() = api and
|
||||
returnNodeExt.(DataFlow::Node).getEnclosingCallable() = api and
|
||||
input = parameterNodeAsInput(p) and
|
||||
output = returnNodeExt.getOutput() and
|
||||
@@ -212,6 +209,16 @@ string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the summary model(s) of `api`, if there is flow from parameters to return value or parameter.
|
||||
*/
|
||||
string captureThroughFlow(DataFlowSummaryTargetApi api) {
|
||||
exists(DataFlow::ParameterNode p, ReturnNodeExt returnNodeExt |
|
||||
PropagateFlow::flow(p, returnNodeExt) and
|
||||
result = captureThroughFlow0(api, p, returnNodeExt)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* A dataflow configuration used for finding new sources.
|
||||
* The sources are the already known existing sources and the sinks are the API return nodes.
|
||||
|
||||
@@ -303,3 +303,5 @@ predicate isRelevantSinkKind(string kind) {
|
||||
*/
|
||||
bindingset[kind]
|
||||
predicate isRelevantSourceKind(string kind) { any() }
|
||||
|
||||
predicate containerContent = DataFlowPrivate::containerContent/1;
|
||||
|
||||
@@ -36,19 +36,14 @@ edges
|
||||
| apply.kt:6:28:6:41 | $this$apply : String | apply.kt:6:35:6:38 | this | provenance | |
|
||||
| apply.kt:7:14:7:25 | taint(...) : String | apply.kt:7:14:7:40 | apply(...) | provenance | MaD:31 |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:7:14:7:14 | l | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:8:14:8:14 | l : List | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:8:14:8:14 | l : List [<element>] : String | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:9:19:9:19 | l : List [<element>] : String | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:10:18:10:18 | s | provenance | |
|
||||
| list.kt:6:16:6:25 | taint(...) : String | list.kt:6:9:6:9 | l [post update] : List [<element>] : String | provenance | MaD:27 |
|
||||
| list.kt:8:14:8:14 | l : List | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 |
|
||||
| list.kt:8:14:8:14 | l : List [<element>] : String | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 |
|
||||
| list.kt:9:19:9:19 | l : List [<element>] : String | list.kt:10:18:10:18 | s | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:14:14:14:14 | a | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:14 | a : String[] [[]] : String | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:16:19:16:19 | a : String[] [[]] : String | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | |
|
||||
| list.kt:13:25:13:34 | taint(...) : String | list.kt:13:17:13:40 | {...} : String[] [[]] : String | provenance | |
|
||||
| list.kt:15:14:15:14 | a : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | |
|
||||
| list.kt:16:19:16:19 | a : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | |
|
||||
@@ -134,7 +129,6 @@ nodes
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | semmle.label | l [post update] : List [<element>] : String |
|
||||
| list.kt:6:16:6:25 | taint(...) : String | semmle.label | taint(...) : String |
|
||||
| list.kt:7:14:7:14 | l | semmle.label | l |
|
||||
| list.kt:8:14:8:14 | l : List | semmle.label | l : List |
|
||||
| list.kt:8:14:8:14 | l : List [<element>] : String | semmle.label | l : List [<element>] : String |
|
||||
| list.kt:8:14:8:17 | get(...) | semmle.label | get(...) |
|
||||
| list.kt:9:19:9:19 | l : List [<element>] : String | semmle.label | l : List [<element>] : String |
|
||||
|
||||
@@ -36,19 +36,14 @@ edges
|
||||
| apply.kt:6:28:6:41 | $this$apply : String | apply.kt:6:35:6:38 | this | provenance | |
|
||||
| apply.kt:7:14:7:25 | taint(...) : String | apply.kt:7:14:7:40 | apply(...) | provenance | MaD:31 |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:7:14:7:14 | l | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:8:14:8:14 | l : List | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:8:14:8:14 | l : List [<element>] : String | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:9:19:9:19 | l : List [<element>] : String | provenance | |
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | list.kt:10:18:10:18 | s | provenance | |
|
||||
| list.kt:6:16:6:25 | taint(...) : String | list.kt:6:9:6:9 | l [post update] : List [<element>] : String | provenance | MaD:27 |
|
||||
| list.kt:8:14:8:14 | l : List | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 |
|
||||
| list.kt:8:14:8:14 | l : List [<element>] : String | list.kt:8:14:8:17 | get(...) | provenance | MaD:26 |
|
||||
| list.kt:9:19:9:19 | l : List [<element>] : String | list.kt:10:18:10:18 | s | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:14:14:14:14 | a | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:14 | a : String[] [[]] : String | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:16:19:16:19 | a : String[] [[]] : String | provenance | |
|
||||
| list.kt:13:17:13:40 | {...} : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | |
|
||||
| list.kt:13:25:13:34 | taint(...) : String | list.kt:13:17:13:40 | {...} : String[] [[]] : String | provenance | |
|
||||
| list.kt:15:14:15:14 | a : String[] [[]] : String | list.kt:15:14:15:17 | ...[...] | provenance | |
|
||||
| list.kt:16:19:16:19 | a : String[] [[]] : String | list.kt:17:18:17:18 | s | provenance | |
|
||||
@@ -134,7 +129,6 @@ nodes
|
||||
| list.kt:6:9:6:9 | l [post update] : List [<element>] : String | semmle.label | l [post update] : List [<element>] : String |
|
||||
| list.kt:6:16:6:25 | taint(...) : String | semmle.label | taint(...) : String |
|
||||
| list.kt:7:14:7:14 | l | semmle.label | l |
|
||||
| list.kt:8:14:8:14 | l : List | semmle.label | l : List |
|
||||
| list.kt:8:14:8:14 | l : List [<element>] : String | semmle.label | l : List [<element>] : String |
|
||||
| list.kt:8:14:8:17 | get(...) | semmle.label | get(...) |
|
||||
| list.kt:9:19:9:19 | l : List [<element>] : String | semmle.label | l : List [<element>] : String |
|
||||
|
||||
@@ -6,8 +6,7 @@ edges
|
||||
| FileService.java:20:31:20:43 | intent : Intent | FileService.java:21:28:21:33 | intent : Intent | provenance | |
|
||||
| FileService.java:21:28:21:33 | intent : Intent | FileService.java:21:28:21:64 | getStringExtra(...) : String | provenance | MaD:2 |
|
||||
| FileService.java:21:28:21:64 | getStringExtra(...) : String | FileService.java:25:42:25:50 | localPath : String | provenance | |
|
||||
| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | FileService.java:40:41:40:55 | params : Object[] | provenance | Config |
|
||||
| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | provenance | |
|
||||
| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | FileService.java:40:41:40:55 | params : Object[] | provenance | Config |
|
||||
| FileService.java:25:42:25:50 | localPath : String | FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | provenance | |
|
||||
| FileService.java:25:42:25:50 | localPath : String | FileService.java:32:13:32:28 | sourceUri : String | provenance | |
|
||||
| FileService.java:32:13:32:28 | sourceUri : String | FileService.java:35:17:35:25 | sourceUri : String | provenance | |
|
||||
@@ -33,7 +32,6 @@ nodes
|
||||
| FileService.java:20:31:20:43 | intent : Intent | semmle.label | intent : Intent |
|
||||
| FileService.java:21:28:21:33 | intent : Intent | semmle.label | intent : Intent |
|
||||
| FileService.java:21:28:21:64 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String |
|
||||
| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] | semmle.label | makeParamsToExecute(...) : Object[] |
|
||||
| FileService.java:25:13:25:51 | makeParamsToExecute(...) : Object[] [[]] : String | semmle.label | makeParamsToExecute(...) : Object[] [[]] : String |
|
||||
| FileService.java:25:42:25:50 | localPath : String | semmle.label | localPath : String |
|
||||
| FileService.java:32:13:32:28 | sourceUri : String | semmle.label | sourceUri : String |
|
||||
|
||||
@@ -32,7 +32,6 @@ edges
|
||||
| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:71:29:71:32 | path : String | provenance | |
|
||||
| DotRegexSpring.java:71:11:71:42 | decode(...) : String | DotRegexSpring.java:73:10:73:13 | path : String | provenance | |
|
||||
| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:3 |
|
||||
| DotRegexSpring.java:71:29:71:32 | path : String | DotRegexSpring.java:71:11:71:42 | decode(...) : String | provenance | MaD:3 |
|
||||
models
|
||||
| 1 | Source: javax.servlet.http; HttpServletRequest; false; getPathInfo; (); ; ReturnValue; uri-path; manual |
|
||||
| 2 | Source: javax.servlet.http; HttpServletRequest; false; getRequestURI; (); ; ReturnValue; uri-path; manual |
|
||||
@@ -61,11 +60,7 @@ nodes
|
||||
| DotRegexSpring.java:69:28:69:38 | path : String | semmle.label | path : String |
|
||||
| DotRegexSpring.java:71:11:71:42 | decode(...) : String | semmle.label | decode(...) : String |
|
||||
| DotRegexSpring.java:71:29:71:32 | path : String | semmle.label | path : String |
|
||||
| DotRegexSpring.java:71:29:71:32 | path : String | semmle.label | path : String |
|
||||
| DotRegexSpring.java:73:10:73:13 | path : String | semmle.label | path : String |
|
||||
| DotRegexSpring.java:73:10:73:13 | path : String | semmle.label | path : String |
|
||||
subpaths
|
||||
| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String |
|
||||
| DotRegexSpring.java:22:21:22:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:22:10:22:25 | decodePath(...) : String |
|
||||
| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String |
|
||||
| DotRegexSpring.java:39:21:39:24 | path : String | DotRegexSpring.java:69:28:69:38 | path : String | DotRegexSpring.java:73:10:73:13 | path : String | DotRegexSpring.java:39:10:39:25 | decodePath(...) : String |
|
||||
|
||||
@@ -116,16 +116,13 @@ edges
|
||||
| B.java:107:31:111:5 | ...->... : new Consumer<String>(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | provenance | heuristic-callback |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String | B.java:107:31:111:5 | List<String> out1 : ArrayList [<element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | List<String> out1 : ArrayList [<element>] : String | B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | String s : String | B.java:107:31:111:5 | ...->... : new Consumer<String>(...) { ... } [String s] : String | provenance | |
|
||||
| B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | B.java:108:12:108:12 | this : new Consumer<String>(...) { ... } [String s] : String | provenance | |
|
||||
| B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | B.java:110:16:110:16 | this : new Consumer<String>(...) { ... } [String s] : String | provenance | |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | provenance | |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [String s] : String | B.java:107:31:111:5 | String s : String | provenance | |
|
||||
| B.java:108:12:108:12 | this : new Consumer<String>(...) { ... } [String s] : String | B.java:108:12:108:12 | s | provenance | |
|
||||
| B.java:109:7:109:10 | out1 [post update] : ArrayList [<element>] : String | B.java:109:7:109:10 | this : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String | provenance | |
|
||||
@@ -363,23 +360,19 @@ nodes
|
||||
| B.java:107:16:111:6 | parameter this : new Consumer<List<String>>(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer<List<String>>(...) { ... } [String s] : String |
|
||||
| B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | semmle.label | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | semmle.label | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | semmle.label | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:21:107:21 | l : ArrayList [<element>] : String | semmle.label | l : ArrayList [<element>] : String |
|
||||
| B.java:107:31:107:31 | x : String | semmle.label | x : String |
|
||||
| B.java:107:31:111:5 | ...->... : new Consumer<String>(...) { ... } [String s] : String | semmle.label | ...->... : new Consumer<String>(...) { ... } [String s] : String |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String | semmle.label | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | semmle.label | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | semmle.label | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | List<String> out1 : ArrayList [<element>] : String | semmle.label | List<String> out1 : ArrayList [<element>] : String |
|
||||
| B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | semmle.label | List<String> out2 : ArrayList [<element>] : String |
|
||||
| B.java:107:31:111:5 | List<String> out2 : ArrayList [<element>] : String | semmle.label | List<String> out2 : ArrayList [<element>] : String |
|
||||
| B.java:107:31:111:5 | String s : String | semmle.label | String s : String |
|
||||
| B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer<String>(...) { ... } [String s] : String |
|
||||
| B.java:107:31:111:5 | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String | semmle.label | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:31:111:5 | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | semmle.label | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | semmle.label | this : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | semmle.label | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | semmle.label | this : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | this : new Consumer<List<String>>(...) { ... } [String s] : String | semmle.label | this : new Consumer<List<String>>(...) { ... } [String s] : String |
|
||||
| B.java:108:12:108:12 | s | semmle.label | s |
|
||||
| B.java:108:12:108:12 | this : new Consumer<String>(...) { ... } [String s] : String | semmle.label | this : new Consumer<String>(...) { ... } [String s] : String |
|
||||
@@ -527,10 +520,8 @@ subpaths
|
||||
| B.java:46:13:46:14 | m1 : HashMap [<map.value>] : String | B.java:38:23:38:45 | inp : HashMap [<map.value>] : String | B.java:38:48:38:70 | out [Return] : HashMap [<map.value>] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [<map.value>] : String |
|
||||
| B.java:107:5:107:6 | l2 : ArrayList [<element>, <element>] : String | B.java:107:16:107:16 | l : ArrayList [<element>] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer<List<String>>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:16:111:6 | ...->... : new Consumer<List<String>>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer<List<String>>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:16:111:6 | ...->... : new Consumer<List<String>>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer<List<String>>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer<List<String>>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:21:107:21 | l : ArrayList [<element>] : String | B.java:107:31:107:31 | x : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out1, <element>] : String |
|
||||
| B.java:107:31:111:5 | ...->... : new Consumer<String>(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:107:31:111:5 | ...->... : new Consumer<String>(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer<String>(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer<String>(...) { ... } [List<String> out2, <element>] : String |
|
||||
| B.java:137:5:137:5 | r : new TwoRuns(...) { ... } [List<String> l1, <element>] : String | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List<String> l1, <element>] : String | B.java:130:19:130:22 | parameter this [Return] : new TwoRuns(...) { ... } [List<String> l2, <element>] : String | B.java:137:5:137:5 | r [post update] : new TwoRuns(...) { ... } [List<String> l2, <element>] : String |
|
||||
| B.java:148:17:148:29 | new MyLocal(...) [pre constructor] : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this [Return] : MyLocal [f] : String | B.java:148:17:148:29 | new MyLocal(...) : MyLocal [f] : String |
|
||||
| B.java:149:10:149:10 | m : MyLocal [f] : String | B.java:146:14:146:17 | parameter this : MyLocal [f] : String | B.java:146:30:146:35 | this.f : String | B.java:149:10:149:17 | getF(...) |
|
||||
|
||||
27
java/ql/test/library-tests/dataflow/implicit-read/A.java
Normal file
27
java/ql/test/library-tests/dataflow/implicit-read/A.java
Normal file
@@ -0,0 +1,27 @@
|
||||
public class A {
|
||||
String field;
|
||||
|
||||
static String source(String name) {
|
||||
return name;
|
||||
}
|
||||
|
||||
static void sink(Object o) {}
|
||||
|
||||
static String step(Object o) {
|
||||
return "";
|
||||
}
|
||||
|
||||
static Object getA() {
|
||||
A a = new A();
|
||||
a.field = source("source");
|
||||
return a;
|
||||
}
|
||||
|
||||
static void test() {
|
||||
Object object = getA();
|
||||
|
||||
sink(step(object)); // $ hasTaintFlow=source
|
||||
sink(object);
|
||||
sink(((A)object).field); // $ hasTaintFlow=source
|
||||
}
|
||||
}
|
||||
22
java/ql/test/library-tests/dataflow/implicit-read/test.ql
Normal file
22
java/ql/test/library-tests/dataflow/implicit-read/test.ql
Normal file
@@ -0,0 +1,22 @@
|
||||
import java
|
||||
import TestUtilities.InlineFlowTest
|
||||
|
||||
module TestConfig implements DataFlow::ConfigSig {
|
||||
predicate isSource(DataFlow::Node source) { DefaultFlowConfig::isSource(source) }
|
||||
|
||||
predicate isSink(DataFlow::Node sink) { DefaultFlowConfig::isSink(sink) }
|
||||
|
||||
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
exists(MethodCall call |
|
||||
call.getMethod().getName() = "step" and
|
||||
node1.asExpr() = call.getArgument(0) and
|
||||
node2.asExpr() = call
|
||||
)
|
||||
}
|
||||
|
||||
predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet content) {
|
||||
isAdditionalFlowStep(node, _) and content instanceof DataFlow::FieldContent
|
||||
}
|
||||
}
|
||||
|
||||
import TaintFlowTest<TestConfig>
|
||||
@@ -1663,7 +1663,6 @@ edges
|
||||
| Test.java:257:91:257:97 | element : String | Test.java:257:73:257:98 | of(...) : FluentIterable [<element>] : String | provenance | MaD:469 |
|
||||
| Test.java:258:49:258:57 | element : String | Test.java:258:110:258:116 | element : String | provenance | |
|
||||
| Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | provenance | |
|
||||
| Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | provenance | |
|
||||
| Test.java:258:110:258:116 | element : String | Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | provenance | MaD:2 |
|
||||
| Test.java:258:110:258:116 | element : String | Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | provenance | MaD:673 |
|
||||
| Test.java:259:49:259:57 | element : String | Test.java:259:90:259:96 | element : String | provenance | |
|
||||
@@ -1683,17 +1682,13 @@ edges
|
||||
| Test.java:261:77:261:83 | element : String | Test.java:261:61:261:93 | new MultiKey<T>(...) : MultiKey [<element>] : String | provenance | MaD:215 |
|
||||
| Test.java:262:52:262:60 | element : String | Test.java:262:106:262:112 | element : String | provenance | |
|
||||
| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | provenance | MaD:674 |
|
||||
| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | provenance | MaD:674 |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:230:19:230:32 | it : Set [<element>, <element>] : String | provenance | |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:230:19:230:32 | it : Set [<element>, <element>] : String | provenance | |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | provenance | MaD:1 |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | provenance | MaD:1 |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | provenance | MaD:2 |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | provenance | MaD:673 |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | provenance | |
|
||||
| Test.java:263:41:263:49 | element : String | Test.java:263:102:263:108 | element : String | provenance | |
|
||||
| Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | provenance | |
|
||||
| Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | provenance | |
|
||||
| Test.java:263:102:263:108 | element : String | Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | provenance | MaD:2 |
|
||||
| Test.java:263:102:263:108 | element : String | Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | provenance | MaD:673 |
|
||||
| Test.java:264:80:264:88 | element : String | Test.java:264:177:264:183 | element : String | provenance | |
|
||||
@@ -1708,8 +1703,6 @@ edges
|
||||
| Test.java:267:39:267:47 | element : ListIterator [<element>] : String | Test.java:267:90:267:96 | element : ListIterator [<element>] : String | provenance | |
|
||||
| Test.java:267:39:267:47 | element : String | Test.java:267:90:267:96 | element : String | provenance | |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | provenance | |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | provenance | |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | provenance | |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | provenance | |
|
||||
| Test.java:267:90:267:96 | element : ListIterator [<element>] : String | Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | provenance | MaD:2 |
|
||||
| Test.java:267:90:267:96 | element : ListIterator [<element>] : String | Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | provenance | MaD:395 |
|
||||
@@ -1734,7 +1727,6 @@ edges
|
||||
| Test.java:274:114:274:116 | key : String | Test.java:274:107:274:123 | of(...) : Map [<map.key>] : String | provenance | MaD:11 |
|
||||
| Test.java:275:49:275:53 | key : String | Test.java:275:107:275:109 | key : String | provenance | |
|
||||
| Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | provenance | |
|
||||
| Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | provenance | |
|
||||
| Test.java:275:107:275:109 | key : String | Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | provenance | MaD:14 |
|
||||
| Test.java:275:107:275:109 | key : String | Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | provenance | MaD:705 |
|
||||
| Test.java:276:49:276:53 | key : String | Test.java:276:96:276:98 | key : String | provenance | |
|
||||
@@ -1748,8 +1740,6 @@ edges
|
||||
| Test.java:277:122:277:124 | key : String | Test.java:277:115:277:131 | of(...) : Map [<map.key>] : String | provenance | MaD:11 |
|
||||
| Test.java:279:47:279:51 | key : String | Test.java:279:113:279:115 | key : String | provenance | |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | provenance | |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | provenance | |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | provenance | |
|
||||
| Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | provenance | MaD:14 |
|
||||
| Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | provenance | MaD:661 |
|
||||
| Test.java:279:113:279:115 | key : String | Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | provenance | MaD:705 |
|
||||
@@ -1766,11 +1756,9 @@ edges
|
||||
| Test.java:282:102:282:104 | key : String | Test.java:7043:22:7043:26 | key : String | provenance | |
|
||||
| Test.java:283:53:283:57 | key : String | Test.java:283:111:283:113 | key : String | provenance | |
|
||||
| Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | provenance | |
|
||||
| Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | provenance | |
|
||||
| Test.java:283:111:283:113 | key : String | Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | provenance | MaD:14 |
|
||||
| Test.java:283:111:283:113 | key : String | Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | provenance | MaD:705 |
|
||||
| Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | provenance | MaD:487 |
|
||||
| Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | provenance | MaD:487 |
|
||||
| Test.java:285:47:285:51 | key : String | Test.java:285:103:285:105 | key : String | provenance | |
|
||||
| Test.java:285:97:285:97 | m [post update] : TreeMap [<map.key>] : String | Test.java:285:121:285:121 | m : TreeMap [<map.key>] : String | provenance | |
|
||||
| Test.java:285:103:285:105 | key : String | Test.java:285:97:285:97 | m [post update] : TreeMap [<map.key>] : String | provenance | MaD:14 |
|
||||
@@ -1778,12 +1766,10 @@ edges
|
||||
| Test.java:286:113:286:115 | key : String | Test.java:286:62:286:116 | new TiedMapEntry<K,String>(...) : TiedMapEntry [<map.key>] : String | provenance | MaD:234 |
|
||||
| Test.java:287:75:287:79 | key : String | Test.java:287:137:287:139 | key : String | provenance | |
|
||||
| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | provenance | |
|
||||
| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | provenance | |
|
||||
| Test.java:287:137:287:139 | key : String | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | provenance | MaD:14 |
|
||||
| Test.java:287:137:287:139 | key : String | Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | provenance | MaD:705 |
|
||||
| Test.java:288:49:288:58 | key : String | Test.java:288:116:288:118 | key : String | provenance | |
|
||||
| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | provenance | |
|
||||
| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | provenance | |
|
||||
| Test.java:288:116:288:118 | key : String | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | provenance | MaD:14 |
|
||||
| Test.java:288:116:288:118 | key : String | Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | provenance | MaD:705 |
|
||||
| Test.java:290:60:290:66 | value : String | Test.java:290:151:290:155 | value : String | provenance | |
|
||||
@@ -1796,7 +1782,6 @@ edges
|
||||
| Test.java:292:124:292:128 | value : String | Test.java:292:111:292:129 | of(...) : Map [<map.value>] : String | provenance | MaD:12 |
|
||||
| Test.java:293:51:293:57 | value : String | Test.java:293:116:293:120 | value : String | provenance | |
|
||||
| Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | provenance | |
|
||||
| Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | provenance | |
|
||||
| Test.java:293:116:293:120 | value : String | Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:293:116:293:120 | value : String | Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | provenance | MaD:706 |
|
||||
| Test.java:294:58:294:64 | value : String | Test.java:294:145:294:149 | value : String | provenance | |
|
||||
@@ -1817,7 +1802,6 @@ edges
|
||||
| Test.java:298:49:298:55 | value : String | Test.java:298:122:298:126 | value : String | provenance | |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>, <element>] : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | provenance | |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | provenance | |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | provenance | |
|
||||
| Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>, <element>] : String | provenance | MaD:662 |
|
||||
| Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:298:122:298:126 | value : String | Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | provenance | MaD:706 |
|
||||
@@ -1834,11 +1818,9 @@ edges
|
||||
| Test.java:301:145:301:149 | value : String | Test.java:301:125:301:150 | newMAMEWithMapValue(...) : MyAbstractMapEntry [<map.value>] : String | provenance | MaD:196 |
|
||||
| Test.java:302:54:302:60 | value : String | Test.java:302:119:302:123 | value : String | provenance | |
|
||||
| Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | provenance | |
|
||||
| Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | provenance | |
|
||||
| Test.java:302:119:302:123 | value : String | Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:302:119:302:123 | value : String | Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | provenance | MaD:706 |
|
||||
| Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | provenance | MaD:488 |
|
||||
| Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | provenance | MaD:488 |
|
||||
| Test.java:304:49:304:55 | value : Map | Test.java:304:112:304:116 | value : Map | provenance | |
|
||||
| Test.java:304:49:304:55 | value : String | Test.java:304:112:304:116 | value : String | provenance | |
|
||||
| Test.java:304:101:304:101 | m [post update] : TreeMap [<map.value>] : Map | Test.java:304:127:304:127 | m : TreeMap [<map.value>] : Map | provenance | |
|
||||
@@ -1851,12 +1833,10 @@ edges
|
||||
| Test.java:305:116:305:120 | value : String | Test.java:305:93:305:121 | newTreeMapWithMapValue(...) : TreeMap [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:306:77:306:83 | value : String | Test.java:306:146:306:150 | value : String | provenance | |
|
||||
| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | provenance | |
|
||||
| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | provenance | |
|
||||
| Test.java:306:146:306:150 | value : String | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:306:146:306:150 | value : String | Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | provenance | MaD:706 |
|
||||
| Test.java:307:50:307:56 | value : String | Test.java:307:114:307:118 | value : String | provenance | |
|
||||
| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | provenance | |
|
||||
| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | provenance | |
|
||||
| Test.java:307:114:307:118 | value : String | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | provenance | MaD:15 |
|
||||
| Test.java:307:114:307:118 | value : String | Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | provenance | MaD:706 |
|
||||
| Test.java:308:56:308:62 | value : String | Test.java:308:114:308:118 | value : String | provenance | |
|
||||
@@ -10555,7 +10535,6 @@ nodes
|
||||
| Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [<map.key>] : String | semmle.label | container : MyAbstractMapEntryDecorator [<map.key>] : String |
|
||||
| Test.java:239:69:239:77 | container : MyAbstractMapEntryDecorator [<map.key>] : String | semmle.label | container : MyAbstractMapEntryDecorator [<map.key>] : String |
|
||||
| Test.java:239:69:239:86 | getKey(...) : String | semmle.label | getKey(...) : String |
|
||||
| Test.java:239:69:239:86 | getKey(...) : String | semmle.label | getKey(...) : String |
|
||||
| Test.java:240:18:240:46 | container : ArrayListValuedHashMap [<map.key>] : String | semmle.label | container : ArrayListValuedHashMap [<map.key>] : String |
|
||||
| Test.java:240:18:240:46 | container : HashSetValuedHashMap [<map.key>] : String | semmle.label | container : HashSetValuedHashMap [<map.key>] : String |
|
||||
| Test.java:240:18:240:46 | container : MultiValuedMap [<map.key>] : Object | semmle.label | container : MultiValuedMap [<map.key>] : Object |
|
||||
@@ -10641,7 +10620,6 @@ nodes
|
||||
| Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [<map.value>] : String | semmle.label | container : MyAbstractMapEntryDecorator [<map.value>] : String |
|
||||
| Test.java:245:71:245:79 | container : MyAbstractMapEntryDecorator [<map.value>] : String | semmle.label | container : MyAbstractMapEntryDecorator [<map.value>] : String |
|
||||
| Test.java:245:71:245:90 | getValue(...) : String | semmle.label | getValue(...) : String |
|
||||
| Test.java:245:71:245:90 | getValue(...) : String | semmle.label | getValue(...) : String |
|
||||
| Test.java:246:20:246:47 | mapIterator : EntrySetToMapIteratorAdapter [<map.value>] : String | semmle.label | mapIterator : EntrySetToMapIteratorAdapter [<map.value>] : String |
|
||||
| Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : Object | semmle.label | mapIterator : MapIterator [<map.value>] : Object |
|
||||
| Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : String | semmle.label | mapIterator : MapIterator [<map.value>] : String |
|
||||
@@ -10732,10 +10710,8 @@ nodes
|
||||
| Test.java:257:91:257:97 | element : String | semmle.label | element : String |
|
||||
| Test.java:258:49:258:57 | element : String | semmle.label | element : String |
|
||||
| Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | semmle.label | x [post update] : HashMultiSet [<element>] : String |
|
||||
| Test.java:258:104:258:104 | x [post update] : HashMultiSet [<element>] : String | semmle.label | x [post update] : HashMultiSet [<element>] : String |
|
||||
| Test.java:258:110:258:116 | element : String | semmle.label | element : String |
|
||||
| Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | semmle.label | x : HashMultiSet [<element>] : String |
|
||||
| Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | semmle.label | x : HashMultiSet [<element>] : String |
|
||||
| Test.java:259:49:259:57 | element : String | semmle.label | element : String |
|
||||
| Test.java:259:69:259:97 | newVectorWithElement(...) : Vector [<element>] : String | semmle.label | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | semmle.label | listIterator(...) : ListIterator [<element>] : String |
|
||||
@@ -10757,18 +10733,13 @@ nodes
|
||||
| Test.java:261:77:261:83 | element : String | semmle.label | element : String |
|
||||
| Test.java:262:52:262:60 | element : String | semmle.label | element : String |
|
||||
| Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | semmle.label | getElement(...) : Entry [<element>] : String |
|
||||
| Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | semmle.label | getElement(...) : Entry [<element>] : String |
|
||||
| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | semmle.label | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String | semmle.label | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | semmle.label | entrySet(...) : Set [<element>, <element>] : String |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | semmle.label | entrySet(...) : Set [<element>, <element>] : String |
|
||||
| Test.java:262:106:262:112 | element : String | semmle.label | element : String |
|
||||
| Test.java:263:41:263:49 | element : String | semmle.label | element : String |
|
||||
| Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | semmle.label | h [post update] : HashMultiSet [<element>] : String |
|
||||
| Test.java:263:96:263:96 | h [post update] : HashMultiSet [<element>] : String | semmle.label | h [post update] : HashMultiSet [<element>] : String |
|
||||
| Test.java:263:102:263:108 | element : String | semmle.label | element : String |
|
||||
| Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | semmle.label | h : HashMultiSet [<element>] : String |
|
||||
| Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | semmle.label | h : HashMultiSet [<element>] : String |
|
||||
| Test.java:264:80:264:88 | element : String | semmle.label | element : String |
|
||||
| Test.java:264:171:264:171 | x [post update] : Builder [<element>] : String | semmle.label | x [post update] : Builder [<element>] : String |
|
||||
| Test.java:264:177:264:183 | element : String | semmle.label | element : String |
|
||||
@@ -10784,14 +10755,10 @@ nodes
|
||||
| Test.java:267:39:267:47 | element : ListIterator [<element>] : String | semmle.label | element : ListIterator [<element>] : String |
|
||||
| Test.java:267:39:267:47 | element : String | semmle.label | element : String |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | semmle.label | b [post update] : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>, <element>] : String | semmle.label | b [post update] : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>] : String | semmle.label | b [post update] : TreeBag [<element>] : String |
|
||||
| Test.java:267:84:267:84 | b [post update] : TreeBag [<element>] : String | semmle.label | b [post update] : TreeBag [<element>] : String |
|
||||
| Test.java:267:90:267:96 | element : ListIterator [<element>] : String | semmle.label | element : ListIterator [<element>] : String |
|
||||
| Test.java:267:90:267:96 | element : String | semmle.label | element : String |
|
||||
| Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | semmle.label | b : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | semmle.label | b : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:267:107:267:107 | b : TreeBag [<element>] : String | semmle.label | b : TreeBag [<element>] : String |
|
||||
| Test.java:267:107:267:107 | b : TreeBag [<element>] : String | semmle.label | b : TreeBag [<element>] : String |
|
||||
| Test.java:268:39:268:47 | element : String | semmle.label | element : String |
|
||||
| Test.java:268:84:268:84 | h [post update] : TreeSet [<element>] : String | semmle.label | h [post update] : TreeSet [<element>] : String |
|
||||
@@ -10818,10 +10785,8 @@ nodes
|
||||
| Test.java:274:114:274:116 | key : String | semmle.label | key : String |
|
||||
| Test.java:275:49:275:53 | key : String | semmle.label | key : String |
|
||||
| Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | semmle.label | m [post update] : HashedMap [<map.key>] : String |
|
||||
| Test.java:275:101:275:101 | m [post update] : HashedMap [<map.key>] : String | semmle.label | m [post update] : HashedMap [<map.key>] : String |
|
||||
| Test.java:275:107:275:109 | key : String | semmle.label | key : String |
|
||||
| Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | semmle.label | m : HashedMap [<map.key>] : String |
|
||||
| Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | semmle.label | m : HashedMap [<map.key>] : String |
|
||||
| Test.java:276:49:276:53 | key : String | semmle.label | key : String |
|
||||
| Test.java:276:65:276:106 | new LinkedMap<K,String>(...) : LinkedMap [<map.key>] : String | semmle.label | new LinkedMap<K,String>(...) : LinkedMap [<map.key>] : String |
|
||||
| Test.java:276:89:276:105 | of(...) : Map [<map.key>] : String | semmle.label | of(...) : Map [<map.key>] : String |
|
||||
@@ -10836,12 +10801,8 @@ nodes
|
||||
| Test.java:277:122:277:124 | key : String | semmle.label | key : String |
|
||||
| Test.java:279:47:279:51 | key : String | semmle.label | key : String |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | semmle.label | m [post update] : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | semmle.label | m [post update] : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:279:107:279:107 | m [post update] : MultiValueMap [<map.key>] : String | semmle.label | m [post update] : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:279:113:279:115 | key : String | semmle.label | key : String |
|
||||
| Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | semmle.label | m : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | semmle.label | m : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | semmle.label | m : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:280:53:280:57 | key : String | semmle.label | key : String |
|
||||
| Test.java:280:69:280:110 | new MyAbstractMapEntry<K,String>(...) : MyAbstractMapEntry [<map.key>] : String | semmle.label | new MyAbstractMapEntry<K,String>(...) : MyAbstractMapEntry [<map.key>] : String |
|
||||
| Test.java:280:102:280:104 | key : String | semmle.label | key : String |
|
||||
@@ -10854,11 +10815,8 @@ nodes
|
||||
| Test.java:282:102:282:104 | key : String | semmle.label | key : String |
|
||||
| Test.java:283:53:283:57 | key : String | semmle.label | key : String |
|
||||
| Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | semmle.label | m [post update] : LinkedMap [<map.key>] : String |
|
||||
| Test.java:283:105:283:105 | m [post update] : LinkedMap [<map.key>] : String | semmle.label | m [post update] : LinkedMap [<map.key>] : String |
|
||||
| Test.java:283:111:283:113 | key : String | semmle.label | key : String |
|
||||
| Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | semmle.label | m : LinkedMap [<map.key>] : String |
|
||||
| Test.java:283:129:283:129 | m : LinkedMap [<map.key>] : String | semmle.label | m : LinkedMap [<map.key>] : String |
|
||||
| Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | semmle.label | mapIterator(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | semmle.label | mapIterator(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:285:47:285:51 | key : String | semmle.label | key : String |
|
||||
| Test.java:285:97:285:97 | m [post update] : TreeMap [<map.key>] : String | semmle.label | m [post update] : TreeMap [<map.key>] : String |
|
||||
@@ -10869,16 +10827,12 @@ nodes
|
||||
| Test.java:286:113:286:115 | key : String | semmle.label | key : String |
|
||||
| Test.java:287:75:287:79 | key : String | semmle.label | key : String |
|
||||
| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | semmle.label | m [post update] : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:287:131:287:131 | m [post update] : TreeBidiMap [<map.key>] : String | semmle.label | m [post update] : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:287:137:287:139 | key : String | semmle.label | key : String |
|
||||
| Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | semmle.label | m : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | semmle.label | m : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:288:49:288:58 | key : String | semmle.label | key : String |
|
||||
| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | semmle.label | m [post update] : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:288:110:288:110 | m [post update] : PatriciaTrie [<map.key>] : String | semmle.label | m [post update] : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:288:116:288:118 | key : String | semmle.label | key : String |
|
||||
| Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | semmle.label | m : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | semmle.label | m : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:290:60:290:66 | value : String | semmle.label | value : String |
|
||||
| Test.java:290:140:290:140 | m [post update] : ArrayListValuedHashMap [<map.value>, <element>] : String | semmle.label | m [post update] : ArrayListValuedHashMap [<map.value>, <element>] : String |
|
||||
| Test.java:290:151:290:155 | value : String | semmle.label | value : String |
|
||||
@@ -10892,10 +10846,8 @@ nodes
|
||||
| Test.java:292:124:292:128 | value : String | semmle.label | value : String |
|
||||
| Test.java:293:51:293:57 | value : String | semmle.label | value : String |
|
||||
| Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | semmle.label | m [post update] : HashedMap [<map.value>] : String |
|
||||
| Test.java:293:105:293:105 | m [post update] : HashedMap [<map.value>] : String | semmle.label | m [post update] : HashedMap [<map.value>] : String |
|
||||
| Test.java:293:116:293:120 | value : String | semmle.label | value : String |
|
||||
| Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | semmle.label | m : HashedMap [<map.value>] : String |
|
||||
| Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | semmle.label | m : HashedMap [<map.value>] : String |
|
||||
| Test.java:294:58:294:64 | value : String | semmle.label | value : String |
|
||||
| Test.java:294:134:294:134 | m [post update] : HashSetValuedHashMap [<map.value>, <element>] : String | semmle.label | m [post update] : HashSetValuedHashMap [<map.value>, <element>] : String |
|
||||
| Test.java:294:145:294:149 | value : String | semmle.label | value : String |
|
||||
@@ -10919,11 +10871,9 @@ nodes
|
||||
| Test.java:298:49:298:55 | value : String | semmle.label | value : String |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>, <element>] : String | semmle.label | m [post update] : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | semmle.label | m [post update] : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:298:111:298:111 | m [post update] : MultiValueMap [<map.value>] : String | semmle.label | m [post update] : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:298:122:298:126 | value : String | semmle.label | value : String |
|
||||
| Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | semmle.label | m : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | semmle.label | m : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | semmle.label | m : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:299:55:299:61 | value : String | semmle.label | value : String |
|
||||
| Test.java:299:73:299:116 | new MyAbstractKeyValue<String,V>(...) : MyAbstractKeyValue [<map.value>] : String | semmle.label | new MyAbstractKeyValue<String,V>(...) : MyAbstractKeyValue [<map.value>] : String |
|
||||
| Test.java:299:111:299:115 | value : String | semmle.label | value : String |
|
||||
@@ -10936,11 +10886,8 @@ nodes
|
||||
| Test.java:301:145:301:149 | value : String | semmle.label | value : String |
|
||||
| Test.java:302:54:302:60 | value : String | semmle.label | value : String |
|
||||
| Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | semmle.label | m [post update] : LinkedMap [<map.value>] : String |
|
||||
| Test.java:302:108:302:108 | m [post update] : LinkedMap [<map.value>] : String | semmle.label | m [post update] : LinkedMap [<map.value>] : String |
|
||||
| Test.java:302:119:302:123 | value : String | semmle.label | value : String |
|
||||
| Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | semmle.label | m : LinkedMap [<map.value>] : String |
|
||||
| Test.java:302:134:302:134 | m : LinkedMap [<map.value>] : String | semmle.label | m : LinkedMap [<map.value>] : String |
|
||||
| Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | semmle.label | mapIterator(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | semmle.label | mapIterator(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:304:49:304:55 | value : Map | semmle.label | value : Map |
|
||||
| Test.java:304:49:304:55 | value : String | semmle.label | value : String |
|
||||
@@ -10956,16 +10903,12 @@ nodes
|
||||
| Test.java:305:116:305:120 | value : String | semmle.label | value : String |
|
||||
| Test.java:306:77:306:83 | value : String | semmle.label | value : String |
|
||||
| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | semmle.label | m [post update] : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:306:135:306:135 | m [post update] : TreeBidiMap [<map.value>] : String | semmle.label | m [post update] : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:306:146:306:150 | value : String | semmle.label | value : String |
|
||||
| Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | semmle.label | m : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | semmle.label | m : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:307:50:307:56 | value : String | semmle.label | value : String |
|
||||
| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | semmle.label | m [post update] : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:307:103:307:103 | m [post update] : PatriciaTrie [<map.value>] : String | semmle.label | m [post update] : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:307:114:307:118 | value : String | semmle.label | value : String |
|
||||
| Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | semmle.label | m : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | semmle.label | m : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:308:56:308:62 | value : String | semmle.label | value : String |
|
||||
| Test.java:308:74:308:119 | new UnmodifiableMapEntry<String,V>(...) : UnmodifiableMapEntry [<map.value>] : String | semmle.label | new UnmodifiableMapEntry<String,V>(...) : UnmodifiableMapEntry [<map.value>] : String |
|
||||
| Test.java:308:114:308:118 | value : String | semmle.label | value : String |
|
||||
@@ -17799,10 +17742,6 @@ subpaths
|
||||
| Test.java:256:115:256:121 | element : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:256:94:256:122 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:259:90:259:96 | element : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:259:69:259:97 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:230:19:230:32 | it : Set [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String |
|
||||
| Test.java:262:83:262:124 | entrySet(...) : Set [<element>, <element>] : String | Test.java:230:19:230:32 | it : Set [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:280:102:280:104 | key : String | Test.java:7057:22:7057:32 | key : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [<map.key>] : String | Test.java:280:69:280:110 | new MyAbstractMapEntry<K,String>(...) : MyAbstractMapEntry [<map.key>] : String |
|
||||
| Test.java:281:121:281:142 | newMAMEWithMapKey(...) : MyAbstractMapEntry [<map.key>] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [<map.key>] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator<K,String>(...) : MyAbstractMapEntryDecorator [<map.key>] : String |
|
||||
@@ -17843,11 +17782,9 @@ subpaths
|
||||
| Test.java:444:52:444:67 | (...)... : String | Test.java:280:53:280:57 | key : String | Test.java:280:69:280:110 | new MyAbstractMapEntry<K,String>(...) : MyAbstractMapEntry [<map.key>] : String | Test.java:444:34:444:68 | newMAMEWithMapKey(...) : MyAbstractMapEntry [<map.key>] : String |
|
||||
| Test.java:445:42:445:43 | in : MyAbstractMapEntry [<map.key>] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [<map.key>] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:445:10:445:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [<map.key>] : String |
|
||||
| Test.java:446:19:446:21 | out : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:239:69:239:86 | getKey(...) : String | Test.java:446:9:446:22 | getMapKey(...) |
|
||||
| Test.java:446:19:446:21 | out : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:239:69:239:86 | getKey(...) : String | Test.java:446:9:446:22 | getMapKey(...) |
|
||||
| Test.java:451:54:451:69 | (...)... : String | Test.java:300:55:300:61 | value : String | Test.java:300:73:300:116 | new MyAbstractMapEntry<String,V>(...) : MyAbstractMapEntry [<map.value>] : String | Test.java:451:34:451:70 | newMAMEWithMapValue(...) : MyAbstractMapEntry [<map.value>] : String |
|
||||
| Test.java:452:42:452:43 | in : MyAbstractMapEntry [<map.value>] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [<map.value>] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [<map.value>] : String | Test.java:452:10:452:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [<map.value>] : String |
|
||||
| Test.java:453:21:453:23 | out : MyAbstractMapEntryDecorator [<map.value>] : String | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [<map.value>] : String | Test.java:245:71:245:90 | getValue(...) : String | Test.java:453:9:453:24 | getMapValue(...) |
|
||||
| Test.java:453:21:453:23 | out : MyAbstractMapEntryDecorator [<map.value>] : String | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [<map.value>] : String | Test.java:245:71:245:90 | getValue(...) : String | Test.java:453:9:453:24 | getMapValue(...) |
|
||||
| Test.java:458:56:458:71 | (...)... : String | Test.java:281:63:281:67 | key : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator<K,String>(...) : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:458:37:458:72 | newMAMEDWithMapKey(...) : MyAbstractMapEntryDecorator [<map.key>] : String |
|
||||
| Test.java:459:10:459:11 | in : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:7071:19:7071:31 | parameter this : MyAbstractMapEntryDecorator [<map.key>] : String | Test.java:7072:11:7072:29 | getMapEntry(...) : Entry [<map.key>] : String | Test.java:459:10:459:27 | myGetMapEntry(...) : Entry [<map.key>] : String |
|
||||
| Test.java:460:28:460:30 | out : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:460:9:460:31 | getMapKeyFromEntry(...) |
|
||||
@@ -18041,45 +17978,31 @@ subpaths
|
||||
| Test.java:1212:20:1212:22 | out : Bag [<element>] : Object | Test.java:230:19:230:32 | it : Bag [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:1212:9:1212:23 | getElement(...) |
|
||||
| Test.java:1219:20:1219:22 | out : Bag [<element>] : Object | Test.java:230:19:230:32 | it : Bag [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:1219:9:1219:23 | getElement(...) |
|
||||
| Test.java:1224:35:1224:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1224:13:1224:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1224:35:1224:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1224:13:1224:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1226:20:1226:22 | out : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1226:9:1226:23 | getElement(...) |
|
||||
| Test.java:1231:35:1231:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1231:13:1231:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1231:35:1231:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1231:13:1231:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1233:20:1233:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1233:9:1233:23 | getElement(...) |
|
||||
| Test.java:1238:35:1238:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1238:13:1238:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1238:35:1238:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1238:13:1238:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1240:20:1240:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1240:9:1240:23 | getElement(...) |
|
||||
| Test.java:1245:41:1245:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1245:19:1245:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1245:41:1245:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1245:19:1245:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1247:20:1247:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1247:9:1247:23 | getElement(...) |
|
||||
| Test.java:1252:35:1252:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1252:13:1252:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1252:35:1252:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1252:13:1252:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1254:20:1254:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1254:9:1254:23 | getElement(...) |
|
||||
| Test.java:1259:41:1259:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1259:19:1259:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1259:41:1259:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1259:19:1259:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1261:20:1261:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1261:9:1261:23 | getElement(...) |
|
||||
| Test.java:1266:35:1266:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1266:13:1266:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1266:35:1266:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1266:13:1266:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1268:20:1268:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1268:9:1268:23 | getElement(...) |
|
||||
| Test.java:1273:41:1273:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1273:19:1273:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1273:41:1273:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1273:19:1273:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1275:20:1275:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1275:9:1275:23 | getElement(...) |
|
||||
| Test.java:1280:35:1280:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1280:13:1280:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1280:35:1280:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1280:13:1280:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1282:20:1282:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1282:9:1282:23 | getElement(...) |
|
||||
| Test.java:1287:41:1287:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1287:19:1287:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1287:41:1287:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:1287:19:1287:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:1289:20:1289:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1289:9:1289:23 | getElement(...) |
|
||||
| Test.java:1294:42:1294:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1294:17:1294:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1294:42:1294:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1294:17:1294:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1301:42:1301:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1301:17:1301:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1301:42:1301:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1301:17:1301:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1303:21:1303:23 | out : BidiMap [<map.value>] : String | Test.java:232:20:232:31 | map : BidiMap [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:1303:9:1303:24 | getMapValue(...) |
|
||||
| Test.java:1308:44:1308:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:1308:17:1308:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:1308:44:1308:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:1308:17:1308:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:1310:19:1310:21 | out : BidiMap [<map.key>] : String | Test.java:228:18:228:29 | map : BidiMap [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:1310:9:1310:22 | getMapKey(...) |
|
||||
| Test.java:1315:42:1315:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1315:17:1315:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1315:42:1315:57 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:1315:17:1315:58 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:1322:47:1322:62 | (...)... : String | Test.java:256:47:256:55 | element : String | Test.java:256:67:256:134 | new IteratorEnumeration<T>(...) : IteratorEnumeration [<element>] : String | Test.java:1322:21:1322:63 | newEnumerationWithElement(...) : IteratorEnumeration [<element>] : String |
|
||||
| Test.java:1324:20:1324:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1324:9:1324:23 | getElement(...) |
|
||||
| Test.java:1329:39:1329:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:1329:18:1329:55 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
@@ -18230,87 +18153,58 @@ subpaths
|
||||
| Test.java:1908:39:1908:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:1908:18:1908:55 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:1911:20:1911:22 | out : FluentIterable [<element>] : String | Test.java:230:19:230:32 | it : FluentIterable [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1911:9:1911:23 | getElement(...) |
|
||||
| Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1916:40:1916:55 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1916:23:1916:56 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1918:28:1918:42 | getElement(...) : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1918:9:1918:43 | getMapKeyFromEntry(...) |
|
||||
| Test.java:1918:39:1918:41 | out : Set [<element>, <map.key>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.key>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.key>] : String | Test.java:1918:28:1918:42 | getElement(...) : Entry [<map.key>] : String |
|
||||
| Test.java:1923:39:1923:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:1923:13:1923:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:1923:39:1923:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:1923:13:1923:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:1925:28:1925:42 | getElement(...) : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1925:9:1925:43 | getMapKeyFromEntry(...) |
|
||||
| Test.java:1925:39:1925:41 | out : Set [<element>, <map.key>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.key>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.key>] : String | Test.java:1925:28:1925:42 | getElement(...) : Entry [<map.key>] : String |
|
||||
| Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1930:47:1930:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1930:30:1930:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1932:28:1932:42 | getElement(...) : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:1932:9:1932:43 | getMapKeyFromEntry(...) |
|
||||
| Test.java:1932:39:1932:41 | out : Set [<element>, <map.key>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.key>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.key>] : String | Test.java:1932:28:1932:42 | getElement(...) : Entry [<map.key>] : String |
|
||||
| Test.java:1937:42:1937:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1937:23:1937:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1937:42:1937:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1937:23:1937:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1939:30:1939:44 | getElement(...) : Entry [<map.value>] : String | Test.java:244:29:244:52 | container : Entry [<map.value>] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1939:9:1939:45 | getMapValueFromEntry(...) |
|
||||
| Test.java:1939:41:1939:43 | out : Set [<element>, <map.value>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.value>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.value>] : String | Test.java:1939:30:1939:44 | getElement(...) : Entry [<map.value>] : String |
|
||||
| Test.java:1944:41:1944:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:1944:13:1944:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:1944:41:1944:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:1944:13:1944:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:1946:30:1946:44 | getElement(...) : Entry [<map.value>] : String | Test.java:244:29:244:52 | container : Entry [<map.value>] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1946:9:1946:45 | getMapValueFromEntry(...) |
|
||||
| Test.java:1946:41:1946:43 | out : Set [<element>, <map.value>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.value>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.value>] : String | Test.java:1946:30:1946:44 | getElement(...) : Entry [<map.value>] : String |
|
||||
| Test.java:1951:49:1951:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1951:30:1951:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1951:49:1951:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1951:30:1951:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1953:30:1953:44 | getElement(...) : Entry [<map.value>] : String | Test.java:244:29:244:52 | container : Entry [<map.value>] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:1953:9:1953:45 | getMapValueFromEntry(...) |
|
||||
| Test.java:1953:41:1953:43 | out : Set [<element>, <map.value>] : String | Test.java:230:19:230:32 | it : Set [<element>, <map.value>] : String | Test.java:230:44:230:63 | next(...) : Object [<map.value>] : String | Test.java:1953:30:1953:44 | getElement(...) : Entry [<map.value>] : String |
|
||||
| Test.java:1958:37:1958:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1958:18:1958:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1958:37:1958:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1958:18:1958:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1965:41:1965:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:1965:13:1965:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:1965:41:1965:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:1965:13:1965:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:1972:49:1972:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1972:30:1972:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1972:49:1972:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1972:30:1972:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1979:39:1979:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:1979:13:1979:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:1979:39:1979:54 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:1979:13:1979:55 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:1981:20:1981:22 | out : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1981:9:1981:23 | getElement(...) |
|
||||
| Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1986:47:1986:62 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:1986:30:1986:63 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:1988:20:1988:22 | out : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:1988:9:1988:23 | getElement(...) |
|
||||
| Test.java:1993:37:1993:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1993:18:1993:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:1993:37:1993:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:1993:18:1993:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2000:41:2000:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:2000:13:2000:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:2000:41:2000:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:2000:13:2000:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:2007:49:2007:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2007:30:2007:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2007:49:2007:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2007:30:2007:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2014:44:2014:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:2014:17:2014:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:2014:44:2014:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:2014:17:2014:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:2016:20:2016:22 | out : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2016:9:2016:23 | getElement(...) |
|
||||
| Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2021:42:2021:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2021:23:2021:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2023:20:2023:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:2023:9:2023:23 | getElement(...) |
|
||||
| Test.java:2023:20:2023:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2023:9:2023:23 | getElement(...) |
|
||||
| Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2028:37:2028:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2028:18:2028:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2030:20:2030:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:2030:9:2030:23 | getElement(...) |
|
||||
| Test.java:2030:20:2030:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2030:9:2030:23 | getElement(...) |
|
||||
| Test.java:2035:41:2035:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:2035:13:2035:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:2035:41:2035:56 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:2035:13:2035:57 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:2037:20:2037:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2037:9:2037:23 | getElement(...) |
|
||||
| Test.java:2042:49:2042:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2042:30:2042:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2042:49:2042:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2042:30:2042:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2044:20:2044:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2044:9:2044:23 | getElement(...) |
|
||||
| Test.java:2049:45:2049:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:2049:20:2049:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:2049:45:2049:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:2049:20:2049:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:2051:20:2051:22 | out : OrderedMapIterator [<element>] : String | Test.java:231:19:231:32 | it : OrderedMapIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2051:9:2051:23 | getElement(...) |
|
||||
| Test.java:2056:44:2056:59 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:2056:21:2056:60 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:2056:44:2056:59 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:2056:21:2056:60 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:2058:20:2058:22 | out : MapIterator [<element>] : String | Test.java:231:19:231:32 | it : MapIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2058:9:2058:23 | getElement(...) |
|
||||
| Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:2063:46:2063:61 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:2063:29:2063:62 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:2065:20:2065:22 | out : MapIterator [<element>] : String | Test.java:231:19:231:32 | it : MapIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2065:9:2065:23 | getElement(...) |
|
||||
| Test.java:2070:47:2070:62 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:2070:20:2070:63 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:2070:47:2070:62 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:2070:20:2070:63 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:2072:21:2072:23 | out : OrderedMapIterator [<map.value>] : String | Test.java:246:20:246:47 | mapIterator : OrderedMapIterator [<map.value>] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2072:9:2072:24 | getMapValue(...) |
|
||||
| Test.java:2077:46:2077:61 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:2077:21:2077:62 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:2077:46:2077:61 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:2077:21:2077:62 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:2079:21:2079:23 | out : MapIterator [<map.value>] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2079:9:2079:24 | getMapValue(...) |
|
||||
| Test.java:2084:48:2084:63 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2084:29:2084:64 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2084:48:2084:63 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:2084:29:2084:64 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:2086:21:2086:23 | out : MapIterator [<map.value>] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2086:9:2086:24 | getMapValue(...) |
|
||||
| Test.java:2091:39:2091:54 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:2091:18:2091:55 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:2093:20:2093:22 | out : Iterable [<element>] : String | Test.java:230:19:230:32 | it : Iterable [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2093:9:2093:23 | getElement(...) |
|
||||
@@ -18473,10 +18367,8 @@ subpaths
|
||||
| Test.java:2721:49:2721:64 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:2721:22:2721:65 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:2723:20:2723:22 | out : ListIterator [<element>] : String | Test.java:231:19:231:32 | it : ListIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2723:9:2723:23 | getElement(...) |
|
||||
| Test.java:2728:39:2728:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:2728:21:2728:55 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:2728:39:2728:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:2728:21:2728:55 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:2730:20:2730:22 | out : MapIterator [<element>] : String | Test.java:231:19:231:32 | it : MapIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2730:9:2730:23 | getElement(...) |
|
||||
| Test.java:2735:40:2735:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:2735:21:2735:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:2735:40:2735:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:2735:21:2735:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:2737:21:2737:23 | out : MapIterator [<map.value>] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:2737:9:2737:24 | getMapValue(...) |
|
||||
| Test.java:2742:45:2742:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:2742:18:2742:61 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:2744:20:2744:22 | out : ZippingIterator [<element>] : String | Test.java:231:19:231:32 | it : ZippingIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:2744:9:2744:23 | getElement(...) |
|
||||
@@ -18538,15 +18430,11 @@ subpaths
|
||||
| Test.java:2973:35:2973:50 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:2973:14:2973:51 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
| Test.java:2975:20:2975:22 | out : List [<element>] : String | Test.java:230:19:230:32 | it : List [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:2975:9:2975:23 | getElement(...) |
|
||||
| Test.java:2980:39:2980:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:2980:21:2980:55 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:2980:39:2980:54 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:2980:21:2980:55 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:2987:40:2987:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:2987:21:2987:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:2987:40:2987:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:2987:21:2987:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:2996:21:2996:23 | out : MapIterator [<map.value>] : Object | Test.java:246:20:246:47 | mapIterator : MapIterator [<map.value>] : Object | Test.java:246:59:246:80 | getValue(...) : Object | Test.java:2996:9:2996:24 | getMapValue(...) |
|
||||
| Test.java:3001:40:3001:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:3001:21:3001:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:3001:40:3001:55 | (...)... : String | Test.java:302:54:302:60 | value : String | Test.java:302:134:302:148 | mapIterator(...) : OrderedMapIterator [<map.value>] : String | Test.java:3001:21:3001:56 | newOMIWithMapValue(...) : OrderedMapIterator [<map.value>] : String |
|
||||
| Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3008:37:3008:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3008:18:3008:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3010:20:3010:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3010:9:3010:23 | getElement(...) |
|
||||
| Test.java:3010:20:3010:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3010:9:3010:23 | getElement(...) |
|
||||
| Test.java:3017:19:3017:21 | out : MultiValueMap [<map.key>] : Object | Test.java:228:18:228:29 | map : MultiValueMap [<map.key>] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:3017:9:3017:22 | getMapKey(...) |
|
||||
@@ -18561,12 +18449,10 @@ subpaths
|
||||
| Test.java:3038:44:3038:46 | out : MultiMap [<map.value>] : Object | Test.java:232:20:232:31 | map : MultiMap [<map.value>] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3038:32:3038:47 | getMapValue(...) : Object |
|
||||
| Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3043:42:3043:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3043:23:3043:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3045:20:3045:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3045:9:3045:23 | getElement(...) |
|
||||
| Test.java:3045:20:3045:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3045:9:3045:23 | getElement(...) |
|
||||
| Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3050:37:3050:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3050:18:3050:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3052:20:3052:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3052:9:3052:23 | getElement(...) |
|
||||
| Test.java:3052:20:3052:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3052:9:3052:23 | getElement(...) |
|
||||
| Test.java:3064:43:3064:58 | (...)... : String | Test.java:272:58:272:62 | key : String | Test.java:272:160:272:160 | m : ArrayListValuedHashMap [<map.key>] : String | Test.java:3064:24:3064:59 | newALVHMWithMapKey(...) : ArrayListValuedHashMap [<map.key>] : String |
|
||||
@@ -18594,24 +18480,18 @@ subpaths
|
||||
| Test.java:3129:20:3129:35 | getMapValue(...) : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3129:9:3129:36 | getElement(...) |
|
||||
| Test.java:3129:32:3129:34 | out : MultiValuedMap [<map.value>, <element>] : String | Test.java:247:32:247:60 | container : MultiValuedMap [<map.value>, <element>] : String | Test.java:247:72:247:90 | get(...) : Collection [<element>] : String | Test.java:3129:20:3129:35 | getMapValue(...) : Collection [<element>] : String |
|
||||
| Test.java:3134:52:3134:67 | (...)... : String | Test.java:262:52:262:60 | element : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | Test.java:3134:24:3134:68 | newMultiSetEntryWithElement(...) : Entry [<element>] : String |
|
||||
| Test.java:3134:52:3134:67 | (...)... : String | Test.java:262:52:262:60 | element : String | Test.java:262:72:262:125 | getElement(...) : Entry [<element>] : String | Test.java:3134:24:3134:68 | newMultiSetEntryWithElement(...) : Entry [<element>] : String |
|
||||
| Test.java:3143:20:3143:22 | out : MultiSet [<element>] : Object | Test.java:230:19:230:32 | it : MultiSet [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3143:9:3143:23 | getElement(...) |
|
||||
| Test.java:3150:20:3150:22 | out : MultiSet [<element>] : Object | Test.java:230:19:230:32 | it : MultiSet [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:3150:9:3150:23 | getElement(...) |
|
||||
| Test.java:3155:41:3155:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3155:18:3155:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3155:41:3155:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3155:18:3155:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3157:20:3157:34 | getElement(...) : Entry [<element>] : String | Test.java:235:19:235:45 | container : Entry [<element>] : String | Test.java:235:57:235:78 | getElement(...) : String | Test.java:3157:9:3157:35 | getElement(...) |
|
||||
| Test.java:3157:31:3157:33 | out : Set [<element>, <element>] : String | Test.java:230:19:230:32 | it : Set [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:3157:20:3157:34 | getElement(...) : Entry [<element>] : String |
|
||||
| Test.java:3162:41:3162:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3162:18:3162:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3162:41:3162:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3162:18:3162:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3164:20:3164:22 | out : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3164:9:3164:23 | getElement(...) |
|
||||
| Test.java:3169:41:3169:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3169:18:3169:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3169:41:3169:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3169:18:3169:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3171:20:3171:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3171:9:3171:23 | getElement(...) |
|
||||
| Test.java:3176:41:3176:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3176:18:3176:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3176:41:3176:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3176:18:3176:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3178:20:3178:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3178:9:3178:23 | getElement(...) |
|
||||
| Test.java:3183:41:3183:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3183:18:3183:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3183:41:3183:56 | (...)... : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [<element>] : String | Test.java:3183:18:3183:57 | newMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:3185:20:3185:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3185:9:3185:23 | getElement(...) |
|
||||
| Test.java:3190:45:3190:60 | (...)... : String | Test.java:290:60:290:66 | value : String | Test.java:290:166:290:166 | m : ArrayListValuedHashMap [<map.value>, <element>] : String | Test.java:3190:24:3190:61 | newALVHMWithMapValue(...) : ArrayListValuedHashMap [<map.value>, <element>] : String |
|
||||
| Test.java:3192:20:3192:47 | (...)... : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3192:9:3192:48 | getElement(...) |
|
||||
@@ -18658,16 +18538,10 @@ subpaths
|
||||
| Test.java:3330:45:3330:60 | (...)... : String | Test.java:290:60:290:66 | value : String | Test.java:290:166:290:166 | m : ArrayListValuedHashMap [<map.value>, <element>] : String | Test.java:3330:24:3330:61 | newALVHMWithMapValue(...) : ArrayListValuedHashMap [<map.value>, <element>] : String |
|
||||
| Test.java:3332:20:3332:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3332:9:3332:23 | getElement(...) |
|
||||
| Test.java:3337:46:3337:61 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:3337:28:3337:62 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:3337:46:3337:61 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:3337:28:3337:62 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:3344:43:3344:58 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:3344:25:3344:59 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:3344:43:3344:58 | (...)... : String | Test.java:283:53:283:57 | key : String | Test.java:283:129:283:143 | mapIterator(...) : OrderedMapIterator [<element>] : String | Test.java:3344:25:3344:59 | newOMIWithElement(...) : OrderedMapIterator [<element>] : String |
|
||||
| Test.java:3351:45:3351:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3351:20:3351:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3351:45:3351:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3351:20:3351:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3358:45:3358:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3358:20:3358:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3358:45:3358:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3358:20:3358:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3365:45:3365:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3365:20:3365:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3365:45:3365:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3365:20:3365:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3372:45:3372:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3372:20:3372:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3372:45:3372:60 | (...)... : String | Test.java:287:75:287:79 | key : String | Test.java:287:155:287:155 | m : TreeBidiMap [<map.key>] : String | Test.java:3372:20:3372:61 | newTreeBidiMapWithMapKey(...) : TreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3381:26:3381:28 | out : Put [<map.key>] : Object | Test.java:242:27:242:44 | container : Put [<map.key>] : Object | Test.java:242:56:242:85 | getMapKey(...) : Object | Test.java:3381:9:3381:29 | getMapKeyFromPut(...) |
|
||||
| Test.java:3388:19:3388:21 | out : MultiValueMap [<map.key>] : Object | Test.java:228:18:228:29 | map : MultiValueMap [<map.key>] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:3388:9:3388:22 | getMapKey(...) |
|
||||
@@ -18680,14 +18554,9 @@ subpaths
|
||||
| Test.java:3437:21:3437:23 | out : BidiMap [<map.value>] : Object | Test.java:232:20:232:31 | map : BidiMap [<map.value>] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3437:9:3437:24 | getMapValue(...) |
|
||||
| Test.java:3444:21:3444:23 | out : AbstractMapDecorator [<map.value>] : Object | Test.java:232:20:232:31 | map : AbstractMapDecorator [<map.value>] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:3444:9:3444:24 | getMapValue(...) |
|
||||
| Test.java:3449:38:3449:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3449:13:3449:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3449:38:3449:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3449:13:3449:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3456:42:3456:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3456:23:3456:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3456:42:3456:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3456:23:3456:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3463:37:3463:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3463:18:3463:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3463:37:3463:52 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3463:18:3463:53 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3470:44:3470:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:3470:17:3470:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:3470:44:3470:59 | (...)... : String | Test.java:306:77:306:83 | value : String | Test.java:306:161:306:161 | m : TreeBidiMap [<map.value>] : String | Test.java:3470:17:3470:60 | newTreeBidiMapWithMapValue(...) : TreeBidiMap [<map.value>] : String |
|
||||
| Test.java:3477:49:3477:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3477:30:3477:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3477:49:3477:64 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:3477:30:3477:65 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:3484:34:3484:49 | (...)... : String | Test.java:285:47:285:51 | key : String | Test.java:285:121:285:121 | m : TreeMap [<map.key>] : String | Test.java:3484:13:3484:50 | newTreeMapWithMapKey(...) : TreeMap [<map.key>] : String |
|
||||
| Test.java:3486:26:3486:28 | out : Put [<map.key>] : String | Test.java:242:27:242:44 | container : Put [<map.key>] : String | Test.java:242:56:242:85 | getMapKey(...) : String | Test.java:3486:9:3486:29 | getMapKeyFromPut(...) |
|
||||
@@ -18757,35 +18626,24 @@ subpaths
|
||||
| Test.java:3722:41:3722:56 | (...)... : String | Test.java:268:39:268:47 | element : String | Test.java:268:107:268:107 | h : TreeSet [<element>] : String | Test.java:3722:19:3722:57 | newTreeSetWithElement(...) : TreeSet [<element>] : String |
|
||||
| Test.java:3724:20:3724:22 | out : SortedSet [<element>] : String | Test.java:230:19:230:32 | it : SortedSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3724:9:3724:23 | getElement(...) |
|
||||
| Test.java:3729:41:3729:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3729:19:3729:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3729:41:3729:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3729:19:3729:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3736:41:3736:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3736:19:3736:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3736:41:3736:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3736:19:3736:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3743:36:3743:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:3743:13:3743:52 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:3743:36:3743:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:3743:13:3743:52 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:3745:19:3745:21 | out : IterableMap [<map.key>] : String | Test.java:228:18:228:29 | map : IterableMap [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3745:9:3745:22 | getMapKey(...) |
|
||||
| Test.java:3750:38:3750:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3750:13:3750:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3750:38:3750:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3750:13:3750:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3752:21:3752:23 | out : IterableMap [<map.value>] : String | Test.java:232:20:232:31 | map : IterableMap [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3752:9:3752:24 | getMapValue(...) |
|
||||
| Test.java:3757:36:3757:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:3757:13:3757:52 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:3757:36:3757:51 | (...)... : String | Test.java:275:49:275:53 | key : String | Test.java:275:125:275:125 | m : HashedMap [<map.key>] : String | Test.java:3757:13:3757:52 | newHashedMapWithMapKey(...) : HashedMap [<map.key>] : String |
|
||||
| Test.java:3759:19:3759:21 | out : Map [<map.key>] : String | Test.java:228:18:228:29 | map : Map [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3759:9:3759:22 | getMapKey(...) |
|
||||
| Test.java:3764:38:3764:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3764:13:3764:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3764:38:3764:53 | (...)... : String | Test.java:293:51:293:57 | value : String | Test.java:293:131:293:131 | m : HashedMap [<map.value>] : String | Test.java:3764:13:3764:54 | newHashedMapWithMapValue(...) : HashedMap [<map.value>] : String |
|
||||
| Test.java:3766:21:3766:23 | out : Map [<map.value>] : String | Test.java:232:20:232:31 | map : Map [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3766:9:3766:24 | getMapValue(...) |
|
||||
| Test.java:3771:40:3771:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:3771:14:3771:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:3771:40:3771:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:3771:14:3771:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:3773:19:3773:21 | out : SortedMap [<map.key>] : String | Test.java:228:18:228:29 | map : SortedMap [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3773:9:3773:22 | getMapKey(...) |
|
||||
| Test.java:3778:42:3778:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:3778:14:3778:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:3778:42:3778:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:3778:14:3778:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:3780:21:3780:23 | out : SortedMap [<map.value>] : String | Test.java:232:20:232:31 | map : SortedMap [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3780:9:3780:24 | getMapValue(...) |
|
||||
| Test.java:3785:40:3785:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:3785:14:3785:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:3785:40:3785:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:3785:14:3785:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:3787:19:3787:21 | out : Trie [<map.key>] : String | Test.java:228:18:228:29 | map : Trie [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3787:9:3787:22 | getMapKey(...) |
|
||||
| Test.java:3792:42:3792:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:3792:14:3792:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:3792:42:3792:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:3792:14:3792:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:3794:21:3794:23 | out : Trie [<map.value>] : String | Test.java:232:20:232:31 | map : Trie [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3794:9:3794:24 | getMapValue(...) |
|
||||
| Test.java:3799:35:3799:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3799:13:3799:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3799:35:3799:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3799:13:3799:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3800:37:3800:38 | in : TreeBag [<element>] : String | Test.java:7104:33:7104:48 | bag : TreeBag [<element>] : String | Test.java:7104:10:7104:31 | parameter this [Return] : MyAbstractBagDecorator [<element>] : String | Test.java:3800:10:3800:39 | new MyAbstractBagDecorator<>(...) : MyAbstractBagDecorator [<element>] : String |
|
||||
| Test.java:3801:20:3801:22 | out : MyAbstractBagDecorator [<element>] : String | Test.java:230:19:230:32 | it : MyAbstractBagDecorator [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3801:9:3801:23 | getElement(...) |
|
||||
| Test.java:3807:31:3807:32 | in : Map [<map.key>] : String | Test.java:7110:27:7110:58 | map : Map [<map.key>] : String | Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [<element>] : String | Test.java:3807:10:3807:33 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [<element>] : String |
|
||||
@@ -18794,50 +18652,35 @@ subpaths
|
||||
| Test.java:3814:10:3814:11 | in : MyAbstractMapBag [<element>] : String | Test.java:7113:33:7113:40 | parameter this : MyAbstractMapBag [<element>] : String | Test.java:7114:11:7114:24 | getMap(...) : Map [<map.key>] : String | Test.java:3814:10:3814:22 | myGetMap(...) : Map [<map.key>] : String |
|
||||
| Test.java:3815:19:3815:21 | out : Map [<map.key>] : String | Test.java:228:18:228:29 | map : Map [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3815:9:3815:22 | getMapKey(...) |
|
||||
| Test.java:3820:41:3820:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3820:19:3820:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3820:41:3820:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3820:19:3820:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3821:43:3821:44 | in : TreeBag [<element>] : String | Test.java:7119:39:7119:60 | bag : TreeBag [<element>] : String | Test.java:7119:10:7119:37 | parameter this [Return] : MyAbstractSortedBagDecorator [<element>] : String | Test.java:3821:10:3821:45 | new MyAbstractSortedBagDecorator<>(...) : MyAbstractSortedBagDecorator [<element>] : String |
|
||||
| Test.java:3822:20:3822:22 | out : MyAbstractSortedBagDecorator [<element>] : String | Test.java:230:19:230:32 | it : MyAbstractSortedBagDecorator [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3822:9:3822:23 | getElement(...) |
|
||||
| Test.java:3827:35:3827:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3827:13:3827:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3827:35:3827:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3827:13:3827:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3829:20:3829:22 | out : CollectionBag [<element>] : String | Test.java:230:19:230:32 | it : CollectionBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3829:9:3829:23 | getElement(...) |
|
||||
| Test.java:3834:35:3834:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3834:13:3834:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3834:35:3834:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3834:13:3834:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3836:20:3836:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3836:9:3836:23 | getElement(...) |
|
||||
| Test.java:3841:41:3841:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3841:19:3841:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3841:41:3841:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3841:19:3841:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3843:20:3843:22 | out : CollectionSortedBag [<element>] : String | Test.java:230:19:230:32 | it : CollectionSortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3843:9:3843:23 | getElement(...) |
|
||||
| Test.java:3848:41:3848:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3848:19:3848:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3848:41:3848:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3848:19:3848:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3850:20:3850:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3850:9:3850:23 | getElement(...) |
|
||||
| Test.java:3855:42:3855:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3855:20:3855:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3855:42:3855:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3855:20:3855:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3857:20:3857:22 | out : HashBag [<element>] : String | Test.java:230:19:230:32 | it : HashBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3857:9:3857:23 | getElement(...) |
|
||||
| Test.java:3862:35:3862:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3862:13:3862:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3862:35:3862:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3862:13:3862:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3864:20:3864:22 | out : PredicatedBag [<element>] : String | Test.java:230:19:230:32 | it : PredicatedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3864:9:3864:23 | getElement(...) |
|
||||
| Test.java:3869:41:3869:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3869:19:3869:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3869:41:3869:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3869:19:3869:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3871:20:3871:22 | out : PredicatedSortedBag [<element>] : String | Test.java:230:19:230:32 | it : PredicatedSortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3871:9:3871:23 | getElement(...) |
|
||||
| Test.java:3876:35:3876:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3876:13:3876:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3876:35:3876:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3876:13:3876:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3878:20:3878:22 | out : SynchronizedBag [<element>] : String | Test.java:230:19:230:32 | it : SynchronizedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3878:9:3878:23 | getElement(...) |
|
||||
| Test.java:3883:41:3883:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3883:19:3883:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3883:41:3883:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3883:19:3883:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3885:20:3885:22 | out : SynchronizedSortedBag [<element>] : String | Test.java:230:19:230:32 | it : SynchronizedSortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3885:9:3885:23 | getElement(...) |
|
||||
| Test.java:3890:35:3890:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3890:13:3890:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3890:35:3890:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3890:13:3890:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3892:20:3892:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3892:9:3892:23 | getElement(...) |
|
||||
| Test.java:3897:41:3897:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3897:19:3897:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3897:41:3897:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3897:19:3897:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3899:20:3899:22 | out : TransformedSortedBag [<element>] : String | Test.java:230:19:230:32 | it : TransformedSortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3899:9:3899:23 | getElement(...) |
|
||||
| Test.java:3904:42:3904:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3904:20:3904:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3904:42:3904:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3904:20:3904:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3906:20:3906:22 | out : TreeBag [<element>] : String | Test.java:230:19:230:32 | it : TreeBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3906:9:3906:23 | getElement(...) |
|
||||
| Test.java:3911:35:3911:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3911:13:3911:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3911:35:3911:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3911:13:3911:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3913:20:3913:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3913:9:3913:23 | getElement(...) |
|
||||
| Test.java:3918:41:3918:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3918:19:3918:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3918:41:3918:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:3918:19:3918:57 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:3920:20:3920:22 | out : SortedBag [<element>] : String | Test.java:230:19:230:32 | it : SortedBag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3920:9:3920:23 | getElement(...) |
|
||||
| Test.java:3925:46:3925:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap<K,String>(...) : DualTreeBidiMap [<map.key>] : String | Test.java:3925:17:3925:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [<map.key>] : String |
|
||||
| Test.java:3926:41:3926:42 | in : DualTreeBidiMap [<map.key>] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [<map.key>] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [<map.key>] : String | Test.java:3926:10:3926:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [<map.key>] : String |
|
||||
@@ -18908,72 +18751,52 @@ subpaths
|
||||
| Test.java:4142:54:4142:69 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap<String,V>(...) : DualTreeBidiMap [<map.value>] : String | Test.java:4142:23:4142:70 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [<map.value>] : String |
|
||||
| Test.java:4144:21:4144:23 | out : SortedBidiMap [<map.value>] : String | Test.java:232:20:232:31 | map : SortedBidiMap [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:4144:9:4144:24 | getMapValue(...) |
|
||||
| Test.java:4149:42:4149:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4149:20:4149:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4149:42:4149:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4149:20:4149:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4150:44:4150:45 | in : TreeBag [<element>] : String | Test.java:7149:40:7149:63 | coll : TreeBag [<element>] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [<element>] : String | Test.java:4150:10:4150:46 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [<element>] : String |
|
||||
| Test.java:4151:20:4151:22 | out : MyAbstractCollectionDecorator [<element>] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4151:9:4151:23 | getElement(...) |
|
||||
| Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [<element>] : String | Test.java:7149:40:7149:63 | coll : TreeBag [<element>] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [<element>] : String | Test.java:4156:39:4156:112 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [<element>] : String |
|
||||
| Test.java:4156:95:4156:110 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4156:95:4156:110 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4157:10:4157:11 | in : MyAbstractCollectionDecorator [<element>] : String | Test.java:7152:24:7152:34 | parameter this : MyAbstractCollectionDecorator [<element>] : String | Test.java:7153:11:7153:27 | decorated(...) : Collection [<element>] : String | Test.java:4157:10:4157:25 | myDecorated(...) : Collection [<element>] : String |
|
||||
| Test.java:4158:20:4158:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4158:9:4158:23 | getElement(...) |
|
||||
| Test.java:4163:42:4163:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4163:20:4163:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4163:42:4163:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4163:20:4163:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4164:24:4164:25 | in : TreeBag [<element>] : String | Test.java:7155:31:7155:54 | coll : TreeBag [<element>] : String | Test.java:7155:15:7155:29 | parameter this [Return] : MyAbstractCollectionDecorator [<element>] : String | Test.java:4164:4:4164:6 | out [post update] : MyAbstractCollectionDecorator [<element>] : String |
|
||||
| Test.java:4165:20:4165:22 | out : MyAbstractCollectionDecorator [<element>] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4165:9:4165:23 | getElement(...) |
|
||||
| Test.java:4173:20:4173:22 | out : CompositeCollection [<element>] : Object | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4173:9:4173:23 | getElement(...) |
|
||||
| Test.java:4181:20:4181:34 | getElement(...) : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4181:9:4181:35 | getElement(...) |
|
||||
| Test.java:4181:31:4181:33 | out : List [<element>, <element>] : Object | Test.java:230:19:230:32 | it : List [<element>, <element>] : Object | Test.java:230:44:230:63 | next(...) : Object [<element>] : Object | Test.java:4181:20:4181:34 | getElement(...) : Collection [<element>] : Object |
|
||||
| Test.java:4186:42:4186:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4186:20:4186:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4186:42:4186:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4186:20:4186:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4189:20:4189:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4189:9:4189:23 | getElement(...) |
|
||||
| Test.java:4194:42:4194:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4194:20:4194:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4194:42:4194:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4194:20:4194:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4197:20:4197:34 | getElement(...) : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4197:9:4197:35 | getElement(...) |
|
||||
| Test.java:4197:31:4197:33 | out : List [<element>, <element>] : String | Test.java:230:19:230:32 | it : List [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:4197:20:4197:34 | getElement(...) : Collection [<element>] : String |
|
||||
| Test.java:4202:42:4202:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4202:20:4202:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4202:42:4202:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4202:20:4202:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4204:20:4204:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4204:9:4204:23 | getElement(...) |
|
||||
| Test.java:4209:42:4209:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4209:20:4209:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4209:42:4209:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4209:20:4209:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4211:20:4211:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4211:9:4211:23 | getElement(...) |
|
||||
| Test.java:4216:42:4216:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4216:20:4216:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4216:42:4216:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4216:20:4216:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4218:20:4218:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4218:9:4218:23 | getElement(...) |
|
||||
| Test.java:4223:61:4223:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4223:39:4223:77 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4223:61:4223:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4223:39:4223:77 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4225:20:4225:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4225:9:4225:23 | getElement(...) |
|
||||
| Test.java:4230:42:4230:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4230:20:4230:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4230:42:4230:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4230:20:4230:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4232:20:4232:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4232:9:4232:23 | getElement(...) |
|
||||
| Test.java:4237:42:4237:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4237:20:4237:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4237:42:4237:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4237:20:4237:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4239:20:4239:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4239:9:4239:23 | getElement(...) |
|
||||
| Test.java:4244:42:4244:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4244:20:4244:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4244:42:4244:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4244:20:4244:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4246:20:4246:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4246:9:4246:23 | getElement(...) |
|
||||
| Test.java:4251:61:4251:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4251:39:4251:77 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4251:61:4251:76 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4251:39:4251:77 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4253:20:4253:22 | out : CompositeCollection [<element>] : String | Test.java:230:19:230:32 | it : CompositeCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4253:9:4253:23 | getElement(...) |
|
||||
| Test.java:4258:75:4258:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4258:53:4258:91 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4258:75:4258:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4258:53:4258:91 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4260:20:4260:34 | getElement(...) : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4260:9:4260:35 | getElement(...) |
|
||||
| Test.java:4260:31:4260:33 | out : List [<element>, <element>] : String | Test.java:230:19:230:32 | it : List [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:4260:20:4260:34 | getElement(...) : Collection [<element>] : String |
|
||||
| Test.java:4265:75:4265:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4265:53:4265:91 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4265:75:4265:90 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4265:53:4265:91 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4267:20:4267:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4267:9:4267:23 | getElement(...) |
|
||||
| Test.java:4272:42:4272:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4272:20:4272:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4272:42:4272:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4272:20:4272:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4274:20:4274:22 | out : IndexedCollection [<element>] : String | Test.java:230:19:230:32 | it : IndexedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4274:9:4274:23 | getElement(...) |
|
||||
| Test.java:4279:71:4279:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4279:49:4279:87 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4279:71:4279:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4279:49:4279:87 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4286:42:4286:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4286:20:4286:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4286:42:4286:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4286:20:4286:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4288:20:4288:22 | out : IndexedCollection [<element>] : String | Test.java:230:19:230:32 | it : IndexedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4288:9:4288:23 | getElement(...) |
|
||||
| Test.java:4293:42:4293:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4293:20:4293:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4293:42:4293:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4293:20:4293:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4295:20:4295:22 | out : IndexedCollection [<element>] : String | Test.java:230:19:230:32 | it : IndexedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4295:9:4295:23 | getElement(...) |
|
||||
| Test.java:4300:71:4300:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4300:49:4300:87 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4300:71:4300:86 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4300:49:4300:87 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4302:20:4302:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4302:9:4302:23 | getElement(...) |
|
||||
| Test.java:4309:20:4309:45 | createPredicatedList(...) : List [<element>] : String | Test.java:230:19:230:32 | it : List [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4309:9:4309:46 | getElement(...) |
|
||||
| Test.java:4316:20:4316:45 | createPredicatedList(...) : List [<element>] : String | Test.java:230:19:230:32 | it : List [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4316:9:4316:46 | getElement(...) |
|
||||
@@ -18982,7 +18805,6 @@ subpaths
|
||||
| Test.java:4328:80:4328:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [<element>] : String | Test.java:4328:38:4328:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [<element>] : String |
|
||||
| Test.java:4330:20:4330:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4330:9:4330:23 | getElement(...) |
|
||||
| Test.java:4335:35:4335:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4335:13:4335:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4335:35:4335:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4335:13:4335:51 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4338:20:4338:22 | out : Bag [<element>] : String | Test.java:230:19:230:32 | it : Bag [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4338:9:4338:23 | getElement(...) |
|
||||
| Test.java:4343:80:4343:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [<element>] : String | Test.java:4343:38:4343:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [<element>] : String |
|
||||
| Test.java:4345:20:4345:22 | out : List [<element>] : String | Test.java:230:19:230:32 | it : List [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4345:9:4345:23 | getElement(...) |
|
||||
@@ -18994,7 +18816,6 @@ subpaths
|
||||
| Test.java:4372:80:4372:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [<element>] : String | Test.java:4372:38:4372:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [<element>] : String |
|
||||
| Test.java:4374:20:4374:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4374:9:4374:23 | getElement(...) |
|
||||
| Test.java:4379:45:4379:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:4379:18:4379:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:4379:45:4379:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:4379:18:4379:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:4382:20:4382:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4382:9:4382:23 | getElement(...) |
|
||||
| Test.java:4387:80:4387:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [<element>] : String | Test.java:4387:38:4387:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [<element>] : String |
|
||||
| Test.java:4389:20:4389:22 | out : Queue [<element>] : String | Test.java:230:19:230:32 | it : Queue [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4389:9:4389:23 | getElement(...) |
|
||||
@@ -19011,21 +18832,16 @@ subpaths
|
||||
| Test.java:4431:80:4431:95 | (...)... : String | Test.java:264:80:264:88 | element : String | Test.java:264:194:264:194 | x : Builder [<element>] : String | Test.java:4431:38:4431:96 | newPredicatedCollectionBuilderWithElement(...) : Builder [<element>] : String |
|
||||
| Test.java:4433:20:4433:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4433:9:4433:23 | getElement(...) |
|
||||
| Test.java:4438:42:4438:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4438:20:4438:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4438:42:4438:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4438:20:4438:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4440:20:4440:22 | out : PredicatedCollection [<element>] : String | Test.java:230:19:230:32 | it : PredicatedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4440:9:4440:23 | getElement(...) |
|
||||
| Test.java:4445:42:4445:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4445:20:4445:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4445:42:4445:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4445:20:4445:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4447:20:4447:22 | out : SynchronizedCollection [<element>] : String | Test.java:230:19:230:32 | it : SynchronizedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4447:9:4447:23 | getElement(...) |
|
||||
| Test.java:4452:42:4452:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4452:20:4452:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4452:42:4452:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4452:20:4452:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4454:20:4454:22 | out : TransformedCollection [<element>] : String | Test.java:230:19:230:32 | it : TransformedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4454:9:4454:23 | getElement(...) |
|
||||
| Test.java:4459:42:4459:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4459:20:4459:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4459:42:4459:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4459:20:4459:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4461:20:4461:22 | out : BoundedCollection [<element>] : String | Test.java:230:19:230:32 | it : BoundedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4461:9:4461:23 | getElement(...) |
|
||||
| Test.java:4466:59:4466:74 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [<element>] : String | Test.java:4466:27:4466:75 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [<element>] : String |
|
||||
| Test.java:4468:20:4468:22 | out : BoundedCollection [<element>] : String | Test.java:230:19:230:32 | it : BoundedCollection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4468:9:4468:23 | getElement(...) |
|
||||
| Test.java:4473:42:4473:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4473:20:4473:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4473:42:4473:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4473:20:4473:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4475:20:4475:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4475:9:4475:23 | getElement(...) |
|
||||
| Test.java:4480:45:4480:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:4480:18:4480:61 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:4481:42:4481:43 | in : ListIterator [<element>] : String | Test.java:7161:38:7161:63 | iterator : ListIterator [<element>] : String | Test.java:7161:10:7161:36 | parameter this [Return] : MyAbstractIteratorDecorator [<element>] : String | Test.java:4481:10:4481:44 | new MyAbstractIteratorDecorator<>(...) : MyAbstractIteratorDecorator [<element>] : String |
|
||||
@@ -19128,7 +18944,6 @@ subpaths
|
||||
| Test.java:4753:49:4753:64 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:4753:22:4753:65 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:4755:20:4755:22 | out : FilterListIterator [<element>] : String | Test.java:231:19:231:32 | it : FilterListIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4755:9:4755:23 | getElement(...) |
|
||||
| Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [<element>] : String | Test.java:267:39:267:47 | element : ListIterator [<element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | Test.java:4760:20:4760:86 | newTreeBagWithElement(...) : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [<element>] : String | Test.java:267:39:267:47 | element : ListIterator [<element>] : String | Test.java:267:107:267:107 | b : TreeBag [<element>, <element>] : String | Test.java:4760:20:4760:86 | newTreeBagWithElement(...) : TreeBag [<element>, <element>] : String |
|
||||
| Test.java:4760:69:4760:84 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:4760:42:4760:85 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:4762:20:4762:22 | out : IteratorChain [<element>] : String | Test.java:231:19:231:32 | it : IteratorChain [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4762:9:4762:23 | getElement(...) |
|
||||
| Test.java:4767:45:4767:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:4767:18:4767:61 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
@@ -19154,7 +18969,6 @@ subpaths
|
||||
| Test.java:4837:45:4837:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [<element>] : String | Test.java:4837:18:4837:61 | newListIteratorWithElement(...) : ListIterator [<element>] : String |
|
||||
| Test.java:4839:20:4839:22 | out : ListIteratorWrapper [<element>] : String | Test.java:231:19:231:32 | it : ListIteratorWrapper [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4839:9:4839:23 | getElement(...) |
|
||||
| Test.java:4844:42:4844:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4844:20:4844:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4844:42:4844:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:4844:20:4844:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:4846:20:4846:22 | out : LoopingIterator [<element>] : String | Test.java:231:19:231:32 | it : LoopingIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4846:9:4846:23 | getElement(...) |
|
||||
| Test.java:4853:20:4853:22 | out : LoopingListIterator [<element>] : String | Test.java:231:19:231:32 | it : LoopingListIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4853:9:4853:23 | getElement(...) |
|
||||
| Test.java:4860:20:4860:22 | out : ObjectArrayIterator [<element>] : String | Test.java:231:19:231:32 | it : ObjectArrayIterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4860:9:4860:23 | getElement(...) |
|
||||
@@ -19229,7 +19043,6 @@ subpaths
|
||||
| Test.java:5208:41:5208:56 | (...)... : String | Test.java:261:41:261:49 | element : String | Test.java:261:61:261:93 | new MultiKey<T>(...) : MultiKey [<element>] : String | Test.java:5208:18:5208:57 | newMultiKeyWithElement(...) : MultiKey [<element>] : String |
|
||||
| Test.java:5210:25:5210:27 | out : Object[] [[]] : String | Test.java:229:24:229:32 | array : Object[] [[]] : String | Test.java:229:44:229:51 | ...[...] : String | Test.java:5210:9:5210:28 | getArrayElement(...) |
|
||||
| Test.java:5215:42:5215:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:5215:20:5215:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:5215:42:5215:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:5215:20:5215:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:5216:35:5216:36 | in : TreeBag [<element>] : String | Test.java:7204:31:7204:64 | coll : TreeBag [<element>] : String | Test.java:7204:10:7204:29 | parameter this [Return] : MyAbstractLinkedList [<element>] : String | Test.java:5216:10:5216:37 | new MyAbstractLinkedList<>(...) : MyAbstractLinkedList [<element>] : String |
|
||||
| Test.java:5217:20:5217:22 | out : MyAbstractLinkedList [<element>] : String | Test.java:230:19:230:32 | it : MyAbstractLinkedList [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5217:9:5217:23 | getElement(...) |
|
||||
| Test.java:5224:20:5224:22 | out : AbstractLinkedList [<element>] : Object | Test.java:230:19:230:32 | it : AbstractLinkedList [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:5224:9:5224:23 | getElement(...) |
|
||||
@@ -19418,24 +19231,19 @@ subpaths
|
||||
| Test.java:6169:40:6169:55 | (...)... : String | Test.java:297:47:297:53 | value : String | Test.java:297:136:297:136 | m : MultiKeyMap [<map.value>] : String | Test.java:6169:21:6169:56 | newMKMWithMapValue(...) : MultiKeyMap [<map.value>] : String |
|
||||
| Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6176:42:6176:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6176:23:6176:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6178:20:6178:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6178:9:6178:23 | getElement(...) |
|
||||
| Test.java:6178:20:6178:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6178:9:6178:23 | getElement(...) |
|
||||
| Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6183:57:6183:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6183:38:6183:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6185:30:6185:44 | getElement(...) : Entry [<map.value>] : Object | Test.java:244:29:244:52 | container : Entry [<map.value>] : Object | Test.java:244:64:244:83 | getValue(...) : Object | Test.java:6185:9:6185:45 | getMapValueFromEntry(...) |
|
||||
| Test.java:6185:30:6185:44 | getElement(...) : Entry [<map.value>] : String | Test.java:244:29:244:52 | container : Entry [<map.value>] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:6185:9:6185:45 | getMapValueFromEntry(...) |
|
||||
| Test.java:6185:41:6185:43 | out : Iterator [<element>, <map.value>] : Object | Test.java:231:19:231:32 | it : Iterator [<element>, <map.value>] : Object | Test.java:231:44:231:52 | next(...) : Object [<map.value>] : Object | Test.java:6185:30:6185:44 | getElement(...) : Entry [<map.value>] : Object |
|
||||
| Test.java:6185:41:6185:43 | out : Iterator [<element>, <map.value>] : String | Test.java:231:19:231:32 | it : Iterator [<element>, <map.value>] : String | Test.java:231:44:231:52 | next(...) : Object [<map.value>] : String | Test.java:6185:30:6185:44 | getElement(...) : Entry [<map.value>] : String |
|
||||
| Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:6190:55:6190:70 | (...)... : String | Test.java:279:47:279:51 | key : String | Test.java:279:131:279:131 | m : MultiValueMap [<map.key>] : String | Test.java:6190:38:6190:71 | newMVMWithMapKey(...) : MultiValueMap [<map.key>] : String |
|
||||
| Test.java:6192:28:6192:42 | getElement(...) : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:6192:9:6192:43 | getMapKeyFromEntry(...) |
|
||||
| Test.java:6192:39:6192:41 | out : Iterator [<element>, <map.key>] : String | Test.java:231:19:231:32 | it : Iterator [<element>, <map.key>] : String | Test.java:231:44:231:52 | next(...) : Object [<map.key>] : String | Test.java:6192:28:6192:42 | getElement(...) : Entry [<map.key>] : String |
|
||||
| Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6197:57:6197:72 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6197:38:6197:73 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6199:20:6199:22 | out : Iterator [<element>] : Object | Test.java:231:19:231:32 | it : Iterator [<element>] : Object | Test.java:231:44:231:52 | next(...) : Object | Test.java:6199:9:6199:23 | getElement(...) |
|
||||
| Test.java:6199:20:6199:22 | out : Iterator [<element>] : String | Test.java:231:19:231:32 | it : Iterator [<element>] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:6199:9:6199:23 | getElement(...) |
|
||||
| Test.java:6204:47:6204:62 | (...)... : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [<element>] : String | Test.java:6204:26:6204:63 | newVectorWithElement(...) : Vector [<element>] : String |
|
||||
@@ -19452,7 +19260,6 @@ subpaths
|
||||
| Test.java:6241:19:6241:21 | out : MultiValueMap [<map.key>] : String | Test.java:228:18:228:29 | map : MultiValueMap [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6241:9:6241:22 | getMapKey(...) |
|
||||
| Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6246:32:6246:47 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6246:13:6246:48 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6248:20:6248:47 | (...)... : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6248:9:6248:48 | getElement(...) |
|
||||
| Test.java:6248:20:6248:47 | (...)... : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6248:9:6248:48 | getElement(...) |
|
||||
| Test.java:6248:44:6248:46 | out : MultiValueMap [<map.value>, <element>] : Object | Test.java:232:20:232:31 | map : MultiValueMap [<map.value>, <element>] : Object | Test.java:232:43:232:55 | get(...) : Object [<element>] : Object | Test.java:6248:32:6248:47 | getMapValue(...) : Object [<element>] : Object |
|
||||
@@ -19463,12 +19270,10 @@ subpaths
|
||||
| Test.java:6255:44:6255:46 | out : MultiValueMap [<map.value>] : Object | Test.java:232:20:232:31 | map : MultiValueMap [<map.value>] : Object | Test.java:232:43:232:55 | get(...) : Object | Test.java:6255:32:6255:47 | getMapValue(...) : Object |
|
||||
| Test.java:6262:19:6262:21 | out : MultiValueMap [<map.key>] : Object | Test.java:228:18:228:29 | map : MultiValueMap [<map.key>] : Object | Test.java:228:41:228:70 | next(...) : Object | Test.java:6262:9:6262:22 | getMapKey(...) |
|
||||
| Test.java:6267:42:6267:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6267:20:6267:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6267:42:6267:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6267:20:6267:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6269:20:6269:47 | (...)... : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6269:9:6269:48 | getElement(...) |
|
||||
| Test.java:6269:44:6269:46 | out : MultiValueMap [<map.value>, <element>] : String | Test.java:232:20:232:31 | map : MultiValueMap [<map.value>, <element>] : String | Test.java:232:43:232:55 | get(...) : Object [<element>] : String | Test.java:6269:32:6269:47 | getMapValue(...) : Object [<element>] : String |
|
||||
| Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>, <element>] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>, <element>] : String |
|
||||
| Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6274:42:6274:57 | (...)... : String | Test.java:298:49:298:55 | value : String | Test.java:298:137:298:137 | m : MultiValueMap [<map.value>] : String | Test.java:6274:23:6274:58 | newMVMWithMapValue(...) : MultiValueMap [<map.value>] : String |
|
||||
| Test.java:6276:20:6276:22 | out : Collection [<element>] : Object | Test.java:230:19:230:32 | it : Collection [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6276:9:6276:23 | getElement(...) |
|
||||
| Test.java:6276:20:6276:22 | out : Collection [<element>] : String | Test.java:230:19:230:32 | it : Collection [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6276:9:6276:23 | getElement(...) |
|
||||
| Test.java:6283:19:6283:21 | out : PassiveExpiringMap [<map.key>] : String | Test.java:228:18:228:29 | map : PassiveExpiringMap [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6283:9:6283:22 | getMapKey(...) |
|
||||
@@ -19549,19 +19354,14 @@ subpaths
|
||||
| Test.java:6589:43:6589:58 | (...)... : String | Test.java:272:58:272:62 | key : String | Test.java:272:160:272:160 | m : ArrayListValuedHashMap [<map.key>] : String | Test.java:6589:24:6589:59 | newALVHMWithMapKey(...) : ArrayListValuedHashMap [<map.key>] : String |
|
||||
| Test.java:6591:19:6591:21 | out : UnmodifiableMultiValuedMap [<map.key>] : String | Test.java:240:18:240:46 | container : UnmodifiableMultiValuedMap [<map.key>] : String | Test.java:240:58:240:93 | next(...) : String | Test.java:6591:9:6591:22 | getMapKey(...) |
|
||||
| Test.java:6596:42:6596:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6596:20:6596:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6596:42:6596:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6596:20:6596:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6598:20:6598:22 | out : HashMultiSet [<element>] : String | Test.java:230:19:230:32 | it : HashMultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6598:9:6598:23 | getElement(...) |
|
||||
| Test.java:6603:45:6603:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6603:18:6603:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6603:45:6603:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6603:18:6603:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6605:20:6605:22 | out : PredicatedMultiSet [<element>] : String | Test.java:230:19:230:32 | it : PredicatedMultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6605:9:6605:23 | getElement(...) |
|
||||
| Test.java:6610:45:6610:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6610:18:6610:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6610:45:6610:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6610:18:6610:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6612:20:6612:22 | out : SynchronizedMultiSet [<element>] : String | Test.java:230:19:230:32 | it : SynchronizedMultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6612:9:6612:23 | getElement(...) |
|
||||
| Test.java:6617:45:6617:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6617:18:6617:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6617:45:6617:60 | (...)... : String | Test.java:258:49:258:57 | element : String | Test.java:258:127:258:127 | x : HashMultiSet [<element>] : String | Test.java:6617:18:6617:61 | newHashMultiSetWithElement(...) : HashMultiSet [<element>] : String |
|
||||
| Test.java:6619:20:6619:22 | out : MultiSet [<element>] : String | Test.java:230:19:230:32 | it : MultiSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6619:9:6619:23 | getElement(...) |
|
||||
| Test.java:6688:42:6688:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6688:20:6688:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6688:42:6688:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6688:20:6688:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6690:20:6690:22 | out : CircularFifoQueue [<element>] : String | Test.java:230:19:230:32 | it : CircularFifoQueue [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6690:9:6690:23 | getElement(...) |
|
||||
| Test.java:6695:59:6695:74 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [<element>] : String | Test.java:6695:27:6695:75 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [<element>] : String |
|
||||
| Test.java:6702:47:6702:62 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [<element>] : String | Test.java:6702:15:6702:63 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [<element>] : String |
|
||||
@@ -19585,10 +19385,8 @@ subpaths
|
||||
| Test.java:6762:20:6762:34 | getElement(...) : Set [<element>] : Object | Test.java:230:19:230:32 | it : Set [<element>] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6762:9:6762:35 | getElement(...) |
|
||||
| Test.java:6762:31:6762:33 | out : List [<element>, <element>] : Object | Test.java:230:19:230:32 | it : List [<element>, <element>] : Object | Test.java:230:44:230:63 | next(...) : Object [<element>] : Object | Test.java:6762:20:6762:34 | getElement(...) : Set [<element>] : Object |
|
||||
| Test.java:6767:42:6767:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6767:20:6767:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6767:42:6767:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6767:20:6767:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6770:20:6770:22 | out : CompositeSet [<element>] : String | Test.java:230:19:230:32 | it : CompositeSet [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6770:9:6770:23 | getElement(...) |
|
||||
| Test.java:6775:42:6775:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6775:20:6775:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6775:42:6775:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [<element>] : String | Test.java:6775:20:6775:58 | newTreeBagWithElement(...) : TreeBag [<element>] : String |
|
||||
| Test.java:6778:20:6778:34 | getElement(...) : Set [<element>] : String | Test.java:230:19:230:32 | it : Set [<element>] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6778:9:6778:35 | getElement(...) |
|
||||
| Test.java:6778:31:6778:33 | out : List [<element>, <element>] : String | Test.java:230:19:230:32 | it : List [<element>, <element>] : String | Test.java:230:44:230:63 | next(...) : Object [<element>] : String | Test.java:6778:20:6778:34 | getElement(...) : Set [<element>] : String |
|
||||
| Test.java:6783:42:6783:57 | (...)... : String | Test.java:260:53:260:61 | element : String | Test.java:260:135:260:135 | x : ListOrderedSet [<element>] : String | Test.java:6783:13:6783:58 | newListOrderedSetWithElement(...) : ListOrderedSet [<element>] : String |
|
||||
@@ -19643,19 +19441,13 @@ subpaths
|
||||
| Test.java:6988:19:6988:21 | out : PatriciaTrie [<map.key>] : String | Test.java:228:18:228:29 | map : PatriciaTrie [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:6988:9:6988:22 | getMapKey(...) |
|
||||
| Test.java:6995:21:6995:23 | out : PatriciaTrie [<map.value>] : String | Test.java:232:20:232:31 | map : PatriciaTrie [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:6995:9:6995:24 | getMapValue(...) |
|
||||
| Test.java:6999:56:6999:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:6999:30:6999:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:6999:56:6999:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:6999:30:6999:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:7002:28:7002:30 | out : Entry [<map.key>] : String | Test.java:238:27:238:50 | container : Entry [<map.key>] : String | Test.java:238:62:238:79 | getKey(...) : String | Test.java:7002:9:7002:31 | getMapKeyFromEntry(...) |
|
||||
| Test.java:7006:58:7006:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7006:30:7006:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7006:58:7006:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7006:30:7006:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7009:30:7009:32 | out : Entry [<map.value>] : String | Test.java:244:29:244:52 | container : Entry [<map.value>] : String | Test.java:244:64:244:83 | getValue(...) : String | Test.java:7009:9:7009:33 | getMapValueFromEntry(...) |
|
||||
| Test.java:7013:56:7013:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:7013:30:7013:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:7013:56:7013:71 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:7013:30:7013:72 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:7020:58:7020:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7020:30:7020:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7020:58:7020:73 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7020:30:7020:74 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7028:40:7028:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:7028:14:7028:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:7028:40:7028:55 | (...)... : String | Test.java:288:49:288:58 | key : String | Test.java:288:134:288:134 | m : PatriciaTrie [<map.key>] : String | Test.java:7028:14:7028:56 | newPatriciaTrieWithMapKey(...) : PatriciaTrie [<map.key>] : String |
|
||||
| Test.java:7030:19:7030:21 | out : Trie [<map.key>] : String | Test.java:228:18:228:29 | map : Trie [<map.key>] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:7030:9:7030:22 | getMapKey(...) |
|
||||
| Test.java:7035:42:7035:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7035:14:7035:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7035:42:7035:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [<map.value>] : String | Test.java:7035:14:7035:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [<map.value>] : String |
|
||||
| Test.java:7037:21:7037:23 | out : Trie [<map.value>] : String | Test.java:232:20:232:31 | map : Trie [<map.value>] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:7037:9:7037:24 | getMapValue(...) |
|
||||
testFailures
|
||||
|
||||
@@ -745,12 +745,9 @@ edges
|
||||
| ArrayUtilsTest.java:68:27:68:57 | {...} : int[] [[]] : Number | ArrayUtilsTest.java:69:56:69:66 | taintedInts : int[] [[]] : Number | provenance | |
|
||||
| ArrayUtilsTest.java:68:39:68:55 | taint(...) : Number | ArrayUtilsTest.java:68:27:68:57 | {...} : int[] [[]] : Number | provenance | |
|
||||
| ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:70:12:70:27 | taintedBoxedInts | provenance | |
|
||||
| ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | provenance | |
|
||||
| ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | provenance | |
|
||||
| ArrayUtilsTest.java:69:56:69:66 | taintedInts : int[] [[]] : Number | ArrayUtilsTest.java:69:36:69:67 | toObject(...) : Integer[] [[]] : Number | provenance | MaD:53 |
|
||||
| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | provenance | |
|
||||
| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | provenance | |
|
||||
| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | provenance | MaD:54 |
|
||||
| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | provenance | MaD:54 |
|
||||
| ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) | provenance | |
|
||||
| ArrayUtilsTest.java:72:53:72:69 | taint(...) : Number | ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | provenance | MaD:55 |
|
||||
@@ -3434,8 +3431,6 @@ nodes
|
||||
| ArrayUtilsTest.java:70:12:70:27 | taintedBoxedInts | semmle.label | taintedBoxedInts |
|
||||
| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) | semmle.label | toPrimitive(...) |
|
||||
| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Number | semmle.label | toPrimitive(...) : int[] [[]] : Number |
|
||||
| ArrayUtilsTest.java:71:12:71:51 | toPrimitive(...) : int[] [[]] : Object | semmle.label | toPrimitive(...) : int[] [[]] : Object |
|
||||
| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] | semmle.label | taintedBoxedInts : Integer[] |
|
||||
| ArrayUtilsTest.java:71:35:71:50 | taintedBoxedInts : Integer[] [[]] : Number | semmle.label | taintedBoxedInts : Integer[] [[]] : Number |
|
||||
| ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) | semmle.label | toPrimitive(...) |
|
||||
| ArrayUtilsTest.java:72:12:72:70 | toPrimitive(...) : int[] [[]] : Number | semmle.label | toPrimitive(...) : int[] [[]] : Number |
|
||||
|
||||
@@ -312,13 +312,8 @@ nodes
|
||||
| Test.java:21:10:21:18 | container : MutablePropertyValues [<element>] : PropertyValue | semmle.label | container : MutablePropertyValues [<element>] : PropertyValue |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | semmle.label | getPropertyValue(...) : PropertyValue |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | semmle.label | getPropertyValue(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | semmle.label | getPropertyValue(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | semmle.label | getPropertyValue(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | semmle.label | getPropertyValue(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | semmle.label | getPropertyValue(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | semmle.label | getPropertyValue(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : Object | semmle.label | container : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : String | semmle.label | container : PropertyValue [<map.key>] : String |
|
||||
@@ -540,39 +535,27 @@ nodes
|
||||
| Test.java:279:25:279:27 | out : PropertyValue[] [[]] : PropertyValue | semmle.label | out : PropertyValue[] [[]] : PropertyValue |
|
||||
subpaths
|
||||
| Test.java:57:27:57:29 | out : MutablePropertyValues [<element>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:57:9:57:30 | getElementDefault(...) |
|
||||
| Test.java:57:27:57:29 | out : MutablePropertyValues [<element>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:57:9:57:30 | getElementDefault(...) |
|
||||
| Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : Object | Test.java:25:10:25:28 | getName(...) : String | Test.java:64:9:64:48 | getMapKeyDefault(...) |
|
||||
| Test.java:64:44:64:46 | out : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:64:44:64:46 | out : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | Test.java:64:26:64:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object | Test.java:28:28:28:50 | container : PropertyValue [<map.value>] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:71:9:71:50 | getMapValueDefault(...) |
|
||||
| Test.java:71:46:71:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:71:46:71:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:71:28:71:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:76:60:76:83 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [<element>] : PropertyValue | Test.java:76:24:76:84 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [<element>] : PropertyValue |
|
||||
| Test.java:78:27:78:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:78:9:78:30 | getElementDefault(...) |
|
||||
| Test.java:78:27:78:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:78:9:78:30 | getElementDefault(...) |
|
||||
| Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [<map.key>] : String | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:92:9:92:48 | getMapKeyDefault(...) |
|
||||
| Test.java:92:44:92:46 | out : MutablePropertyValues [<element>, <map.key>] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:92:44:92:46 | out : MutablePropertyValues [<element>, <map.key>] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | Test.java:92:26:92:47 | getElementDefault(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object | Test.java:28:28:28:50 | container : PropertyValue [<map.value>] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:99:9:99:50 | getMapValueDefault(...) |
|
||||
| Test.java:99:46:99:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:99:46:99:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:99:28:99:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:113:27:113:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:113:9:113:30 | getElementDefault(...) |
|
||||
| Test.java:113:27:113:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:113:9:113:30 | getElementDefault(...) |
|
||||
| Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [<map.key>] : String | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:120:9:120:48 | getMapKeyDefault(...) |
|
||||
| Test.java:120:44:120:46 | out : MutablePropertyValues [<element>, <map.key>] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:120:44:120:46 | out : MutablePropertyValues [<element>, <map.key>] : String | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : String | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : String | Test.java:120:26:120:47 | getElementDefault(...) : PropertyValue [<map.key>] : String |
|
||||
| Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object | Test.java:28:28:28:50 | container : PropertyValue [<map.value>] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:127:9:127:50 | getMapValueDefault(...) |
|
||||
| Test.java:127:46:127:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:127:46:127:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:127:28:127:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : Object | Test.java:25:10:25:28 | getName(...) : String | Test.java:141:9:141:48 | getMapKeyDefault(...) |
|
||||
| Test.java:141:44:141:46 | out : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:141:44:141:46 | out : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.key>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.key>] : Object | Test.java:141:26:141:47 | getElementDefault(...) : PropertyValue [<map.key>] : Object |
|
||||
| Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object | Test.java:28:28:28:50 | container : PropertyValue [<map.value>] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:148:9:148:50 | getMapValueDefault(...) |
|
||||
| Test.java:148:46:148:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:148:46:148:48 | out : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue [<map.value>] : Object | Test.java:148:28:148:49 | getElementDefault(...) : PropertyValue [<map.value>] : Object |
|
||||
| Test.java:160:60:160:83 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [<element>] : PropertyValue | Test.java:160:24:160:84 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [<element>] : PropertyValue |
|
||||
| Test.java:162:27:162:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:162:9:162:30 | getElementDefault(...) |
|
||||
| Test.java:162:27:162:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:162:9:162:30 | getElementDefault(...) |
|
||||
| Test.java:167:68:167:75 | source(...) : Object | Test.java:40:61:40:74 | element : Object | Test.java:41:10:41:57 | new MutablePropertyValues(...) : MutablePropertyValues [<element>, <map.value>] : Object | Test.java:167:31:167:76 | newMutablePropertyValuesWithMapValue(...) : MutablePropertyValues [<element>, <map.value>] : Object |
|
||||
| Test.java:175:42:175:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [<element>] : PropertyValue | Test.java:175:6:175:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [<element>] : PropertyValue |
|
||||
| Test.java:183:42:183:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [<element>] : PropertyValue | Test.java:183:6:183:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [<element>] : PropertyValue |
|
||||
@@ -580,7 +563,6 @@ subpaths
|
||||
| Test.java:191:42:191:65 | (...)... : PropertyValue | Test.java:32:60:32:80 | element : PropertyValue | Test.java:33:10:33:52 | new MutablePropertyValues(...) : MutablePropertyValues [<element>] : PropertyValue | Test.java:191:6:191:66 | newMutablePropertyValuesWithElement(...) : MutablePropertyValues [<element>] : PropertyValue |
|
||||
| Test.java:193:25:193:27 | out : PropertyValue[] [[]] : PropertyValue | Test.java:12:24:12:32 | array : PropertyValue[] [[]] : PropertyValue | Test.java:13:10:13:17 | ...[...] : PropertyValue | Test.java:193:9:193:28 | getArrayElement(...) |
|
||||
| Test.java:200:27:200:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:200:9:200:30 | getElementDefault(...) |
|
||||
| Test.java:200:27:200:29 | out : MutablePropertyValues [<element>] : PropertyValue | Test.java:20:34:20:64 | container : MutablePropertyValues [<element>] : PropertyValue | Test.java:21:10:21:39 | getPropertyValue(...) : PropertyValue | Test.java:200:9:200:30 | getElementDefault(...) |
|
||||
| Test.java:214:26:214:28 | out : PropertyValue [<map.key>] : String | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:214:9:214:29 | getMapKeyDefault(...) |
|
||||
| Test.java:221:28:221:30 | out : PropertyValue [<map.value>] : Object | Test.java:28:28:28:50 | container : PropertyValue [<map.value>] : Object | Test.java:29:10:29:29 | getValue(...) : Object | Test.java:221:9:221:31 | getMapValueDefault(...) |
|
||||
| Test.java:228:26:228:28 | out : PropertyValue [<map.key>] : String | Test.java:24:26:24:48 | container : PropertyValue [<map.key>] : String | Test.java:25:10:25:28 | getName(...) : String | Test.java:228:9:228:29 | getMapKeyDefault(...) |
|
||||
|
||||
@@ -156,7 +156,6 @@ nodes
|
||||
| Test.java:42:21:42:48 | container : ValueWrapper [<map.value>] : Object | semmle.label | container : ValueWrapper [<map.value>] : Object |
|
||||
| Test.java:42:60:42:68 | container : ValueWrapper [<map.value>] : Object | semmle.label | container : ValueWrapper [<map.value>] : Object |
|
||||
| Test.java:42:60:42:74 | get(...) : Object | semmle.label | get(...) : Object |
|
||||
| Test.java:42:60:42:74 | get(...) : Object | semmle.label | get(...) : Object |
|
||||
| Test.java:51:16:51:23 | source(...) : Object | semmle.label | source(...) : Object |
|
||||
| Test.java:52:10:52:58 | new ValueRetrievalException(...) : ValueRetrievalException [<map.key>] : Object | semmle.label | new ValueRetrievalException(...) : ValueRetrievalException [<map.key>] : Object |
|
||||
| Test.java:52:44:52:45 | in : Object | semmle.label | in : Object |
|
||||
@@ -228,13 +227,11 @@ nodes
|
||||
| Test.java:137:21:137:23 | out : ValueWrapper [<map.value>] : Object | semmle.label | out : ValueWrapper [<map.value>] : Object |
|
||||
subpaths
|
||||
| Test.java:42:60:42:68 | container : ValueWrapper [<map.value>] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [<map.value>] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:42:60:42:74 | get(...) : Object |
|
||||
| Test.java:42:60:42:68 | container : ValueWrapper [<map.value>] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [<map.value>] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:42:60:42:74 | get(...) : Object |
|
||||
| Test.java:53:19:53:21 | out : ValueRetrievalException [<map.key>] : Object | Test.java:39:19:39:57 | container : ValueRetrievalException [<map.key>] : Object | Test.java:39:69:39:86 | getKey(...) : Object | Test.java:53:9:53:22 | getMapKey(...) |
|
||||
| Test.java:65:45:65:52 | source(...) : Object | Test.java:13:16:13:29 | element : Object | Test.java:13:3:13:14 | parameter this [Return] : ValueWrapper [<map.value>] : Object | Test.java:65:28:65:53 | new ValueWrapper(...) : ValueWrapper [<map.value>] : Object |
|
||||
| Test.java:66:10:66:11 | in : ValueWrapper [<map.value>] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [<map.value>] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:66:10:66:17 | get(...) : Object |
|
||||
| Test.java:72:36:72:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [<map.value>] : Object | Test.java:72:15:72:44 | new DummyCache(...) : DummyCache [<map.value>] : Object |
|
||||
| Test.java:74:21:74:23 | out : ValueWrapper [<map.value>] : Object | Test.java:42:21:42:48 | container : ValueWrapper [<map.value>] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:74:9:74:24 | getMapValue(...) |
|
||||
| Test.java:74:21:74:23 | out : ValueWrapper [<map.value>] : Object | Test.java:42:21:42:48 | container : ValueWrapper [<map.value>] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:74:9:74:24 | getMapValue(...) |
|
||||
| Test.java:79:36:79:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [<map.value>] : Object | Test.java:79:15:79:44 | new DummyCache(...) : DummyCache [<map.value>] : Object |
|
||||
| Test.java:86:36:86:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [<map.value>] : Object | Test.java:86:15:86:44 | new DummyCache(...) : DummyCache [<map.value>] : Object |
|
||||
| Test.java:93:30:93:37 | source(...) : Object | Test.java:22:14:22:23 | key : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [<map.key>] : Object | Test.java:93:15:93:44 | new DummyCache(...) : DummyCache [<map.key>] : Object |
|
||||
@@ -247,5 +244,4 @@ subpaths
|
||||
| Test.java:130:21:130:23 | out : Cache [<map.value>] : Object | Test.java:41:21:41:35 | container : Cache [<map.value>] : Object | Test.java:41:47:41:78 | get(...) : Object | Test.java:130:9:130:24 | getMapValue(...) |
|
||||
| Test.java:135:36:135:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [<map.value>] : Object | Test.java:135:15:135:44 | new DummyCache(...) : DummyCache [<map.value>] : Object |
|
||||
| Test.java:137:21:137:23 | out : ValueWrapper [<map.value>] : Object | Test.java:42:21:42:48 | container : ValueWrapper [<map.value>] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:137:9:137:24 | getMapValue(...) |
|
||||
| Test.java:137:21:137:23 | out : ValueWrapper [<map.value>] : Object | Test.java:42:21:42:48 | container : ValueWrapper [<map.value>] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:137:9:137:24 | getMapValue(...) |
|
||||
testFailures
|
||||
|
||||
@@ -208,12 +208,10 @@ edges
|
||||
| Test.java:53:70:53:76 | element : Object | Test.java:53:56:53:77 | {...} : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:54:37:54:50 | element : Object | Test.java:54:94:54:100 | element : Object | provenance | |
|
||||
| Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | provenance | |
|
||||
| Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | provenance | |
|
||||
| Test.java:54:94:54:100 | element : Object | Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | provenance | MaD:5 |
|
||||
| Test.java:54:94:54:100 | element : Object | Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | provenance | MaD:13 |
|
||||
| Test.java:55:39:55:52 | element : Object | Test.java:55:102:55:108 | element : Object | provenance | |
|
||||
| Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | provenance | |
|
||||
| Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | provenance | |
|
||||
| Test.java:55:102:55:108 | element : Object | Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | provenance | MaD:6 |
|
||||
| Test.java:55:102:55:108 | element : Object | Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | provenance | MaD:14 |
|
||||
| Test.java:66:17:66:32 | (...)... : String | Test.java:67:33:67:34 | in : String | provenance | |
|
||||
@@ -1264,16 +1262,12 @@ nodes
|
||||
| Test.java:53:70:53:76 | element : Object | semmle.label | element : Object |
|
||||
| Test.java:54:37:54:50 | element : Object | semmle.label | element : Object |
|
||||
| Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | semmle.label | p [post update] : Properties [<map.key>] : Object |
|
||||
| Test.java:54:88:54:88 | p [post update] : Properties [<map.key>] : Object | semmle.label | p [post update] : Properties [<map.key>] : Object |
|
||||
| Test.java:54:94:54:100 | element : Object | semmle.label | element : Object |
|
||||
| Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | semmle.label | p : Properties [<map.key>] : Object |
|
||||
| Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | semmle.label | p : Properties [<map.key>] : Object |
|
||||
| Test.java:55:39:55:52 | element : Object | semmle.label | element : Object |
|
||||
| Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | semmle.label | p [post update] : Properties [<map.value>] : Object |
|
||||
| Test.java:55:90:55:90 | p [post update] : Properties [<map.value>] : Object | semmle.label | p [post update] : Properties [<map.value>] : Object |
|
||||
| Test.java:55:102:55:108 | element : Object | semmle.label | element : Object |
|
||||
| Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | semmle.label | p : Properties [<map.value>] : Object |
|
||||
| Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | semmle.label | p : Properties [<map.value>] : Object |
|
||||
| Test.java:66:17:66:32 | (...)... : String | semmle.label | (...)... : String |
|
||||
| Test.java:66:25:66:32 | source(...) : Object | semmle.label | source(...) : Object |
|
||||
| Test.java:67:33:67:34 | in : String | semmle.label | in : String |
|
||||
@@ -2338,10 +2332,8 @@ subpaths
|
||||
| Test.java:251:38:251:45 | source(...) : Object | Test.java:53:31:53:44 | element : Object | Test.java:53:56:53:77 | new Object[] : Object[] [[]] : Object | Test.java:251:18:251:46 | newWithArrayElement(...) : Object[] [[]] : Object |
|
||||
| Test.java:253:20:253:22 | out : Collection [<element>] : Object | Test.java:49:19:49:41 | container : Collection [<element>] : Object | Test.java:49:53:49:79 | next(...) : Object | Test.java:253:9:253:23 | getElement(...) |
|
||||
| Test.java:258:44:258:51 | source(...) : Object | Test.java:54:37:54:50 | element : Object | Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | Test.java:258:20:258:52 | newPropertiesWithMapKey(...) : Properties [<map.key>] : Object |
|
||||
| Test.java:258:44:258:51 | source(...) : Object | Test.java:54:37:54:50 | element : Object | Test.java:54:117:54:117 | p : Properties [<map.key>] : Object | Test.java:258:20:258:52 | newPropertiesWithMapKey(...) : Properties [<map.key>] : Object |
|
||||
| Test.java:260:19:260:21 | out : Map [<map.key>] : Object | Test.java:51:21:51:39 | container : Map [<map.key>] : Object | Test.java:51:51:51:86 | next(...) : Object | Test.java:260:9:260:22 | getMapKey(...) |
|
||||
| Test.java:265:46:265:53 | source(...) : Object | Test.java:55:39:55:52 | element : Object | Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | Test.java:265:20:265:54 | newPropertiesWithMapValue(...) : Properties [<map.value>] : Object |
|
||||
| Test.java:265:46:265:53 | source(...) : Object | Test.java:55:39:55:52 | element : Object | Test.java:55:119:55:119 | p : Properties [<map.value>] : Object | Test.java:265:20:265:54 | newPropertiesWithMapValue(...) : Properties [<map.value>] : Object |
|
||||
| Test.java:267:21:267:23 | out : Map [<map.value>] : Object | Test.java:52:23:52:41 | container : Map [<map.value>] : Object | Test.java:52:53:52:71 | get(...) : Object | Test.java:267:9:267:24 | getMapValue(...) |
|
||||
| Test.java:274:20:274:22 | out : Iterator [<element>] : Object | Test.java:50:19:50:39 | container : Iterator [<element>] : Object | Test.java:50:51:50:66 | next(...) : Object | Test.java:274:9:274:23 | getElement(...) |
|
||||
| Test.java:281:20:281:35 | getMapValue(...) : List [<element>] : Object | Test.java:49:19:49:41 | container : List [<element>] : Object | Test.java:49:53:49:79 | next(...) : Object | Test.java:281:9:281:36 | getElement(...) |
|
||||
|
||||
@@ -305,12 +305,16 @@ edges
|
||||
| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:16 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:16+MaD:14 |
|
||||
| Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:240:29:240:47 | source(...) : Object | Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | provenance | |
|
||||
@@ -324,6 +328,8 @@ edges
|
||||
| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:13+MaD:14 |
|
||||
| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 |
|
||||
| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 |
|
||||
| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 |
|
||||
| Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:13+MaD:14 |
|
||||
| Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:249:38:249:56 | source(...) : Object | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:250:18:250:18 | a : Object[] [[]] : Object | Test.java:251:26:251:26 | a : Object[] [[]] : Object | provenance | |
|
||||
@@ -335,6 +341,8 @@ edges
|
||||
| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:16 |
|
||||
| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14 |
|
||||
| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14 |
|
||||
| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14 |
|
||||
| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14 |
|
||||
| Test.java:251:26:251:26 | a : Object[] [[]] : Object | Test.java:251:26:251:29 | ...[...] | provenance | |
|
||||
| Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:252:28:252:46 | source(...) : Object | Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | provenance | |
|
||||
@@ -347,10 +355,20 @@ edges
|
||||
| Test.java:261:43:261:61 | source(...) : Object | Test.java:261:33:261:62 | of(...) : Stream [<element>] : Object | provenance | MaD:56 |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:12 |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:264:21:264:21 | x : Object | provenance | MaD:12 |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 |
|
||||
| Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | Test.java:269:18:269:20 | out : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:264:21:264:21 | x : Object | Test.java:264:36:264:36 | x : Object | provenance | |
|
||||
| Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:264:36:264:36 | x : Object | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | Test.java:266:29:266:33 | ...[...] : Object | provenance | |
|
||||
| Test.java:266:29:266:33 | ...[...] : Object | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | Test.java:267:29:267:33 | ...[...] : Object | provenance | |
|
||||
| Test.java:267:29:267:33 | ...[...] : Object | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | provenance | |
|
||||
| Test.java:269:18:269:20 | out : Object[] [[]] : Object | Test.java:269:18:269:23 | ...[...] | provenance | |
|
||||
| Test.java:273:33:273:62 | of(...) : Stream [<element>] : Object | Test.java:274:13:274:14 | in : Stream [<element>] : Object | provenance | |
|
||||
| Test.java:273:43:273:61 | source(...) : Object | Test.java:273:33:273:62 | of(...) : Stream [<element>] : Object | provenance | MaD:56 |
|
||||
@@ -790,6 +808,16 @@ nodes
|
||||
| Test.java:264:21:264:21 | x : Object | semmle.label | x : Object |
|
||||
| Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | semmle.label | a [post update] : Object[] [[]] : Object |
|
||||
| Test.java:264:36:264:36 | x : Object | semmle.label | x : Object |
|
||||
| Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object |
|
||||
| Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | semmle.label | a1 [Return] : Object[] [[]] : Object |
|
||||
| Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object |
|
||||
| Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object |
|
||||
| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | semmle.label | a1 [post update] : Object[] [[]] : Object |
|
||||
| Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object |
|
||||
| Test.java:266:29:266:33 | ...[...] : Object | semmle.label | ...[...] : Object |
|
||||
| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | semmle.label | a2 [post update] : Object[] [[]] : Object |
|
||||
| Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object |
|
||||
| Test.java:267:29:267:33 | ...[...] : Object | semmle.label | ...[...] : Object |
|
||||
| Test.java:269:18:269:20 | out : Object[] [[]] : Object | semmle.label | out : Object[] [[]] : Object |
|
||||
| Test.java:269:18:269:23 | ...[...] | semmle.label | ...[...] |
|
||||
| Test.java:273:33:273:62 | of(...) : Stream [<element>] : Object | semmle.label | of(...) : Stream [<element>] : Object |
|
||||
@@ -1010,6 +1038,8 @@ subpaths
|
||||
| Test.java:208:34:208:36 | out : Object[] [[]] : Object | Test.java:16:27:16:35 | array : Object[] [[]] : Object | Test.java:16:47:16:54 | ...[...] : Object | Test.java:208:18:208:37 | getArrayElement(...) |
|
||||
| Test.java:215:29:215:31 | out : List [<element>] : Object | Test.java:18:22:18:35 | it : List [<element>] : Object | Test.java:18:47:18:66 | next(...) : Object | Test.java:215:18:215:32 | getElement(...) |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:264:21:264:21 | x : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object |
|
||||
| Test.java:262:28:262:29 | in : Stream [<element>] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object |
|
||||
| Test.java:289:29:289:31 | out : Stream [<element>] : Object | Test.java:17:22:17:38 | s : Stream [<element>] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:289:18:289:32 | getElement(...) |
|
||||
| Test.java:319:29:319:31 | out : Stream [<element>] : Object | Test.java:17:22:17:38 | s : Stream [<element>] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:319:18:319:32 | getElement(...) |
|
||||
| Test.java:335:29:335:31 | out : Stream [<element>] : Object | Test.java:17:22:17:38 | s : Stream [<element>] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:335:18:335:32 | getElement(...) |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
failures
|
||||
testFailures
|
||||
failures
|
||||
|
||||
@@ -32,8 +32,8 @@ public class ImplicitPendingIntentsTest {
|
||||
PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0);
|
||||
Intent fwdIntent = new Intent();
|
||||
fwdIntent.putExtra("fwdIntent", pi);
|
||||
ctx.startActivities(new Intent[] {fwdIntent}); // $ MISSING: hasImplicitPendingIntent
|
||||
ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent
|
||||
ctx.startActivities(new Intent[] {fwdIntent}); // $hasImplicitPendingIntent
|
||||
ctx.startService(fwdIntent); // Safe
|
||||
ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent
|
||||
|
||||
|
||||
@@ -295,6 +295,15 @@ private predicate isRequire(DataFlow::Node nd) {
|
||||
isCreateRequire(call.getCallee().flow()) and
|
||||
nd = call.flow()
|
||||
)
|
||||
or
|
||||
// `$.require('underscore');`.
|
||||
// NPM as supported in [XSJS files](https://www.npmjs.com/package/@sap/async-xsjs#npm-packages-support).
|
||||
exists(MethodCallExpr require |
|
||||
nd.getFile().getExtension() = ["xsjs", "xsjslib"] and
|
||||
require.getCalleeName() = "require" and
|
||||
require.getReceiver().(GlobalVarAccess).getName() = "$" and
|
||||
nd = require.getCallee().flow()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/javascript-queries
|
||||
pack: codeql/javascript-all
|
||||
extensible: requiredHelmetSecuritySetting
|
||||
data:
|
||||
- ["frameguard"]
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* Provides classes for working with Helmet
|
||||
*/
|
||||
|
||||
private import javascript
|
||||
|
||||
/**
|
||||
* A write to a property of a route handler from the "helmet" module.
|
||||
*/
|
||||
class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite {
|
||||
ExpressLibraries::HelmetRouteHandler helmet;
|
||||
|
||||
HelmetProperty() {
|
||||
this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the route handler associated to this property.
|
||||
*/
|
||||
ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet }
|
||||
|
||||
/**
|
||||
* Gets the boolean value of this property, if it may evaluate to a `Boolean`.
|
||||
*/
|
||||
predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) }
|
||||
|
||||
/**
|
||||
* Gets the name of the `HelmetProperty`.
|
||||
*/
|
||||
string getName() { result = DataFlow::PropWrite.super.getPropertyName() }
|
||||
|
||||
/**
|
||||
* read from data extensions to allow enforcing custom settings
|
||||
*/
|
||||
predicate isImportantSecuritySetting() { requiredHelmetSecuritySetting(this.getName()) }
|
||||
}
|
||||
|
||||
/**
|
||||
* defaults are located in `javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml`
|
||||
*/
|
||||
extensible predicate requiredHelmetSecuritySetting(string name);
|
||||
@@ -24,7 +24,7 @@ A suitable [model pack](https://docs.github.com/en/code-security/codeql-cli/usin
|
||||
name: my-org/javascript-helmet-insecure-config-model-pack
|
||||
version: 1.0.0
|
||||
extensionTargets:
|
||||
codeql/java-all: '*'
|
||||
codeql/javascript-all: '*'
|
||||
dataExtensions:
|
||||
- models/**/*.yml
|
||||
```
|
||||
|
||||
@@ -12,30 +12,8 @@
|
||||
*/
|
||||
|
||||
import javascript
|
||||
import DataFlow
|
||||
import semmle.javascript.frameworks.ExpressModules
|
||||
|
||||
class HelmetProperty extends DataFlow::Node instanceof DataFlow::PropWrite {
|
||||
ExpressLibraries::HelmetRouteHandler helmet;
|
||||
|
||||
HelmetProperty() {
|
||||
this = helmet.(DataFlow::CallNode).getAnArgument().getALocalSource().getAPropertyWrite()
|
||||
}
|
||||
|
||||
ExpressLibraries::HelmetRouteHandler getHelmet() { result = helmet }
|
||||
|
||||
predicate isFalse() { DataFlow::PropWrite.super.getRhs().mayHaveBooleanValue(false) }
|
||||
|
||||
string getName() { result = DataFlow::PropWrite.super.getPropertyName() }
|
||||
|
||||
predicate isImportantSecuritySetting() {
|
||||
// read from data extensions to allow enforcing custom settings
|
||||
// defaults are located in javascript/ql/lib/semmle/frameworks/helmet/Helmet.Required.Setting.model.yml
|
||||
requiredHelmetSecuritySetting(this.getName())
|
||||
}
|
||||
}
|
||||
|
||||
extensible predicate requiredHelmetSecuritySetting(string name);
|
||||
import semmle.javascript.frameworks.helmet.Helmet
|
||||
|
||||
from HelmetProperty helmetProperty, ExpressLibraries::HelmetRouteHandler helmet
|
||||
where
|
||||
|
||||
@@ -9,3 +9,4 @@
|
||||
| tst.js:35:13:35:43 | crypto. ... an(512) | Creation of an asymmetric key uses 512 bits, which is below 2048 and considered breakable. |
|
||||
| tst.js:39:13:39:33 | new Nod ... : 512}) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. |
|
||||
| tst.js:43:1:43:31 | key.gen ... 65537) | Creation of an asymmetric RSA key uses 512 bits, which is below 2048 and considered breakable. |
|
||||
| tst.xsjs:3:14:3:71 | crypto. ... 1024 }) | Creation of an asymmetric RSA key uses 1024 bits, which is below 2048 and considered breakable. |
|
||||
|
||||
5
javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs
Normal file
5
javascript/ql/test/query-tests/Security/CWE-326/tst.xsjs
Normal file
@@ -0,0 +1,5 @@
|
||||
const crypto = $.require("crypto");
|
||||
|
||||
const bad1 = crypto.generateKeyPairSync("rsa", { modulusLength: 1024 }); // NOT OK
|
||||
|
||||
const good1 = crypto.generateKeyPairSync("rsa", { modulusLength: 4096 }); // OK
|
||||
@@ -1,13 +1,3 @@
|
||||
load("@buildifier_prebuilt//:rules.bzl", "buildifier")
|
||||
|
||||
buildifier(
|
||||
name = "buildifier",
|
||||
exclude_patterns = [
|
||||
"./.git/*",
|
||||
],
|
||||
lint_mode = "fix",
|
||||
)
|
||||
|
||||
sh_library(
|
||||
name = "sh_runfiles",
|
||||
srcs = ["runfiles.sh"],
|
||||
|
||||
9
misc/bazel/buildifier/BUILD.bazel
Normal file
9
misc/bazel/buildifier/BUILD.bazel
Normal file
@@ -0,0 +1,9 @@
|
||||
load("@buildifier_prebuilt//:rules.bzl", "buildifier")
|
||||
|
||||
buildifier(
|
||||
name = "buildifier",
|
||||
exclude_patterns = [
|
||||
"./.git/*",
|
||||
],
|
||||
lint_mode = "fix",
|
||||
)
|
||||
@@ -16,13 +16,13 @@ import shutil
|
||||
import json
|
||||
import typing
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
from urllib.parse import urlparse
|
||||
import re
|
||||
import base64
|
||||
from dataclasses import dataclass
|
||||
import argparse
|
||||
|
||||
|
||||
def options():
|
||||
p = argparse.ArgumentParser(description=__doc__)
|
||||
p.add_argument("--hash-only", action="store_true")
|
||||
@@ -30,6 +30,12 @@ def options():
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
TIMEOUT = 20
|
||||
|
||||
def warn(message: str) -> None:
|
||||
print(f"WARNING: {message}", file=sys.stderr)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Endpoint:
|
||||
name: str
|
||||
@@ -41,6 +47,10 @@ class Endpoint:
|
||||
self.headers.update((k.capitalize(), v) for k, v in d)
|
||||
|
||||
|
||||
class NoEndpointsFound(Exception):
|
||||
pass
|
||||
|
||||
|
||||
opts = options()
|
||||
sources = [p.resolve() for p in opts.sources]
|
||||
source_dir = pathlib.Path(os.path.commonpath(src.parent for src in sources))
|
||||
@@ -105,18 +115,12 @@ def get_endpoints() -> typing.Iterable[Endpoint]:
|
||||
"download",
|
||||
]
|
||||
try:
|
||||
res = subprocess.run(cmd, stdout=subprocess.PIPE, timeout=15)
|
||||
res = subprocess.run(cmd, stdout=subprocess.PIPE, timeout=TIMEOUT)
|
||||
except subprocess.TimeoutExpired:
|
||||
print(
|
||||
f"WARNING: ssh timed out when connecting to {server}, ignoring {endpoint.name} endpoint",
|
||||
file=sys.stderr,
|
||||
)
|
||||
warn(f"ssh timed out when connecting to {server}, ignoring {endpoint.name} endpoint")
|
||||
continue
|
||||
if res.returncode != 0:
|
||||
print(
|
||||
f"WARNING: ssh failed when connecting to {server}, ignoring {endpoint.name} endpoint",
|
||||
file=sys.stderr,
|
||||
)
|
||||
warn(f"ssh failed when connecting to {server}, ignoring {endpoint.name} endpoint")
|
||||
continue
|
||||
ssh_resp = json.loads(res.stdout)
|
||||
endpoint.href = ssh_resp.get("href", endpoint)
|
||||
@@ -139,10 +143,7 @@ def get_endpoints() -> typing.Iterable[Endpoint]:
|
||||
input=f"protocol={url.scheme}\nhost={url.netloc}\npath={url.path[1:]}\n",
|
||||
)
|
||||
if credentials is None:
|
||||
print(
|
||||
f"WARNING: no authorization method found, ignoring {data.name} endpoint",
|
||||
file=sys.stderr,
|
||||
)
|
||||
warn(f"no authorization method found, ignoring {endpoint.name} endpoint")
|
||||
continue
|
||||
credentials = dict(get_env(credentials))
|
||||
auth = base64.b64encode(
|
||||
@@ -176,10 +177,10 @@ def get_locations(objects):
|
||||
data=json.dumps(data).encode("ascii"),
|
||||
)
|
||||
try:
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
with urllib.request.urlopen(req, timeout=TIMEOUT) as resp:
|
||||
data = json.load(resp)
|
||||
except urllib.request.HTTPError as e:
|
||||
print(f"WARNING: encountered HTTPError {e}, ignoring endpoint {e.name}")
|
||||
except urllib.error.URLError as e:
|
||||
warn(f"encountered {type(e).__name__} {e}, ignoring endpoint {endpoint.name}")
|
||||
continue
|
||||
assert len(data["objects"]) == len(
|
||||
indexes
|
||||
@@ -187,7 +188,7 @@ def get_locations(objects):
|
||||
for i, resp in zip(indexes, data["objects"]):
|
||||
ret[i] = f'{resp["oid"]} {resp["actions"]["download"]["href"]}'
|
||||
return ret
|
||||
raise Exception(f"no valid endpoint found")
|
||||
raise NoEndpointsFound
|
||||
|
||||
|
||||
def get_lfs_object(path):
|
||||
@@ -204,6 +205,10 @@ def get_lfs_object(path):
|
||||
return {"oid": sha256, "size": size}
|
||||
|
||||
|
||||
objects = [get_lfs_object(src) for src in sources]
|
||||
for resp in get_locations(objects):
|
||||
print(resp)
|
||||
try:
|
||||
objects = [get_lfs_object(src) for src in sources]
|
||||
for resp in get_locations(objects):
|
||||
print(resp)
|
||||
except NoEndpointsFound as e:
|
||||
print(f"ERROR: no valid endpoints found", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user