mirror of
https://github.com/github/codeql.git
synced 2026-01-11 21:50:28 +01:00
Merge pull request #16431 from michaelnebel/java/madinlinetest
Java: Models as Data inline like test.
This commit is contained in:
65
java/ql/test/TestUtilities/InlineMadTest.qll
Normal file
65
java/ql/test/TestUtilities/InlineMadTest.qll
Normal file
@@ -0,0 +1,65 @@
|
||||
import java as J
|
||||
|
||||
private signature module InlineMadTestLangSig {
|
||||
/**
|
||||
* A base class of callables for modeling.
|
||||
*/
|
||||
class Callable;
|
||||
|
||||
/**
|
||||
* Gets a relevant code comment for `c`, if any.
|
||||
*/
|
||||
string getComment(Callable c);
|
||||
}
|
||||
|
||||
private module InlineMadTestImpl<InlineMadTestLangSig Lang> {
|
||||
private class Callable = Lang::Callable;
|
||||
|
||||
signature module InlineMadTestConfigSig {
|
||||
/**
|
||||
* Gets the kind of a captured model.
|
||||
*/
|
||||
string getKind();
|
||||
|
||||
/**
|
||||
* Gets a captured model for `c`, if any.
|
||||
*/
|
||||
string getCapturedModel(Callable c);
|
||||
}
|
||||
|
||||
module InlineMadTest<InlineMadTestConfigSig Input> {
|
||||
private string expects(Callable c) {
|
||||
Lang::getComment(c).regexpCapture(" *(SPURIOUS-)?" + Input::getKind() + "=(.*)", 2) = result
|
||||
}
|
||||
|
||||
query predicate unexpectedModel(string msg) {
|
||||
exists(Callable c, string flow |
|
||||
flow = Input::getCapturedModel(c) and
|
||||
not flow = expects(c) and
|
||||
msg = "Unexpected " + Input::getKind() + " found: " + flow
|
||||
)
|
||||
}
|
||||
|
||||
query predicate expectedModel(string msg) {
|
||||
exists(Callable c, string e |
|
||||
e = expects(c) and
|
||||
not e = Input::getCapturedModel(c) and
|
||||
msg = "Expected " + Input::getKind() + " missing: " + e
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private module InlineMadTestLang implements InlineMadTestLangSig {
|
||||
class Callable = J::Callable;
|
||||
|
||||
string getComment(Callable c) {
|
||||
exists(J::Javadoc doc |
|
||||
hasJavadoc(c, doc) and
|
||||
isNormalComment(doc) and
|
||||
result = doc.getChild(0).toString()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
import InlineMadTestImpl<InlineMadTestLang>
|
||||
@@ -1,25 +1,2 @@
|
||||
| p;Factory;getIntValue;();summary;df-generated |
|
||||
| p;FinalClass;returnsConstant;();summary;df-generated |
|
||||
| p;FluentAPI$Inner;notThis;(String);summary;df-generated |
|
||||
| p;ImmutablePojo;getX;();summary;df-generated |
|
||||
| p;Joiner;length;();summary;df-generated |
|
||||
| p;ParamFlow;ignorePrimitiveReturnValue;(String);summary;df-generated |
|
||||
| p;ParamFlow;mapType;(Class);summary;df-generated |
|
||||
| p;Pojo;doNotSetValue;(String);summary;df-generated |
|
||||
| p;Pojo;getBigDecimal;();summary;df-generated |
|
||||
| p;Pojo;getBigInt;();summary;df-generated |
|
||||
| p;Pojo;getBoxedArray;();summary;df-generated |
|
||||
| p;Pojo;getBoxedCollection;();summary;df-generated |
|
||||
| p;Pojo;getBoxedValue;();summary;df-generated |
|
||||
| p;Pojo;getFloatArray;();summary;df-generated |
|
||||
| p;Pojo;getIntValue;();summary;df-generated |
|
||||
| p;Pojo;getPrimitiveArray;();summary;df-generated |
|
||||
| p;PrivateFlowViaPublicInterface$SPI;openStreamNone;();summary;df-generated |
|
||||
| p;PrivateFlowViaPublicInterface;createAnSPIWithoutTrackingFile;(File);summary;df-generated |
|
||||
| p;Sinks;copyFileToDirectory;(Path,Path,CopyOption[]);summary;df-generated |
|
||||
| p;Sinks;propagate;(String);summary;df-generated |
|
||||
| p;Sinks;readUrl;(URL,Charset);summary;df-generated |
|
||||
| p;Sources;readUrl;(URL);summary;df-generated |
|
||||
| p;Sources;socketStream;();summary;df-generated |
|
||||
| p;Sources;sourceToParameter;(InputStream[],List);summary;df-generated |
|
||||
| p;Sources;wrappedSocketStream;();summary;df-generated |
|
||||
unexpectedModel
|
||||
expectedModel
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import java
|
||||
import utils.modelgenerator.internal.CaptureSummaryFlowQuery
|
||||
import TestUtilities.InlineMadTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(Callable c) { result = captureNoFlow(c) }
|
||||
|
||||
string getKind() { result = "neutral" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -1 +0,0 @@
|
||||
utils/modelgenerator/CaptureNeutralModels.ql
|
||||
@@ -1,5 +1,2 @@
|
||||
| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];path-injection;df-generated |
|
||||
| p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[0];path-injection;df-generated |
|
||||
| p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[1];path-injection;df-generated |
|
||||
| p;Sinks;true;readUrl;(URL,Charset);;Argument[0];request-forgery;df-generated |
|
||||
| p;Sources;true;readUrl;(URL);;Argument[0];request-forgery;df-generated |
|
||||
unexpectedModel
|
||||
expectedModel
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import java
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import TestUtilities.InlineMadTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(Callable c) { result = captureSink(c) }
|
||||
|
||||
string getKind() { result = "sink" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -1 +0,0 @@
|
||||
utils/modelgenerator/CaptureSinkModels.ql
|
||||
@@ -1,5 +1,2 @@
|
||||
| p;Sources;true;readUrl;(URL);;ReturnValue;remote;df-generated |
|
||||
| p;Sources;true;socketStream;();;ReturnValue;remote;df-generated |
|
||||
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[0].ArrayElement;remote;df-generated |
|
||||
| p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[1].Element;remote;df-generated |
|
||||
| p;Sources;true;wrappedSocketStream;();;ReturnValue;remote;df-generated |
|
||||
unexpectedModel
|
||||
expectedModel
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import java
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import TestUtilities.InlineMadTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(Callable c) { result = captureSource(c) }
|
||||
|
||||
string getKind() { result = "source" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -1 +0,0 @@
|
||||
utils/modelgenerator/CaptureSourceModels.ql
|
||||
@@ -1,47 +1,2 @@
|
||||
| p;Factory;false;create;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;Factory;false;create;(String,int);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;Factory;false;getValue;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;FluentAPI;false;returnsThis;(String);;Argument[this];ReturnValue;value;df-generated |
|
||||
| p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;ImmutablePojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;ImmutablePojo;false;or;(String);;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;InnerHolder;false;append;(String);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;InnerHolder;false;getValue;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;InnerHolder;false;setContext;(String);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;add;(CharSequence);;Argument[this];ReturnValue;value;df-generated |
|
||||
| p;Joiner;false;merge;(Joiner);;Argument[this];ReturnValue;value;df-generated |
|
||||
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;Joiner;false;setEmptyValue;(CharSequence);;Argument[this];ReturnValue;value;df-generated |
|
||||
| p;MultipleImpl2$IInterface;true;m;(Object);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;MultipleImpls$Strat2;true;getValue;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;taint;df-generated |
|
||||
| p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated |
|
||||
| p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];taint;df-generated |
|
||||
| p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];taint;df-generated |
|
||||
| p;Pojo;false;fillIn;(List);;Argument[this];Argument[0].Element;taint;df-generated |
|
||||
| p;Pojo;false;getBoxedBytes;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;Pojo;false;getBoxedChars;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;Pojo;false;getByteArray;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;Pojo;false;getCharArray;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;Pojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;Pojo;false;setValue;(String);;Argument[0];Argument[this];taint;df-generated |
|
||||
| p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated |
|
||||
| p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint;df-generated |
|
||||
unexpectedModel
|
||||
expectedModel
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import java
|
||||
import utils.modelgenerator.internal.CaptureSummaryFlowQuery
|
||||
import TestUtilities.InlineMadTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(Callable c) { result = captureFlow(c) }
|
||||
|
||||
string getKind() { result = "summary" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -1 +0,0 @@
|
||||
utils/modelgenerator/CaptureSummaryModels.ql
|
||||
@@ -2,29 +2,32 @@ package p;
|
||||
|
||||
public final class Factory {
|
||||
|
||||
private String value;
|
||||
private String value;
|
||||
|
||||
private int intValue;
|
||||
private int intValue;
|
||||
|
||||
public static Factory create(String value, int foo) {
|
||||
return new Factory(value, foo);
|
||||
}
|
||||
// summary=p;Factory;false;create;(String,int);;Argument[0];ReturnValue;taint;df-generated
|
||||
public static Factory create(String value, int foo) {
|
||||
return new Factory(value, foo);
|
||||
}
|
||||
|
||||
public static Factory create(String value) {
|
||||
return new Factory(value, 0);
|
||||
}
|
||||
// summary=p;Factory;false;create;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public static Factory create(String value) {
|
||||
return new Factory(value, 0);
|
||||
}
|
||||
|
||||
private Factory(String value, int intValue) {
|
||||
this.value = value;
|
||||
this.intValue = intValue;
|
||||
}
|
||||
private Factory(String value, int intValue) {
|
||||
this.value = value;
|
||||
this.intValue = intValue;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
// summary=p;Factory;false;getValue;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
|
||||
}
|
||||
// neutral=p;Factory;getIntValue;();summary;df-generated
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,15 @@ package p;
|
||||
|
||||
public final class FinalClass {
|
||||
|
||||
private static final String C = "constant";
|
||||
private static final String C = "constant";
|
||||
|
||||
public String returnsInput(String input) {
|
||||
return input;
|
||||
}
|
||||
// summary=p;FinalClass;false;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public String returnsInput(String input) {
|
||||
return input;
|
||||
}
|
||||
|
||||
public String returnsConstant() {
|
||||
return C;
|
||||
}
|
||||
|
||||
}
|
||||
// neutral=p;FinalClass;returnsConstant;();summary;df-generated
|
||||
public String returnsConstant() {
|
||||
return C;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,15 @@ package p;
|
||||
|
||||
public final class FluentAPI {
|
||||
|
||||
public FluentAPI returnsThis(String input) {
|
||||
return this;
|
||||
}
|
||||
// summary=p;FluentAPI;false;returnsThis;(String);;Argument[this];ReturnValue;value;df-generated
|
||||
public FluentAPI returnsThis(String input) {
|
||||
return this;
|
||||
}
|
||||
|
||||
public class Inner {
|
||||
public FluentAPI notThis(String input) {
|
||||
return FluentAPI.this;
|
||||
}
|
||||
public class Inner {
|
||||
// neutral=p;FluentAPI$Inner;notThis;(String);summary;df-generated
|
||||
public FluentAPI notThis(String input) {
|
||||
return FluentAPI.this;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,25 +2,29 @@ package p;
|
||||
|
||||
public final class ImmutablePojo {
|
||||
|
||||
private final String value;
|
||||
private final String value;
|
||||
|
||||
private final long x;
|
||||
private final long x;
|
||||
|
||||
public ImmutablePojo(String value, int x) {
|
||||
this.value = value;
|
||||
this.x = x;
|
||||
}
|
||||
// summary=p;ImmutablePojo;false;ImmutablePojo;(String,int);;Argument[0];Argument[this];taint;df-generated
|
||||
public ImmutablePojo(String value, int x) {
|
||||
this.value = value;
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
// summary=p;ImmutablePojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public long getX() {
|
||||
return x;
|
||||
}
|
||||
// neutral=p;ImmutablePojo;getX;();summary;df-generated
|
||||
public long getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public String or(String defaultValue) {
|
||||
return value != null ? value : defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
// summary=p;ImmutablePojo;false;or;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
// summary=p;ImmutablePojo;false;or;(String);;Argument[this];ReturnValue;taint;df-generated
|
||||
public String or(String defaultValue) {
|
||||
return value != null ? value : defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package p;
|
||||
|
||||
public class InnerClasses {
|
||||
|
||||
class IgnoreMe {
|
||||
public String no(String input) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
public class CaptureMe {
|
||||
public String yesCm(String input) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
public String yes(String input) {
|
||||
return input;
|
||||
class IgnoreMe {
|
||||
public String no(String input) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
public class CaptureMe {
|
||||
// summary=p;InnerClasses$CaptureMe;true;yesCm;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public String yesCm(String input) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
// summary=p;InnerClasses;true;yes;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public String yes(String input) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,36 +2,39 @@ package p;
|
||||
|
||||
public final class InnerHolder {
|
||||
|
||||
private class Context {
|
||||
private String value;
|
||||
private class Context {
|
||||
private String value;
|
||||
|
||||
Context(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
private Context context = null;
|
||||
|
||||
private StringBuilder sb = new StringBuilder();
|
||||
|
||||
public void setContext(String value) {
|
||||
context = new Context(value);
|
||||
}
|
||||
|
||||
public void explicitSetContext(String value) {
|
||||
this.context = new Context(value);
|
||||
}
|
||||
|
||||
public void append(String value) {
|
||||
sb.append(value);
|
||||
Context(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return context.getValue();
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private Context context = null;
|
||||
|
||||
private StringBuilder sb = new StringBuilder();
|
||||
|
||||
// summary=p;InnerHolder;false;setContext;(String);;Argument[0];Argument[this];taint;df-generated
|
||||
public void setContext(String value) {
|
||||
context = new Context(value);
|
||||
}
|
||||
|
||||
// summary=p;InnerHolder;false;explicitSetContext;(String);;Argument[0];Argument[this];taint;df-generated
|
||||
public void explicitSetContext(String value) {
|
||||
this.context = new Context(value);
|
||||
}
|
||||
|
||||
// summary=p;InnerHolder;false;append;(String);;Argument[0];Argument[this];taint;df-generated
|
||||
public void append(String value) {
|
||||
sb.append(value);
|
||||
}
|
||||
|
||||
// summary=p;InnerHolder;false;getValue;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public String getValue() {
|
||||
return context.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,115 +4,123 @@ import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class Joiner {
|
||||
private final String prefix;
|
||||
private final String delimiter;
|
||||
private final String suffix;
|
||||
private String[] elts;
|
||||
private int size;
|
||||
private int len;
|
||||
private String emptyValue;
|
||||
public Joiner(CharSequence delimiter) {
|
||||
this(delimiter, "", "");
|
||||
}
|
||||
private final String prefix;
|
||||
private final String delimiter;
|
||||
private final String suffix;
|
||||
private String[] elts;
|
||||
private int size;
|
||||
private int len;
|
||||
private String emptyValue;
|
||||
|
||||
public Joiner(CharSequence delimiter,
|
||||
CharSequence prefix,
|
||||
CharSequence suffix) {
|
||||
Objects.requireNonNull(prefix, "The prefix must not be null");
|
||||
Objects.requireNonNull(delimiter, "The delimiter must not be null");
|
||||
Objects.requireNonNull(suffix, "The suffix must not be null");
|
||||
this.prefix = prefix.toString();
|
||||
this.delimiter = delimiter.toString();
|
||||
this.suffix = suffix.toString();
|
||||
checkAddLength(0, 0);
|
||||
}
|
||||
// summary=p;Joiner;false;Joiner;(CharSequence);;Argument[0];Argument[this];taint;df-generated
|
||||
public Joiner(CharSequence delimiter) {
|
||||
this(delimiter, "", "");
|
||||
}
|
||||
|
||||
public Joiner setEmptyValue(CharSequence emptyValue) {
|
||||
this.emptyValue = Objects.requireNonNull(emptyValue,
|
||||
"The empty value must not be null").toString();
|
||||
return this;
|
||||
}
|
||||
// summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[0];Argument[this];taint;df-generated
|
||||
// summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[1];Argument[this];taint;df-generated
|
||||
// summary=p;Joiner;false;Joiner;(CharSequence,CharSequence,CharSequence);;Argument[2];Argument[this];taint;df-generated
|
||||
public Joiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) {
|
||||
Objects.requireNonNull(prefix, "The prefix must not be null");
|
||||
Objects.requireNonNull(delimiter, "The delimiter must not be null");
|
||||
Objects.requireNonNull(suffix, "The suffix must not be null");
|
||||
this.prefix = prefix.toString();
|
||||
this.delimiter = delimiter.toString();
|
||||
this.suffix = suffix.toString();
|
||||
checkAddLength(0, 0);
|
||||
}
|
||||
|
||||
private static int getChars(String s, char[] chars, int start) {
|
||||
int len = s.length();
|
||||
s.getChars(0, len, chars, start);
|
||||
return len;
|
||||
}
|
||||
// summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[this];taint;df-generated
|
||||
// summary=p;Joiner;false;setEmptyValue;(CharSequence);;Argument[this];ReturnValue;value;df-generated
|
||||
public Joiner setEmptyValue(CharSequence emptyValue) {
|
||||
this.emptyValue =
|
||||
Objects.requireNonNull(emptyValue, "The empty value must not be null").toString();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final String[] elts = this.elts;
|
||||
if (elts == null && emptyValue != null) {
|
||||
return emptyValue;
|
||||
}
|
||||
final int size = this.size;
|
||||
final int addLen = prefix.length() + suffix.length();
|
||||
if (addLen == 0) {
|
||||
compactElts();
|
||||
return size == 0 ? "" : elts[0];
|
||||
}
|
||||
final String delimiter = this.delimiter;
|
||||
final char[] chars = new char[len + addLen];
|
||||
int k = getChars(prefix, chars, 0);
|
||||
if (size > 0) {
|
||||
k += getChars(elts[0], chars, k);
|
||||
for (int i = 1; i < size; i++) {
|
||||
k += getChars(delimiter, chars, k);
|
||||
k += getChars(elts[i], chars, k);
|
||||
}
|
||||
}
|
||||
k += getChars(suffix, chars, k);
|
||||
return new String(chars);
|
||||
}
|
||||
private static int getChars(String s, char[] chars, int start) {
|
||||
int len = s.length();
|
||||
s.getChars(0, len, chars, start);
|
||||
return len;
|
||||
}
|
||||
|
||||
public Joiner add(CharSequence newElement) {
|
||||
final String elt = String.valueOf(newElement);
|
||||
if (elts == null) {
|
||||
elts = new String[8];
|
||||
} else {
|
||||
if (size == elts.length)
|
||||
elts = Arrays.copyOf(elts, 2 * size);
|
||||
len = checkAddLength(len, delimiter.length());
|
||||
}
|
||||
len = checkAddLength(len, elt.length());
|
||||
elts[size++] = elt;
|
||||
return this;
|
||||
@Override
|
||||
public String toString() {
|
||||
final String[] elts = this.elts;
|
||||
if (elts == null && emptyValue != null) {
|
||||
return emptyValue;
|
||||
}
|
||||
final int size = this.size;
|
||||
final int addLen = prefix.length() + suffix.length();
|
||||
if (addLen == 0) {
|
||||
compactElts();
|
||||
return size == 0 ? "" : elts[0];
|
||||
}
|
||||
final String delimiter = this.delimiter;
|
||||
final char[] chars = new char[len + addLen];
|
||||
int k = getChars(prefix, chars, 0);
|
||||
if (size > 0) {
|
||||
k += getChars(elts[0], chars, k);
|
||||
for (int i = 1; i < size; i++) {
|
||||
k += getChars(delimiter, chars, k);
|
||||
k += getChars(elts[i], chars, k);
|
||||
}
|
||||
}
|
||||
k += getChars(suffix, chars, k);
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private int checkAddLength(int oldLen, int inc) {
|
||||
long newLen = (long)oldLen + (long)inc;
|
||||
long tmpLen = newLen + (long)prefix.length() + (long)suffix.length();
|
||||
if (tmpLen != (int)tmpLen) {
|
||||
throw new OutOfMemoryError("Requested array size exceeds VM limit");
|
||||
}
|
||||
return (int)newLen;
|
||||
// summary=p;Joiner;false;add;(CharSequence);;Argument[this];ReturnValue;value;df-generated
|
||||
public Joiner add(CharSequence newElement) {
|
||||
final String elt = String.valueOf(newElement);
|
||||
if (elts == null) {
|
||||
elts = new String[8];
|
||||
} else {
|
||||
if (size == elts.length) elts = Arrays.copyOf(elts, 2 * size);
|
||||
len = checkAddLength(len, delimiter.length());
|
||||
}
|
||||
len = checkAddLength(len, elt.length());
|
||||
elts[size++] = elt;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Joiner merge(Joiner other) {
|
||||
Objects.requireNonNull(other);
|
||||
if (other.elts == null) {
|
||||
return this;
|
||||
}
|
||||
other.compactElts();
|
||||
return add(other.elts[0]);
|
||||
private int checkAddLength(int oldLen, int inc) {
|
||||
long newLen = (long) oldLen + (long) inc;
|
||||
long tmpLen = newLen + (long) prefix.length() + (long) suffix.length();
|
||||
if (tmpLen != (int) tmpLen) {
|
||||
throw new OutOfMemoryError("Requested array size exceeds VM limit");
|
||||
}
|
||||
return (int) newLen;
|
||||
}
|
||||
|
||||
private void compactElts() {
|
||||
if (size > 1) {
|
||||
final char[] chars = new char[len];
|
||||
int i = 1, k = getChars(elts[0], chars, 0);
|
||||
do {
|
||||
k += getChars(delimiter, chars, k);
|
||||
k += getChars(elts[i], chars, k);
|
||||
elts[i] = null;
|
||||
} while (++i < size);
|
||||
size = 1;
|
||||
elts[0] = new String(chars);
|
||||
}
|
||||
// summary=p;Joiner;false;merge;(Joiner);;Argument[this];ReturnValue;value;df-generated
|
||||
public Joiner merge(Joiner other) {
|
||||
Objects.requireNonNull(other);
|
||||
if (other.elts == null) {
|
||||
return this;
|
||||
}
|
||||
other.compactElts();
|
||||
return add(other.elts[0]);
|
||||
}
|
||||
|
||||
public int length() {
|
||||
return (size == 0 && emptyValue != null) ? emptyValue.length() :
|
||||
len + prefix.length() + suffix.length();
|
||||
private void compactElts() {
|
||||
if (size > 1) {
|
||||
final char[] chars = new char[len];
|
||||
int i = 1, k = getChars(elts[0], chars, 0);
|
||||
do {
|
||||
k += getChars(delimiter, chars, k);
|
||||
k += getChars(elts[i], chars, k);
|
||||
elts[i] = null;
|
||||
} while (++i < size);
|
||||
size = 1;
|
||||
elts[0] = new String(chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// neutral=p;Joiner;length;();summary;df-generated
|
||||
public int length() {
|
||||
return (size == 0 && emptyValue != null)
|
||||
? emptyValue.length()
|
||||
: len + prefix.length() + suffix.length();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,22 +2,23 @@ package p;
|
||||
|
||||
class MultipleImpl2 {
|
||||
|
||||
// Multiple implementations of the same interface.
|
||||
// This is used to test that we only generate a summary model and
|
||||
// not neutral summary model for `IInterface.m`.
|
||||
public interface IInterface {
|
||||
Object m(Object value);
|
||||
}
|
||||
// Multiple implementations of the same interface.
|
||||
// This is used to test that we only generate a summary model and
|
||||
// not neutral summary model for `IInterface.m`.
|
||||
public interface IInterface {
|
||||
Object m(Object value);
|
||||
}
|
||||
|
||||
public class Impl1 implements IInterface {
|
||||
public Object m(Object value) {
|
||||
return null;
|
||||
}
|
||||
public class Impl1 implements IInterface {
|
||||
public Object m(Object value) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class Impl2 implements IInterface {
|
||||
public Object m(Object value) {
|
||||
return value;
|
||||
}
|
||||
public class Impl2 implements IInterface {
|
||||
// summary=p;MultipleImpl2$IInterface;true;m;(Object);;Argument[0];ReturnValue;taint;df-generated
|
||||
public Object m(Object value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,35 +4,38 @@ import java.util.concurrent.Callable;
|
||||
|
||||
public class MultipleImpls {
|
||||
|
||||
public static interface Strategy {
|
||||
String doSomething(String value);
|
||||
public static interface Strategy {
|
||||
String doSomething(String value);
|
||||
}
|
||||
|
||||
public static class Strat1 implements Strategy {
|
||||
// summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public String doSomething(String value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
// implements in different library should not count as impl
|
||||
public static class Strat3 implements Callable<String> {
|
||||
|
||||
@Override
|
||||
public String call() throws Exception {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Strat2 implements Strategy {
|
||||
private String foo;
|
||||
|
||||
// summary=p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[this];taint;df-generated
|
||||
public String doSomething(String value) {
|
||||
this.foo = value;
|
||||
return "none";
|
||||
}
|
||||
|
||||
public static class Strat1 implements Strategy {
|
||||
public String doSomething(String value) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
// implements in different library should not count as impl
|
||||
public static class Strat3 implements Callable<String> {
|
||||
|
||||
@Override
|
||||
public String call() throws Exception {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
public static class Strat2 implements Strategy {
|
||||
private String foo;
|
||||
|
||||
public String doSomething(String value) {
|
||||
this.foo = value;
|
||||
return "none";
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return this.foo;
|
||||
}
|
||||
// summary=p;MultipleImpls$Strat2;true;getValue;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public String getValue() {
|
||||
return this.foo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,64 +1,73 @@
|
||||
package p;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class ParamFlow {
|
||||
|
||||
public String returnsInput(String input) {
|
||||
return input;
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnsInput;(String);;Argument[0];ReturnValue;taint;df-generated
|
||||
public String returnsInput(String input) {
|
||||
return input;
|
||||
}
|
||||
|
||||
public int ignorePrimitiveReturnValue(String input) {
|
||||
return input.length();
|
||||
}
|
||||
// neutral=p;ParamFlow;ignorePrimitiveReturnValue;(String);summary;df-generated
|
||||
public int ignorePrimitiveReturnValue(String input) {
|
||||
return input.length();
|
||||
}
|
||||
|
||||
public String returnMultipleParameters(String one, String two) {
|
||||
if (System.currentTimeMillis() > 100) {
|
||||
return two;
|
||||
}
|
||||
return one;
|
||||
// summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[0];ReturnValue;taint;df-generated
|
||||
// summary=p;ParamFlow;true;returnMultipleParameters;(String,String);;Argument[1];ReturnValue;taint;df-generated
|
||||
public String returnMultipleParameters(String one, String two) {
|
||||
if (System.currentTimeMillis() > 100) {
|
||||
return two;
|
||||
}
|
||||
return one;
|
||||
}
|
||||
|
||||
public String returnArrayElement(String[] input) {
|
||||
return input[0];
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnArrayElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated
|
||||
public String returnArrayElement(String[] input) {
|
||||
return input[0];
|
||||
}
|
||||
|
||||
public String returnVarArgElement(String... input) {
|
||||
return input[0];
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnVarArgElement;(String[]);;Argument[0].ArrayElement;ReturnValue;taint;df-generated
|
||||
public String returnVarArgElement(String... input) {
|
||||
return input[0];
|
||||
}
|
||||
|
||||
public String returnCollectionElement(List<String> input) {
|
||||
return input.get(0);
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnCollectionElement;(List);;Argument[0].Element;ReturnValue;taint;df-generated
|
||||
public String returnCollectionElement(List<String> input) {
|
||||
return input.get(0);
|
||||
}
|
||||
|
||||
public String returnIteratorElement(Iterator<String> input) {
|
||||
return input.next();
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnIteratorElement;(Iterator);;Argument[0].Element;ReturnValue;taint;df-generated
|
||||
public String returnIteratorElement(Iterator<String> input) {
|
||||
return input.next();
|
||||
}
|
||||
|
||||
public String returnIterableElement(Iterable<String> input) {
|
||||
return input.iterator().next();
|
||||
}
|
||||
// summary=p;ParamFlow;true;returnIterableElement;(Iterable);;Argument[0].Element;ReturnValue;taint;df-generated
|
||||
public String returnIterableElement(Iterable<String> input) {
|
||||
return input.iterator().next();
|
||||
}
|
||||
|
||||
public Class<?> mapType(Class<?> input) {
|
||||
return input;
|
||||
}
|
||||
// neutral=p;ParamFlow;mapType;(Class);summary;df-generated
|
||||
public Class<?> mapType(Class<?> input) {
|
||||
return input;
|
||||
}
|
||||
|
||||
public void writeChunked(byte[] data, OutputStream output)
|
||||
throws IOException {
|
||||
output.write(data, 0, data.length);
|
||||
}
|
||||
|
||||
public void writeChunked(char[] data, OutputStream output)
|
||||
throws IOException {
|
||||
output.write(String.valueOf(data).getBytes(), 0, data.length);
|
||||
}
|
||||
// summary=p;ParamFlow;true;writeChunked;(byte[],OutputStream);;Argument[0];Argument[1];taint;df-generated
|
||||
public void writeChunked(byte[] data, OutputStream output) throws IOException {
|
||||
output.write(data, 0, data.length);
|
||||
}
|
||||
|
||||
public void addTo(String data, List<String> target) {
|
||||
target.add(data);
|
||||
}
|
||||
// summary=p;ParamFlow;true;writeChunked;(char[],OutputStream);;Argument[0];Argument[1];taint;df-generated
|
||||
public void writeChunked(char[] data, OutputStream output) throws IOException {
|
||||
output.write(String.valueOf(data).getBytes(), 0, data.length);
|
||||
}
|
||||
|
||||
}
|
||||
// summary=p;ParamFlow;true;addTo;(String,List);;Argument[0];Argument[1].Element;taint;df-generated
|
||||
public void addTo(String data, List<String> target) {
|
||||
target.add(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,91 +8,106 @@ import java.util.List;
|
||||
|
||||
public final class Pojo {
|
||||
|
||||
private class Holder {
|
||||
private String value;
|
||||
|
||||
Holder(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
int length() {
|
||||
return value.length();
|
||||
}
|
||||
}
|
||||
|
||||
private class Holder {
|
||||
private String value;
|
||||
|
||||
private int intValue = 2;
|
||||
|
||||
private byte[] byteArray = new byte[] {1, 2, 3} ;
|
||||
private float[] floatArray = new float[] {1, 2, 3} ;
|
||||
private char[] charArray = new char[] {'a', 'b', 'c'} ;
|
||||
private List<Character> charList = Arrays.asList('a', 'b', 'c');
|
||||
private Byte[] byteObjectArray = new Byte[] { 1, 2, 3 };
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
Holder(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
int length() {
|
||||
return value.length();
|
||||
}
|
||||
}
|
||||
|
||||
public int doNotSetValue(String value) {
|
||||
Holder h = new Holder(value);
|
||||
return h.length();
|
||||
}
|
||||
private String value;
|
||||
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
private int intValue = 2;
|
||||
|
||||
public Integer getBoxedValue() {
|
||||
return Integer.valueOf(intValue);
|
||||
}
|
||||
private byte[] byteArray = new byte[] {1, 2, 3};
|
||||
private float[] floatArray = new float[] {1, 2, 3};
|
||||
private char[] charArray = new char[] {'a', 'b', 'c'};
|
||||
private List<Character> charList = Arrays.asList('a', 'b', 'c');
|
||||
private Byte[] byteObjectArray = new Byte[] {1, 2, 3};
|
||||
|
||||
public int[] getPrimitiveArray() {
|
||||
return new int[] { intValue };
|
||||
}
|
||||
// summary=p;Pojo;false;getValue;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public char[] getCharArray() {
|
||||
return charArray;
|
||||
}
|
||||
// summary=p;Pojo;false;setValue;(String);;Argument[0];Argument[this];taint;df-generated
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public byte[] getByteArray() {
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
public float[] getFloatArray() {
|
||||
return floatArray;
|
||||
}
|
||||
// neutral=p;Pojo;doNotSetValue;(String);summary;df-generated
|
||||
public int doNotSetValue(String value) {
|
||||
Holder h = new Holder(value);
|
||||
return h.length();
|
||||
}
|
||||
|
||||
public Integer[] getBoxedArray() {
|
||||
return new Integer[] { Integer.valueOf(intValue) };
|
||||
}
|
||||
|
||||
public Collection<Integer> getBoxedCollection() {
|
||||
return List.of(Integer.valueOf(intValue));
|
||||
}
|
||||
// neutral=p;Pojo;getIntValue;();summary;df-generated
|
||||
public int getIntValue() {
|
||||
return intValue;
|
||||
}
|
||||
|
||||
public List<Character> getBoxedChars() {
|
||||
return charList;
|
||||
}
|
||||
// neutral=p;Pojo;getBoxedValue;();summary;df-generated
|
||||
public Integer getBoxedValue() {
|
||||
return Integer.valueOf(intValue);
|
||||
}
|
||||
|
||||
public Byte[] getBoxedBytes() {
|
||||
return byteObjectArray;
|
||||
}
|
||||
|
||||
public BigInteger getBigInt() {
|
||||
return BigInteger.valueOf(intValue);
|
||||
}
|
||||
// neutral=p;Pojo;getPrimitiveArray;();summary;df-generated
|
||||
public int[] getPrimitiveArray() {
|
||||
return new int[] {intValue};
|
||||
}
|
||||
|
||||
public BigDecimal getBigDecimal() {
|
||||
return new BigDecimal(value);
|
||||
}
|
||||
// summary=p;Pojo;false;getCharArray;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public char[] getCharArray() {
|
||||
return charArray;
|
||||
}
|
||||
|
||||
public void fillIn(List<String> target) {
|
||||
target.add(value);
|
||||
}
|
||||
// summary=p;Pojo;false;getByteArray;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public byte[] getByteArray() {
|
||||
return byteArray;
|
||||
}
|
||||
|
||||
}
|
||||
// neutral=p;Pojo;getFloatArray;();summary;df-generated
|
||||
public float[] getFloatArray() {
|
||||
return floatArray;
|
||||
}
|
||||
|
||||
// neutral=p;Pojo;getBoxedArray;();summary;df-generated
|
||||
public Integer[] getBoxedArray() {
|
||||
return new Integer[] {Integer.valueOf(intValue)};
|
||||
}
|
||||
|
||||
// neutral=p;Pojo;getBoxedCollection;();summary;df-generated
|
||||
public Collection<Integer> getBoxedCollection() {
|
||||
return List.of(Integer.valueOf(intValue));
|
||||
}
|
||||
|
||||
// summary=p;Pojo;false;getBoxedChars;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public List<Character> getBoxedChars() {
|
||||
return charList;
|
||||
}
|
||||
|
||||
// summary=p;Pojo;false;getBoxedBytes;();;Argument[this];ReturnValue;taint;df-generated
|
||||
public Byte[] getBoxedBytes() {
|
||||
return byteObjectArray;
|
||||
}
|
||||
|
||||
// neutral=p;Pojo;getBigInt;();summary;df-generated
|
||||
public BigInteger getBigInt() {
|
||||
return BigInteger.valueOf(intValue);
|
||||
}
|
||||
|
||||
// neutral=p;Pojo;getBigDecimal;();summary;df-generated
|
||||
public BigDecimal getBigDecimal() {
|
||||
return new BigDecimal(value);
|
||||
}
|
||||
|
||||
// summary=p;Pojo;false;fillIn;(List);;Argument[this];Argument[0].Element;taint;df-generated
|
||||
public void fillIn(List<String> target) {
|
||||
target.add(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,55 +7,58 @@ import java.io.OutputStream;
|
||||
|
||||
public class PrivateFlowViaPublicInterface {
|
||||
|
||||
static class RandomPojo {
|
||||
public File someFile = new File("someFile");
|
||||
}
|
||||
public static interface SPI {
|
||||
OutputStream openStream() throws IOException;
|
||||
static class RandomPojo {
|
||||
public File someFile = new File("someFile");
|
||||
}
|
||||
|
||||
default OutputStream openStreamNone() throws IOException {
|
||||
return null;
|
||||
};
|
||||
public static interface SPI {
|
||||
OutputStream openStream() throws IOException;
|
||||
|
||||
// neutral=p;PrivateFlowViaPublicInterface$SPI;openStreamNone;();summary;df-generated
|
||||
default OutputStream openStreamNone() throws IOException {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class PrivateImplWithSink implements SPI {
|
||||
|
||||
private File file;
|
||||
|
||||
public PrivateImplWithSink(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
private static final class PrivateImplWithSink implements SPI {
|
||||
|
||||
private File file;
|
||||
|
||||
public PrivateImplWithSink(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutputStream openStream() throws IOException {
|
||||
return new FileOutputStream(file);
|
||||
}
|
||||
|
||||
// summary=p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];ReturnValue;taint;df-generated
|
||||
// sink=p;PrivateFlowViaPublicInterface$SPI;true;openStream;();;Argument[this];path-injection;df-generated
|
||||
@Override
|
||||
public OutputStream openStream() throws IOException {
|
||||
return new FileOutputStream(file);
|
||||
}
|
||||
|
||||
private static final class PrivateImplWithRandomField implements SPI {
|
||||
}
|
||||
|
||||
public PrivateImplWithRandomField(File file) {
|
||||
}
|
||||
private static final class PrivateImplWithRandomField implements SPI {
|
||||
|
||||
@Override
|
||||
public OutputStream openStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OutputStream openStreamNone() throws IOException {
|
||||
return new FileOutputStream(new RandomPojo().someFile);
|
||||
}
|
||||
public PrivateImplWithRandomField(File file) {}
|
||||
|
||||
@Override
|
||||
public OutputStream openStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static SPI createAnSPI(File file) {
|
||||
return new PrivateImplWithSink(file);
|
||||
}
|
||||
|
||||
public static SPI createAnSPIWithoutTrackingFile(File file) {
|
||||
return new PrivateImplWithRandomField(file);
|
||||
// neutral=p;PrivateFlowViaPublicInterface$SPI;openStreamNone;();summary;df-generated
|
||||
@Override
|
||||
public OutputStream openStreamNone() throws IOException {
|
||||
return new FileOutputStream(new RandomPojo().someFile);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// summary=p;PrivateFlowViaPublicInterface;true;createAnSPI;(File);;Argument[0];ReturnValue;taint;df-generated
|
||||
public static SPI createAnSPI(File file) {
|
||||
return new PrivateImplWithSink(file);
|
||||
}
|
||||
|
||||
// neutral=p;PrivateFlowViaPublicInterface;createAnSPIWithoutTrackingFile;(File);summary;df-generated
|
||||
public static SPI createAnSPIWithoutTrackingFile(File file) {
|
||||
return new PrivateImplWithRandomField(file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,32 +3,39 @@ package p;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.file.CopyOption;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.CopyOption;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class Sinks {
|
||||
|
||||
public Path copyFileToDirectory(final Path sourceFile, final Path targetFile, final CopyOption... copyOptions) throws IOException {
|
||||
return Files.copy(sourceFile, targetFile, copyOptions);
|
||||
}
|
||||
|
||||
public String readUrl(final URL url, Charset encoding) throws IOException {
|
||||
try (InputStream in = url.openStream()) {
|
||||
byte[] bytes = in.readAllBytes();
|
||||
return new String(bytes, encoding);
|
||||
}
|
||||
}
|
||||
// sink=p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[0];path-injection;df-generated
|
||||
// sink=p;Sinks;true;copyFileToDirectory;(Path,Path,CopyOption[]);;Argument[1];path-injection;df-generated
|
||||
// neutral=p;Sinks;copyFileToDirectory;(Path,Path,CopyOption[]);summary;df-generated
|
||||
public Path copyFileToDirectory(
|
||||
final Path sourceFile, final Path targetFile, final CopyOption... copyOptions)
|
||||
throws IOException {
|
||||
return Files.copy(sourceFile, targetFile, copyOptions);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
String foo = new Sinks().readUrl(new URL(args[0]), Charset.defaultCharset());
|
||||
// sink=p;Sinks;true;readUrl;(URL,Charset);;Argument[0];request-forgery;df-generated
|
||||
// neutral=p;Sinks;readUrl;(URL,Charset);summary;df-generated
|
||||
public String readUrl(final URL url, Charset encoding) throws IOException {
|
||||
try (InputStream in = url.openStream()) {
|
||||
byte[] bytes = in.readAllBytes();
|
||||
return new String(bytes, encoding);
|
||||
}
|
||||
}
|
||||
|
||||
public void propagate(String s) {
|
||||
Logger logger = Logger.getLogger(Sinks.class.getSimpleName());
|
||||
logger.warning(s);
|
||||
}
|
||||
public static void main(String[] args) throws IOException {
|
||||
String foo = new Sinks().readUrl(new URL(args[0]), Charset.defaultCharset());
|
||||
}
|
||||
|
||||
// neutral=p;Sinks;propagate;(String);summary;df-generated
|
||||
public void propagate(String s) {
|
||||
Logger logger = Logger.getLogger(Sinks.class.getSimpleName());
|
||||
logger.warning(s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,29 +4,37 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.URL;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class Sources {
|
||||
|
||||
public InputStream readUrl(final URL url) throws IOException {
|
||||
return url.openConnection().getInputStream();
|
||||
}
|
||||
|
||||
public InputStream socketStream() throws IOException {
|
||||
ServerSocket socket = new ServerSocket(123);
|
||||
return socket.accept().getInputStream();
|
||||
}
|
||||
// source=p;Sources;true;readUrl;(URL);;ReturnValue;remote;df-generated
|
||||
// sink=p;Sources;true;readUrl;(URL);;Argument[0];request-forgery;df-generated
|
||||
// neutral=p;Sources;readUrl;(URL);summary;df-generated
|
||||
public InputStream readUrl(final URL url) throws IOException {
|
||||
return url.openConnection().getInputStream();
|
||||
}
|
||||
|
||||
public InputStream wrappedSocketStream() throws IOException {
|
||||
return socketStream();
|
||||
}
|
||||
// source=p;Sources;true;socketStream;();;ReturnValue;remote;df-generated
|
||||
// neutral=p;Sources;socketStream;();summary;df-generated
|
||||
public InputStream socketStream() throws IOException {
|
||||
ServerSocket socket = new ServerSocket(123);
|
||||
return socket.accept().getInputStream();
|
||||
}
|
||||
|
||||
public void sourceToParameter(InputStream[] streams, List<InputStream> otherStreams) throws IOException {
|
||||
ServerSocket socket = new ServerSocket(123);
|
||||
streams[0] = socket.accept().getInputStream();
|
||||
otherStreams.add(socket.accept().getInputStream());
|
||||
}
|
||||
// source=p;Sources;true;wrappedSocketStream;();;ReturnValue;remote;df-generated
|
||||
// neutral=p;Sources;wrappedSocketStream;();summary;df-generated
|
||||
public InputStream wrappedSocketStream() throws IOException {
|
||||
return socketStream();
|
||||
}
|
||||
|
||||
// source=p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[0].ArrayElement;remote;df-generated
|
||||
// source=p;Sources;true;sourceToParameter;(InputStream[],List);;Argument[1].Element;remote;df-generated
|
||||
// neutral=p;Sources;sourceToParameter;(InputStream[],List);summary;df-generated
|
||||
public void sourceToParameter(InputStream[] streams, List<InputStream> otherStreams)
|
||||
throws IOException {
|
||||
ServerSocket socket = new ServerSocket(123);
|
||||
streams[0] = socket.accept().getInputStream();
|
||||
otherStreams.add(socket.accept().getInputStream());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
unexpectedSummary
|
||||
expectedSummary
|
||||
unexpectedModel
|
||||
expectedModel
|
||||
|
||||
@@ -1,26 +1,11 @@
|
||||
import java
|
||||
import TestUtilities.InlineMadTest
|
||||
import utils.modelgenerator.internal.CaptureTypeBasedSummaryModels
|
||||
|
||||
private string expects() {
|
||||
exists(Javadoc doc |
|
||||
doc.getChild(0).toString().regexpCapture(" *(SPURIOUS-)?MaD=(.*)", 2) = result
|
||||
)
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(Callable c) { result = captureFlow(c) }
|
||||
|
||||
string getKind() { result = "summary" }
|
||||
}
|
||||
|
||||
private string flows() { result = captureFlow(_) }
|
||||
|
||||
query predicate unexpectedSummary(string msg) {
|
||||
exists(string flow |
|
||||
flow = flows() and
|
||||
not flow = expects() and
|
||||
msg = "Unexpected summary found: " + flow
|
||||
)
|
||||
}
|
||||
|
||||
query predicate expectedSummary(string msg) {
|
||||
exists(string e |
|
||||
e = expects() and
|
||||
not e = flows() and
|
||||
msg = "Expected summary missing: " + e
|
||||
)
|
||||
}
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
|
||||
@@ -3,8 +3,8 @@ package p;
|
||||
@FunctionalInterface
|
||||
public interface MyFunction<T1, T2, T3> {
|
||||
|
||||
// MaD=p;MyFunction;true;apply;(Object,Object);;Argument[this].SyntheticField[ArgType2];ReturnValue;value;tb-generated
|
||||
// MaD=p;MyFunction;true;apply;(Object,Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;MyFunction;true;apply;(Object,Object);;Argument[1];Argument[this].SyntheticField[ArgType1];value;tb-generated
|
||||
T3 apply(T1 x, T2 y);
|
||||
}
|
||||
// summary=p;MyFunction;true;apply;(Object,Object);;Argument[this].SyntheticField[ArgType2];ReturnValue;value;tb-generated
|
||||
// summary=p;MyFunction;true;apply;(Object,Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;MyFunction;true;apply;(Object,Object);;Argument[1];Argument[this].SyntheticField[ArgType1];value;tb-generated
|
||||
T3 apply(T1 x, T2 y);
|
||||
}
|
||||
|
||||
@@ -2,246 +2,244 @@ package p;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.*;
|
||||
import java.util.stream.LongStream;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.DoubleStream;
|
||||
import java.util.stream.Collector;
|
||||
import java.util.stream.DoubleStream;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.LongStream;
|
||||
|
||||
/**
|
||||
* This is a stub implementation of the Java Stream API.
|
||||
*/
|
||||
/** This is a stub implementation of the Java Stream API. */
|
||||
public class Stream<T> {
|
||||
|
||||
// MaD=p;Stream;true;iterator;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Iterator<T> iterator() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;iterator;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Iterator<T> iterator() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;allMatch;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public boolean allMatch(Predicate<? super T> predicate) {
|
||||
return false;
|
||||
}
|
||||
// summary=p;Stream;true;allMatch;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public boolean allMatch(Predicate<? super T> predicate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;collect;(Supplier,BiConsumer,BiConsumer);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <R> R collect(
|
||||
Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Collector is not a functional interface, so this is not supported
|
||||
public <R, A> R collect(Collector<? super T, A, R> collector) {
|
||||
return null;
|
||||
}
|
||||
// Collector is not a functional interface, so this is not supported
|
||||
public <R, A> R collect(Collector<? super T, A, R> collector) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;concat;(Stream,Stream);;Argument[0].Element;ReturnValue.Element;value;tb-generated
|
||||
// MaD=p;Stream;true;concat;(Stream,Stream);;Argument[1].Element;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;concat;(Stream,Stream);;Argument[0].Element;ReturnValue.Element;value;tb-generated
|
||||
// summary=p;Stream;true;concat;(Stream,Stream);;Argument[1].Element;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;distinct;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> distinct() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;distinct;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> distinct() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> Stream<T> empty() {
|
||||
return null;
|
||||
}
|
||||
public static <T> Stream<T> empty() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;filter;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;filter;(Predicate);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> filter(Predicate<? super T> predicate) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;filter;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;filter;(Predicate);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> filter(Predicate<? super T> predicate) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;findAny;();;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> findAny() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;findAny;();;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> findAny() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;findFirst;();;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> findFirst() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;findFirst;();;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> findFirst() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;flatMap;(Function);;Argument[0].ReturnValue.Element;ReturnValue.Element;value;tb-generated
|
||||
// MaD=p;Stream;true;flatMap;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;flatMap;(Function);;Argument[0].ReturnValue.Element;ReturnValue.Element;value;tb-generated
|
||||
// summary=p;Stream;true;flatMap;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;flatMapToDouble;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;flatMapToDouble;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;flatMapToInt;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;flatMapToInt;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;flatMapToLong;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;flatMapToLong;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;forEach;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public void forEach(Consumer<? super T> action) {
|
||||
}
|
||||
// summary=p;Stream;true;forEach;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public void forEach(Consumer<? super T> action) {}
|
||||
|
||||
// MaD=p;Stream;true;forEachOrdered;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public void forEachOrdered(Consumer<? super T> action) {
|
||||
}
|
||||
// summary=p;Stream;true;forEachOrdered;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public void forEachOrdered(Consumer<? super T> action) {}
|
||||
|
||||
// MaD=p;Stream;true;generate;(Supplier);;Argument[0].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> generate(Supplier<T> s) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;generate;(Supplier);;Argument[0].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> generate(Supplier<T> s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];ReturnValue.Element;value;tb-generated
|
||||
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[1].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> iterate(T seed, UnaryOperator<T> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[0];ReturnValue.Element;value;tb-generated
|
||||
// summary=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;iterate;(Object,UnaryOperator);;Argument[1].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> iterate(T seed, UnaryOperator<T> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;limit;(long);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> limit(long maxSize) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;limit;(long);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> limit(long maxSize) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;map;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;map;(Function);;Argument[0].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public <R> Stream<R> map(Function<? super T, ? extends R> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;map;(Function);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;map;(Function);;Argument[0].ReturnValue;ReturnValue.Element;value;tb-generated
|
||||
public <R> Stream<R> map(Function<? super T, ? extends R> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;mapToDouble;(ToDoubleFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;mapToDouble;(ToDoubleFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;mapToInt;(ToIntFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public IntStream mapToInt(ToIntFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;mapToInt;(ToIntFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public IntStream mapToInt(ToIntFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;mapToLong;(ToLongFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public LongStream mapToLong(ToLongFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;mapToLong;(ToLongFunction);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public LongStream mapToLong(ToLongFunction<? super T> mapper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;max;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;max;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;max;(Comparator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> max(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;max;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;max;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;max;(Comparator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> max(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;min;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;min;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;min;(Comparator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> min(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;min;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;min;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;min;(Comparator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public Optional<T> min(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;noneMatch;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public boolean noneMatch(Predicate<? super T> predicate) {
|
||||
return false;
|
||||
}
|
||||
// summary=p;Stream;true;noneMatch;(Predicate);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
public boolean noneMatch(Predicate<? super T> predicate) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;of;(Object[]);;Argument[0].ArrayElement;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> of(T... t) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;of;(Object[]);;Argument[0].ArrayElement;ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> of(T... t) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;of;(Object);;Argument[0];ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> of(T t) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;of;(Object);;Argument[0];ReturnValue.Element;value;tb-generated
|
||||
public static <T> Stream<T> of(T t) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;peek;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;peek;(Consumer);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> peek(Consumer<? super T> action) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;peek;(Consumer);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;peek;(Consumer);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> peek(Consumer<? super T> action) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// The generated models are only partially correct.
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// SPURIOUS-MaD=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[this].Element;value;tb-generated
|
||||
public Optional<T> reduce(BinaryOperator<T> accumulator) {
|
||||
return null;
|
||||
}
|
||||
// The generated models are only partially correct.
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[this].Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[0].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// SPURIOUS-summary=p;Stream;true;reduce;(BinaryOperator);;Argument[0].ReturnValue;Argument[this].Element;value;tb-generated
|
||||
public Optional<T> reduce(BinaryOperator<T> accumulator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// The generated models are only partially correct.
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];ReturnValue;value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;ReturnValue;value;tb-generated
|
||||
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[this].Element;value;tb-generated
|
||||
// SPURIOUS-MaD=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[this].Element;value;tb-generated
|
||||
public T reduce(T identity, BinaryOperator<T> accumulator) {
|
||||
return null;
|
||||
}
|
||||
// The generated models are only partially correct.
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[1].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];ReturnValue;value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
// SPURIOUS-summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[this].Element;ReturnValue;value;tb-generated
|
||||
// SPURIOUS-summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[0];Argument[this].Element;value;tb-generated
|
||||
// SPURIOUS-summary=p;Stream;true;reduce;(Object,BinaryOperator);;Argument[1].ReturnValue;Argument[this].Element;value;tb-generated
|
||||
public T reduce(T identity, BinaryOperator<T> accumulator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[2].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[2].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];ReturnValue;value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[this].Element;Argument[1].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[2].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];Argument[2].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[0];ReturnValue;value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[2].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;Argument[2].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;reduce;(Object,BiFunction,BinaryOperator);;Argument[2].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <U> U reduce(
|
||||
U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;skip;(long);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> skip(long n) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;skip;(long);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> skip(long n) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;sorted;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> sorted() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;sorted;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> sorted() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;Stream;true;sorted;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;Stream;true;sorted;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// MaD=p;Stream;true;sorted;(Comparator);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> sorted(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;Stream;true;sorted;(Comparator);;Argument[this].Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;Stream;true;sorted;(Comparator);;Argument[this].Element;Argument[0].Parameter[1];value;tb-generated
|
||||
// summary=p;Stream;true;sorted;(Comparator);;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public Stream<T> sorted(Comparator<? super T> comparator) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Models can never be generated correctly based on the type information
|
||||
// as it involves downcasting.
|
||||
public Object[] toArray() {
|
||||
return null;
|
||||
}
|
||||
// Models can never be generated correctly based on the type information
|
||||
// as it involves downcasting.
|
||||
public Object[] toArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// The generated result is only partially correct as there is no mentioning of
|
||||
// the type T in the method definition.
|
||||
// MaD=p;Stream;true;toArray;(IntFunction);;Argument[0].ReturnValue.ArrayElement;ReturnValue.ArrayElement;value;tb-generated
|
||||
public <A> A[] toArray(IntFunction<A[]> generator) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// The generated result is only partially correct as there is no mentioning of
|
||||
// the type T in the method definition.
|
||||
// summary=p;Stream;true;toArray;(IntFunction);;Argument[0].ReturnValue.ArrayElement;ReturnValue.ArrayElement;value;tb-generated
|
||||
public <A> A[] toArray(IntFunction<A[]> generator) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,25 +1,23 @@
|
||||
package p;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TypeBasedCollection<T> extends ArrayList<T> {
|
||||
|
||||
// MaD=p;TypeBasedCollection;true;addT;(Object);;Argument[0];Argument[this].Element;value;tb-generated
|
||||
public void addT(T x) {
|
||||
}
|
||||
// summary=p;TypeBasedCollection;true;addT;(Object);;Argument[0];Argument[this].Element;value;tb-generated
|
||||
public void addT(T x) {}
|
||||
|
||||
// MaD=p;TypeBasedCollection;true;addManyT;(List);;Argument[0].Element;Argument[this].Element;value;tb-generated
|
||||
public void addManyT(List<T> xs) {
|
||||
}
|
||||
// summary=p;TypeBasedCollection;true;addManyT;(List);;Argument[0].Element;Argument[this].Element;value;tb-generated
|
||||
public void addManyT(List<T> xs) {}
|
||||
|
||||
// MaD=p;TypeBasedCollection;true;firstT;();;Argument[this].Element;ReturnValue;value;tb-generated
|
||||
public T firstT() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedCollection;true;firstT;();;Argument[this].Element;ReturnValue;value;tb-generated
|
||||
public T firstT() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedCollection;true;getManyT;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public List<T> getManyT() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// summary=p;TypeBasedCollection;true;getManyT;();;Argument[this].Element;ReturnValue.Element;value;tb-generated
|
||||
public List<T> getManyT() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,87 +5,85 @@ import java.util.function.Function;
|
||||
|
||||
public class TypeBasedComplex<T> {
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;addMany;(List);;Argument[0].Element;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void addMany(List<T> xs) {
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;addMany;(List);;Argument[0].Element;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void addMany(List<T> xs) {}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;getMany;();;Argument[this].SyntheticField[ArgType0];ReturnValue.Element;value;tb-generated
|
||||
public List<T> getMany() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;getMany;();;Argument[this].SyntheticField[ArgType0];ReturnValue.Element;value;tb-generated
|
||||
public List<T> getMany() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;apply;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
public Integer apply(Function<T, Integer> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;apply;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
public Integer apply(Function<T, Integer> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// A method that doesn't mention `T` in its type signature.
|
||||
// This is for testing that we don't generate a summary that involves the
|
||||
// implicit field for `T`.
|
||||
// MaD=p;TypeBasedComplex;true;apply2;(Object,Function);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;apply2;(Object,Function);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <T1, T2> T2 apply2(T1 x, Function<T1, T2> f) {
|
||||
return null;
|
||||
}
|
||||
// A method that doesn't mention `T` in its type signature.
|
||||
// This is for testing that we don't generate a summary that involves the
|
||||
// implicit field for `T`.
|
||||
// summary=p;TypeBasedComplex;true;apply2;(Object,Function);;Argument[0];Argument[1].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;apply2;(Object,Function);;Argument[1].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <T1, T2> T2 apply2(T1 x, Function<T1, T2> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;flatMap;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;flatMap;(Function);;Argument[this].SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedComplex<T> flatMap(Function<T, List<T>> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;flatMap;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;flatMap;(Function);;Argument[this].SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;flatMap;(Function);;Argument[0].ReturnValue.Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedComplex<T> flatMap(Function<T, List<T>> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;flatMap2;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;flatMap2;(Function);;Argument[0].ReturnValue.Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public <S> TypeBasedComplex<S> flatMap2(Function<T, List<S>> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;flatMap2;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;flatMap2;(Function);;Argument[0].ReturnValue.Element;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public <S> TypeBasedComplex<S> flatMap2(Function<T, List<S>> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;map;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;map;(Function);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <S> S map(Function<T, S> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;map;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;map;(Function);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
public <S> S map(Function<T, S> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;mapComplex;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;mapComplex;(Function);;Argument[0].ReturnValue;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public <S> TypeBasedComplex<S> mapComplex(Function<T, S> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;mapComplex;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;mapComplex;(Function);;Argument[0].ReturnValue;ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public <S> TypeBasedComplex<S> mapComplex(Function<T, S> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[this].SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedComplex<T> returnComplex(Function<T, TypeBasedComplex<T>> f) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[this].SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;returnComplex;(Function);;Argument[0].ReturnValue.SyntheticField[ArgType0];ReturnValue.SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedComplex<T> returnComplex(Function<T, TypeBasedComplex<T>> f) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;set;(Integer,Function);;Argument[1].ReturnValue;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(Integer x, Function<Integer, T> f) {
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;set;(Integer,Function);;Argument[1].ReturnValue;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(Integer x, Function<Integer, T> f) {}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[0].ReturnValue;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[0].ReturnValue;Argument[0].Parameter[0];value;tb-generated
|
||||
public Integer applyMyFunction(MyFunction<T, Integer, T> f, Integer x) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[0].ReturnValue;Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunction;(MyFunction,Integer);;Argument[0].ReturnValue;Argument[0].Parameter[0];value;tb-generated
|
||||
public Integer applyMyFunction(MyFunction<T, Integer, T> f, Integer x) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[1];Argument[0].Parameter[1];value;tb-generated
|
||||
public <S1, S2> S2 applyMyFunctionGeneric(MyFunction<T, S1, S2> f, S1 x) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[this].SyntheticField[ArgType0];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object);;Argument[1];Argument[0].Parameter[1];value;tb-generated
|
||||
public <S1, S2> S2 applyMyFunctionGeneric(MyFunction<T, S1, S2> f, S1 x) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[1];Argument[0].Parameter[0];value;tb-generated
|
||||
// MaD=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[2];Argument[0].Parameter[1];value;tb-generated
|
||||
public <S1, S2, S3> S3 applyMyFunctionGeneric(MyFunction<S1, S2, S3> f, S1 x, S2 y) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[0].ReturnValue;ReturnValue;value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[1];Argument[0].Parameter[0];value;tb-generated
|
||||
// summary=p;TypeBasedComplex;true;applyMyFunctionGeneric;(MyFunction,Object,Object);;Argument[2];Argument[0].Parameter[1];value;tb-generated
|
||||
public <S1, S2, S3> S3 applyMyFunctionGeneric(MyFunction<S1, S2, S3> f, S1 x, S2 y) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,41 +2,37 @@ package p;
|
||||
|
||||
public class TypeBasedSimple<T> {
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;TypeBasedSimple;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedSimple(T t) {
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;TypeBasedSimple;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public TypeBasedSimple(T t) {}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;get;();;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
public T get() {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;get;();;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
public T get() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;get;(Object);;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
public T get(Object o) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;get;(Object);;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
public T get(Object o) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;id;(Object);;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
// MaD=p;TypeBasedSimple;true;id;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// MaD=p;TypeBasedSimple;true;id;(Object);;Argument[0];ReturnValue;value;tb-generated
|
||||
public T id(T x) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;id;(Object);;Argument[this].SyntheticField[ArgType0];ReturnValue;value;tb-generated
|
||||
// summary=p;TypeBasedSimple;true;id;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
// summary=p;TypeBasedSimple;true;id;(Object);;Argument[0];ReturnValue;value;tb-generated
|
||||
public T id(T x) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;id2;(Object);;Argument[0];ReturnValue;value;tb-generated
|
||||
public <S> S id2(S x) {
|
||||
return null;
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;id2;(Object);;Argument[0];ReturnValue;value;tb-generated
|
||||
public <S> S id2(S x) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;set;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(T x) {
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;set;(Object);;Argument[0];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(T x) {}
|
||||
|
||||
// MaD=p;TypeBasedSimple;true;set;(int,Object);;Argument[1];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(int x, T y) {
|
||||
}
|
||||
// summary=p;TypeBasedSimple;true;set;(int,Object);;Argument[1];Argument[this].SyntheticField[ArgType0];value;tb-generated
|
||||
public void set(int x, T y) {}
|
||||
|
||||
// No summary as S is unrelated to T
|
||||
public <S> void set2(S x) {
|
||||
}
|
||||
}
|
||||
// No summary as S is unrelated to T
|
||||
public <S> void set2(S x) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user