@@ -5,77 +5,90 @@ private import semmle.code.java.dataflow.FlowSummary
55private import semmle.code.java.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
66private import semmle.code.java.dataflow.ExternalFlow
77
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 {
972 TopJdkApi ( ) {
1073 exists ( string apiName |
1174 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 )
6679 )
6780 }
6881
6982 /** Holds if this API has a manual summary model. */
7083 private predicate hasManualSummary ( ) {
71- exists ( SummarizedCallable sc | this = sc .asCallable ( ) and sc .hasProvenance ( false ) )
84+ this instanceof SummarizedCallable and
85+ this .( SummarizedCallable ) .hasProvenance ( false )
7286 }
7387
7488 /** Holds if this API has a manual neutral model. */
7589 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 )
7992 }
8093
8194 /** Holds if this API has a manual MaD model. */
0 commit comments