[K2] Forbid to do equality check with null in constant expressions
This commit is contained in:
@@ -97,6 +97,10 @@ internal fun checkConstantArguments(
|
||||
}
|
||||
|
||||
for (exp in (expression as FirCall).arguments) {
|
||||
if (exp is FirConstExpression<*> && exp.value == null) {
|
||||
return ConstantArgumentKind.NOT_CONST
|
||||
}
|
||||
|
||||
if (exp is FirResolvedQualifier || exp is FirGetClassCall || exp.getExpandedType().isUnsignedType) {
|
||||
return ConstantArgumentKind.NOT_CONST
|
||||
}
|
||||
|
||||
@@ -44,3 +44,11 @@ const val equalsString1 = "someStr".equals("123")
|
||||
const val equalsString2 = "someStr" == "otherStr"
|
||||
const val equalsString3 = "someStr".equals(1)
|
||||
const val equalsString4 = <!EQUALITY_NOT_APPLICABLE!>"someStr" == 1<!>
|
||||
|
||||
const val TRUE = true
|
||||
const val STR = "str"
|
||||
|
||||
const val equalsWithNull1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>1 == null<!>
|
||||
const val equalsWithNull2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>null == null<!>
|
||||
const val equalsWithNull3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>TRUE == null<!>
|
||||
const val equalsWithNull4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>STR == null<!>
|
||||
|
||||
@@ -44,3 +44,11 @@ const val equalsString1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equa
|
||||
const val equalsString2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr" == "otherStr"<!>
|
||||
const val equalsString3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equals(1)<!>
|
||||
const val equalsString4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, EQUALITY_NOT_APPLICABLE!>"someStr" == 1<!>
|
||||
|
||||
const val TRUE = true
|
||||
const val STR = "str"
|
||||
|
||||
const val equalsWithNull1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>1 == null<!>
|
||||
const val equalsWithNull2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>null == null<!>
|
||||
const val equalsWithNull3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>TRUE == null<!>
|
||||
const val equalsWithNull4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>STR == null<!>
|
||||
|
||||
@@ -44,3 +44,11 @@ const val equalsString1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equa
|
||||
const val equalsString2 = "someStr" == "otherStr"
|
||||
const val equalsString3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equals(1)<!>
|
||||
const val equalsString4 = <!EQUALITY_NOT_APPLICABLE!>"someStr" == 1<!>
|
||||
|
||||
const val TRUE = true
|
||||
const val STR = "str"
|
||||
|
||||
const val equalsWithNull1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>1 == null<!>
|
||||
const val equalsWithNull2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>null == null<!>
|
||||
const val equalsWithNull3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>TRUE == null<!>
|
||||
const val equalsWithNull4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>STR == null<!>
|
||||
|
||||
@@ -44,3 +44,11 @@ const val equalsString1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equa
|
||||
const val equalsString2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr" == "otherStr"<!>
|
||||
const val equalsString3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"someStr".equals(1)<!>
|
||||
const val equalsString4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, EQUALITY_NOT_APPLICABLE!>"someStr" == 1<!>
|
||||
|
||||
const val TRUE = true
|
||||
const val STR = "str"
|
||||
|
||||
const val equalsWithNull1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>1 == null<!>
|
||||
const val equalsWithNull2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>null == null<!>
|
||||
const val equalsWithNull3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>TRUE == null<!>
|
||||
const val equalsWithNull4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER, SENSELESS_COMPARISON!>STR == null<!>
|
||||
|
||||
+4
-4
@@ -89,15 +89,15 @@ fun testEq() {
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1U == 1U<!>}; }"<!>)
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>UONE == 1U<!>}; }"<!>)
|
||||
js("{ var a = ${"FOO" == STR}; }")
|
||||
js("{ var a = ${TRUE == null}; }")
|
||||
js("{ var a = ${STR == null}; }")
|
||||
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>TRUE == null<!>}; }")
|
||||
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>STR == null<!>}; }")
|
||||
|
||||
js("{ var a = ${1 != 1}; }")
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1U != 1U<!>}; }"<!>)
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>UONE != 1U<!>}; }"<!>)
|
||||
js("{ var a = ${"FOO" != STR}; }")
|
||||
js("{ var a = ${TRUE != null}; }")
|
||||
js("{ var a = ${STR != null}; }")
|
||||
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>TRUE != null<!>}; }")
|
||||
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>STR != null<!>}; }")
|
||||
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1 === 1<!>}; }"<!>)
|
||||
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>TRUE === false<!>}; }"<!>)
|
||||
|
||||
Reference in New Issue
Block a user