@@ -5,77 +5,90 @@ private import semmle.code.java.dataflow.FlowSummary
5
5
private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
6
6
private import semmle.code.java.dataflow.ExternalFlow
7
7
8
- class TopJdkApi extends Callable {
8
+ predicate topJdkApiName ( string apiName ) {
9
+ apiName in [
10
+ // top 100 JDK APIs
11
+ "java.lang.StringBuilder#append(String)" , "java.util.List#get(int)" ,
12
+ "java.util.List#add(Object)" , "java.util.Map#put(Object,Object)" ,
13
+ "java.lang.String#equals(Object)" , "java.util.Map#get(Object)" , "java.util.List#size()" ,
14
+ "java.util.Collection#stream()" , "java.lang.Object#getClass()" ,
15
+ "java.util.stream.Stream#collect(Collector)" , "java.util.Objects#equals(Object,Object)" ,
16
+ "java.lang.String#format(String,Object[])" , "java.util.stream.Stream#map(Function)" ,
17
+ "java.lang.Throwable#getMessage()" , "java.util.Arrays#asList(Object[])" ,
18
+ "java.lang.String#equalsIgnoreCase(String)" , "java.util.List#isEmpty()" ,
19
+ "java.util.Set#add(Object)" , "java.util.HashMap#put(Object,Object)" ,
20
+ "java.util.stream.Collectors#toList()" , "java.lang.StringBuilder#append(char)" ,
21
+ "java.util.stream.Stream#filter(Predicate)" , "java.lang.String#length()" ,
22
+ "java.lang.Enum#name()" , "java.lang.Object#toString()" , "java.util.Optional#get()" ,
23
+ "java.lang.StringBuilder#toString()" ,
24
+ "java.lang.IllegalArgumentException#IllegalArgumentException(String)" ,
25
+ "java.lang.Class#getName()" , "java.lang.Enum#Enum(String,int)" ,
26
+ "java.io.PrintWriter#write(String)" , "java.util.Entry#getValue()" , "java.util.Entry#getKey()" ,
27
+ "java.util.Iterator#next()" , "java.lang.Object#hashCode()" ,
28
+ "java.util.Optional#orElse(Object)" , "java.lang.StringBuffer#append(String)" ,
29
+ "java.util.Collections#singletonList(Object)" , "java.lang.Iterable#forEach(Consumer)" ,
30
+ "java.util.Optional#of(Object)" , "java.lang.String#contains(CharSequence)" ,
31
+ "java.util.ArrayList#add(Object)" , "java.util.Optional#ofNullable(Object)" ,
32
+ "java.util.Collections#emptyList()" , "java.math.BigDecimal#BigDecimal(String)" ,
33
+ "java.lang.System#currentTimeMillis()" , "java.lang.Object#equals(Object)" ,
34
+ "java.util.Map#containsKey(Object)" , "java.util.Optional#isPresent()" ,
35
+ "java.lang.String#trim()" , "java.util.List#addAll(Collection)" ,
36
+ "java.util.Set#contains(Object)" , "java.util.Optional#map(Function)" ,
37
+ "java.util.Map#entrySet()" , "java.util.Optional#empty()" ,
38
+ "java.lang.Integer#parseInt(String)" , "java.lang.String#startsWith(String)" ,
39
+ "java.lang.IllegalStateException#IllegalStateException(String)" ,
40
+ "java.lang.Enum#equals(Object)" , "java.util.Iterator#hasNext()" ,
41
+ "java.util.List#contains(Object)" , "java.lang.String#substring(int,int)" ,
42
+ "java.util.List#of(Object)" , "java.util.Objects#hash(Object[])" ,
43
+ "java.lang.RuntimeException#RuntimeException(String)" , "java.lang.String#isEmpty()" ,
44
+ "java.lang.String#replace(CharSequence,CharSequence)" , "java.util.Set#size()" ,
45
+ "java.io.File#File(String)" , "java.lang.StringBuilder#append(Object)" ,
46
+ "java.lang.String#split(String)" , "java.util.Map#values()" , "java.util.UUID#randomUUID()" ,
47
+ "java.util.ArrayList#ArrayList(Collection)" , "java.util.Map#keySet()" ,
48
+ "java.sql.ResultSet#getString(String)" , "java.lang.String#hashCode()" ,
49
+ "java.lang.Throwable#Throwable(Throwable)" , "java.util.HashMap#get(Object)" ,
50
+ "java.lang.Class#getSimpleName()" , "java.util.Set#isEmpty()" , "java.util.Map#size()" ,
51
+ "java.lang.String#substring(int)" , "java.util.Map#remove(Object)" ,
52
+ "java.lang.Throwable#printStackTrace()" , "java.util.stream.Stream#findFirst()" ,
53
+ "java.util.Optional#ifPresent(Consumer)" , "java.lang.String#valueOf(Object)" ,
54
+ "java.lang.String#toLowerCase()" , "java.util.UUID#toString()" ,
55
+ "java.lang.StringBuilder#append(int)" , "java.util.Objects#requireNonNull(Object,String)" ,
56
+ "java.nio.file.Path#resolve(String)" , "java.lang.Enum#toString()" ,
57
+ "java.lang.RuntimeException#RuntimeException(Throwable)" , "java.util.Collection#size()" ,
58
+ "java.lang.String#charAt(int)" , "java.util.stream.Stream#forEach(Consumer)" ,
59
+ "java.util.Map#isEmpty()" , "java.lang.String#valueOf(int)"
60
+ ]
61
+ }
62
+
63
+ predicate hasCallable ( string apiName ) {
64
+ exists ( Callable c |
65
+ apiName =
66
+ c .getDeclaringType ( ) .getPackage ( ) + "." + c .getDeclaringType ( ) .getSourceDeclaration ( ) + "#" +
67
+ c .getName ( ) + paramsString ( c )
68
+ )
69
+ }
70
+
71
+ class TopJdkApi extends SummarizedCallableBase {
9
72
TopJdkApi ( ) {
10
73
exists ( string apiName |
11
74
apiName =
12
- this .getDeclaringType ( ) .getPackage ( ) + "." + this .getDeclaringType ( ) .getSourceDeclaration ( ) +
13
- "#" + this .getName ( ) + paramsString ( this ) and
14
- apiName in [
15
- // top 100 JDK APIs
16
- "java.lang.StringBuilder#append(String)" , "java.util.List#get(int)" ,
17
- "java.util.List#add(Object)" , "java.util.Map#put(Object,Object)" ,
18
- "java.lang.String#equals(Object)" , "java.util.Map#get(Object)" , "java.util.List#size()" ,
19
- "java.util.Collection#stream()" , "java.lang.Object#getClass()" ,
20
- "java.util.stream.Stream#collect(Collector)" , "java.util.Objects#equals(Object,Object)" ,
21
- "java.lang.String#format(String,Object[])" , "java.util.stream.Stream#map(Function)" ,
22
- "java.lang.Throwable#getMessage()" , "java.util.Arrays#asList(Object[])" ,
23
- "java.lang.String#equalsIgnoreCase(String)" , "java.util.List#isEmpty()" ,
24
- "java.util.Set#add(Object)" , "java.util.HashMap#put(Object,Object)" ,
25
- "java.util.stream.Collectors#toList()" , "java.lang.StringBuilder#append(char)" ,
26
- "java.util.stream.Stream#filter(Predicate)" , "java.lang.String#length()" ,
27
- "java.lang.Enum#name()" , "java.lang.Object#toString()" , "java.util.Optional#get()" ,
28
- "java.lang.StringBuilder#toString()" ,
29
- "java.lang.IllegalArgumentException#IllegalArgumentException(String)" ,
30
- "java.lang.Class#getName()" , "java.lang.Enum#Enum(String,int)" ,
31
- "java.io.PrintWriter#write(String)" , "java.util.Entry#getValue()" ,
32
- "java.util.Entry#getKey()" , "java.util.Iterator#next()" , "java.lang.Object#hashCode()" ,
33
- "java.util.Optional#orElse(Object)" , "java.lang.StringBuffer#append(String)" ,
34
- "java.util.Collections#singletonList(Object)" , "java.lang.Iterable#forEach(Consumer)" ,
35
- "java.util.Optional#of(Object)" , "java.lang.String#contains(CharSequence)" ,
36
- "java.util.ArrayList#add(Object)" , "java.util.Optional#ofNullable(Object)" ,
37
- "java.util.Collections#emptyList()" , "java.math.BigDecimal#BigDecimal(String)" ,
38
- "java.lang.System#currentTimeMillis()" , "java.lang.Object#equals(Object)" ,
39
- "java.util.Map#containsKey(Object)" , "java.util.Optional#isPresent()" ,
40
- "java.lang.String#trim()" , "java.util.List#addAll(Collection)" ,
41
- "java.util.Set#contains(Object)" , "java.util.Optional#map(Function)" ,
42
- "java.util.Map#entrySet()" , "java.util.Optional#empty()" ,
43
- "java.lang.Integer#parseInt(String)" , "java.lang.String#startsWith(String)" ,
44
- "java.lang.IllegalStateException#IllegalStateException(String)" ,
45
- "java.lang.Enum#equals(Object)" , "java.util.Iterator#hasNext()" ,
46
- "java.util.List#contains(Object)" , "java.lang.String#substring(int,int)" ,
47
- "java.util.List#of(Object)" , "java.util.Objects#hash(Object[])" ,
48
- "java.lang.RuntimeException#RuntimeException(String)" , "java.lang.String#isEmpty()" ,
49
- "java.lang.String#replace(CharSequence,CharSequence)" , "java.util.Set#size()" ,
50
- "java.io.File#File(String)" , "java.lang.StringBuilder#append(Object)" ,
51
- "java.lang.String#split(String)" , "java.util.Map#values()" , "java.util.UUID#randomUUID()" ,
52
- "java.util.ArrayList#ArrayList(Collection)" , "java.util.Map#keySet()" ,
53
- "java.sql.ResultSet#getString(String)" , "java.lang.String#hashCode()" ,
54
- "java.lang.Throwable#Throwable(Throwable)" , "java.util.HashMap#get(Object)" ,
55
- "java.lang.Class#getSimpleName()" , "java.util.Set#isEmpty()" , "java.util.Map#size()" ,
56
- "java.lang.String#substring(int)" , "java.util.Map#remove(Object)" ,
57
- "java.lang.Throwable#printStackTrace()" , "java.util.stream.Stream#findFirst()" ,
58
- "java.util.Optional#ifPresent(Consumer)" , "java.lang.String#valueOf(Object)" ,
59
- "java.lang.String#toLowerCase()" , "java.util.UUID#toString()" ,
60
- "java.lang.StringBuilder#append(int)" , "java.util.Objects#requireNonNull(Object,String)" ,
61
- "java.nio.file.Path#resolve(String)" , "java.lang.Enum#toString()" ,
62
- "java.lang.RuntimeException#RuntimeException(Throwable)" , "java.util.Collection#size()" ,
63
- "java.lang.String#charAt(int)" , "java.util.stream.Stream#forEach(Consumer)" ,
64
- "java.util.Map#isEmpty()" , "java.lang.String#valueOf(int)"
65
- ]
75
+ this .asCallable ( ) .getDeclaringType ( ) .getPackage ( ) + "." +
76
+ this .asCallable ( ) .getDeclaringType ( ) .getSourceDeclaration ( ) + "#" +
77
+ this .asCallable ( ) .getName ( ) + paramsString ( this .asCallable ( ) ) and
78
+ topJdkApiName ( apiName )
66
79
)
67
80
}
68
81
69
82
/** Holds if this API has a manual summary model. */
70
83
private predicate hasManualSummary ( ) {
71
- exists ( SummarizedCallable sc | this = sc .asCallable ( ) and sc .hasProvenance ( false ) )
84
+ this instanceof SummarizedCallable and
85
+ this .( SummarizedCallable ) .hasProvenance ( false )
72
86
}
73
87
74
88
/** Holds if this API has a manual neutral model. */
75
89
private predicate hasManualNeutral ( ) {
76
- exists ( FlowSummaryImpl:: Public:: NeutralCallable nsc |
77
- this = nsc .asCallable ( ) and nsc .hasProvenance ( false )
78
- )
90
+ this instanceof FlowSummaryImpl:: Public:: NeutralCallable and
91
+ this .( FlowSummaryImpl:: Public:: NeutralCallable ) .hasProvenance ( false )
79
92
}
80
93
81
94
/** Holds if this API has a manual MaD model. */
0 commit comments