1111 * correctness
1212 * logic
1313 */
14+
1415import java
1516import semmle.code.java.Collections
1617
1718predicate containerAccess ( string package , string type , int p , string signature , int i ) {
18- package = "java.util" and type = "Collection" and p = 0 and signature = "contains(java.lang.Object)" and i = 0 or
19- package = "java.util" and type = "Dictionary" and p = 0 and signature = "get(java.lang.Object)" and i = 0 or
20- package = "java.util" and type = "Hashtable" and p = 1 and signature = "contains(java.lang.Object)" and i = 0 or
21- package = "java.util" and type = "List" and p = 0 and signature = "indexOf(java.lang.Object)" and i = 0 or
22- package = "java.util" and type = "List" and p = 0 and signature = "lastIndexOf(java.lang.Object)" and i = 0 or
23- package = "java.util" and type = "Map" and p = 0 and signature = "get(java.lang.Object)" and i = 0 or
24- package = "java.util" and type = "Map" and p = 0 and signature = "getOrDefault(java.lang.Object,java.lang.Object)" and i = 0 or
25- package = "java.util" and type = "Map" and p = 0 and signature = "containsKey(java.lang.Object)" and i = 0 or
26- package = "java.util" and type = "Map" and p = 1 and signature = "containsValue(java.lang.Object)" and i = 0 or
27- package = "java.util" and type = "Stack" and p = 0 and signature = "search(java.lang.Object)" and i = 0 or
28- package = "java.util" and type = "Vector" and p = 0 and signature = "indexOf(java.lang.Object,int)" and i = 0 or
29- package = "java.util" and type = "Vector" and p = 0 and signature = "lastIndexOf(java.lang.Object,int)" and i = 0 or
30- package = "java.util.concurrent" and type = "ConcurrentHashMap" and p = 1 and signature = "contains(java.lang.Object)" and i = 0
19+ package = "java.util" and
20+ type = "Collection" and
21+ p = 0 and
22+ signature = "contains(java.lang.Object)" and
23+ i = 0
24+ or
25+ package = "java.util" and
26+ type = "Dictionary" and
27+ p = 0 and
28+ signature = "get(java.lang.Object)" and
29+ i = 0
30+ or
31+ package = "java.util" and
32+ type = "Hashtable" and
33+ p = 1 and
34+ signature = "contains(java.lang.Object)" and
35+ i = 0
36+ or
37+ package = "java.util" and
38+ type = "List" and
39+ p = 0 and
40+ signature = "indexOf(java.lang.Object)" and
41+ i = 0
42+ or
43+ package = "java.util" and
44+ type = "List" and
45+ p = 0 and
46+ signature = "lastIndexOf(java.lang.Object)" and
47+ i = 0
48+ or
49+ package = "java.util" and type = "Map" and p = 0 and signature = "get(java.lang.Object)" and i = 0
50+ or
51+ package = "java.util" and
52+ type = "Map" and
53+ p = 0 and
54+ signature = "getOrDefault(java.lang.Object,java.lang.Object)" and
55+ i = 0
56+ or
57+ package = "java.util" and
58+ type = "Map" and
59+ p = 0 and
60+ signature = "containsKey(java.lang.Object)" and
61+ i = 0
62+ or
63+ package = "java.util" and
64+ type = "Map" and
65+ p = 1 and
66+ signature = "containsValue(java.lang.Object)" and
67+ i = 0
68+ or
69+ package = "java.util" and
70+ type = "Stack" and
71+ p = 0 and
72+ signature = "search(java.lang.Object)" and
73+ i = 0
74+ or
75+ package = "java.util" and
76+ type = "Vector" and
77+ p = 0 and
78+ signature = "indexOf(java.lang.Object,int)" and
79+ i = 0
80+ or
81+ package = "java.util" and
82+ type = "Vector" and
83+ p = 0 and
84+ signature = "lastIndexOf(java.lang.Object,int)" and
85+ i = 0
86+ or
87+ package = "java.util.concurrent" and
88+ type = "ConcurrentHashMap" and
89+ p = 1 and
90+ signature = "contains(java.lang.Object)" and
91+ i = 0
3192}
3293
3394class MismatchedContainerAccess extends MethodAccess {
3495 MismatchedContainerAccess ( ) {
3596 exists ( string package , string type , int i |
3697 containerAccess ( package , type , _, getCallee ( ) .getSignature ( ) , i )
37- |
38- getCallee ( ) .getDeclaringType ( ) .getASupertype * ( ) .getSourceDeclaration ( ) .hasQualifiedName ( package , type ) and
98+ |
99+ getCallee ( )
100+ .getDeclaringType ( )
101+ .getASupertype * ( )
102+ .getSourceDeclaration ( )
103+ .hasQualifiedName ( package , type ) and
39104 getCallee ( ) .getParameter ( i ) .getType ( ) instanceof TypeObject
40105 )
41106 }
@@ -47,7 +112,7 @@ class MismatchedContainerAccess extends MethodAccess {
47112 RefType getReceiverElementType ( int i ) {
48113 exists ( RefType t , GenericType g , string package , string type , int p |
49114 containerAccess ( package , type , p , getCallee ( ) .getSignature ( ) , i )
50- |
115+ |
51116 t = getCallee ( ) .getDeclaringType ( ) and
52117 t .getASupertype * ( ) .getSourceDeclaration ( ) = g and
53118 g .hasQualifiedName ( package , type ) and
71136 typearg = ma .getReceiverElementType ( idx ) .getSourceDeclaration ( ) and
72137 argtype = ma .getArgumentType ( idx ) and
73138 not haveIntersection ( typearg , argtype )
74- select ma .getArgument ( idx ) , "Actual argument type '" + argtype .getName ( ) + "'"
75- + " is incompatible with expected argument type '" + typearg .getName ( ) + "'."
139+ select ma .getArgument ( idx ) ,
140+ "Actual argument type '" + argtype .getName ( ) + "'" +
141+ " is incompatible with expected argument type '" + typearg .getName ( ) + "'."
0 commit comments