@@ -552,9 +552,13 @@ open class KotlinFileExtractor(
552
552
logger.warnElement(" Expected annotation property to define a getter" , prop)
553
553
} else {
554
554
val getterId = useFunction<DbMethod >(getter)
555
- val exprId = extractAnnotationValueExpression(v, id, i, " {$getterId }" , getter.returnType, extractEnumTypeAccesses)
556
- if (exprId != null ) {
557
- tw.writeAnnotValue(id, getterId, exprId)
555
+ if (getterId == null ) {
556
+ logger.errorElement(" Couldn't get ID for getter" , getter)
557
+ } else {
558
+ val exprId = extractAnnotationValueExpression(v, id, i, " {$getterId }" , getter.returnType, extractEnumTypeAccesses)
559
+ if (exprId != null ) {
560
+ tw.writeAnnotValue(id, getterId, exprId)
561
+ }
558
562
}
559
563
}
560
564
}
@@ -979,6 +983,10 @@ open class KotlinFileExtractor(
979
983
private fun extractInstanceInitializerBlock (parent : StmtParent , enclosingConstructor : IrConstructor ) {
980
984
with (" object initializer block" , enclosingConstructor) {
981
985
val constructorId = useFunction<DbConstructor >(enclosingConstructor)
986
+ if (constructorId == null ) {
987
+ logger.errorElement(" Cannot get ID for constructor" , enclosingConstructor)
988
+ return
989
+ }
982
990
val enclosingClass = enclosingConstructor.parentClassOrNull
983
991
if (enclosingClass == null ) {
984
992
logger.errorElement(" Constructor's parent is not a class" , enclosingConstructor)
@@ -1410,10 +1418,17 @@ open class KotlinFileExtractor(
1410
1418
1411
1419
val sourceDeclaration =
1412
1420
overriddenAttributes?.sourceDeclarationId ? :
1413
- if (typeSubstitution != null && overriddenAttributes?.id == null )
1414
- useFunction(f)
1415
- else
1421
+ if (typeSubstitution != null && overriddenAttributes?.id == null ) {
1422
+ val sourceFunId = useFunction<DbCallable >(f)
1423
+ if (sourceFunId == null ) {
1424
+ logger.errorElement(" Cannot get source ID for function" , f)
1425
+ id // TODO: This is wrong; we ought to just fail in this case
1426
+ } else {
1427
+ sourceFunId
1428
+ }
1429
+ } else {
1416
1430
id
1431
+ }
1417
1432
1418
1433
val extReceiver = f.extensionReceiverParameter
1419
1434
// The following parameter order is correct, because member $default methods (where the order would be [dispatchParam], [extensionParam], normalParams) are not extracted here
@@ -3274,7 +3289,14 @@ open class KotlinFileExtractor(
3274
3289
idx : Int ,
3275
3290
callable : Label <out DbCallable >,
3276
3291
enclosingStmt : Label <out DbStmt >
3277
- ): Label <DbNewexpr >? = extractNewExpr(useFunction<DbConstructor >(calledConstructor, constructorTypeArgs), constructedType, locId, parent, idx, callable, enclosingStmt)
3292
+ ): Label <DbNewexpr >? {
3293
+ val funId = useFunction<DbConstructor >(calledConstructor, constructorTypeArgs)
3294
+ if (funId == null ) {
3295
+ logger.error(" Cannot get ID for newExpr function" )
3296
+ return null
3297
+ }
3298
+ return extractNewExpr(funId, constructedType, locId, parent, idx, callable, enclosingStmt)
3299
+ }
3278
3300
3279
3301
private fun needsObinitFunction (c : IrClass ) = c.primaryConstructor == null && c.constructors.count() > 1
3280
3302
@@ -3707,9 +3729,13 @@ open class KotlinFileExtractor(
3707
3729
3708
3730
val locId = tw.getLocation(e)
3709
3731
val methodId = useFunction<DbConstructor >(e.symbol.owner)
3732
+ if (methodId == null ) {
3733
+ logger.errorElement(" Cannot get ID for delegating constructor" , e)
3734
+ } else {
3735
+ tw.writeCallableBinding(id.cast<DbCaller >(), methodId)
3736
+ }
3710
3737
3711
3738
tw.writeHasLocation(id, locId)
3712
- tw.writeCallableBinding(id.cast<DbCaller >(), methodId)
3713
3739
extractCallValueArguments(id, e, id, callable, 0 )
3714
3740
val dr = e.dispatchReceiver
3715
3741
if (dr != null ) {
@@ -4645,7 +4671,11 @@ open class KotlinFileExtractor(
4645
4671
extractExprContext(callId, locId, labels.methodId, retId)
4646
4672
4647
4673
val callableId = useFunction<DbCallable >(target.owner.realOverrideTarget, classTypeArgsIncludingOuterClasses)
4648
- tw.writeCallableBinding(callId.cast<DbCaller >(), callableId)
4674
+ if (callableId == null ) {
4675
+ logger.error(" Cannot get ID for reflection target" )
4676
+ } else {
4677
+ tw.writeCallableBinding(callId.cast<DbCaller >(), callableId)
4678
+ }
4649
4679
4650
4680
val useFirstArgAsDispatch: Boolean
4651
4681
if (dispatchReceiverInfo != null ) {
@@ -4827,20 +4857,24 @@ open class KotlinFileExtractor(
4827
4857
val getterReturnType = parameterTypes.last()
4828
4858
4829
4859
if (getter != null ) {
4830
- val getLabels = addFunctionManual(tw.getFreshIdLabel(), OperatorNameConventions .GET .asString(), getterParameterTypes, getterReturnType, classId, locId)
4831
4860
val getterCallableId = useFunction<DbCallable >(getter.owner.realOverrideTarget, classTypeArguments)
4861
+ if (getterCallableId == null ) {
4862
+ logger.errorElement(" Cannot get ID for getter" , propertyReferenceExpr)
4863
+ } else {
4864
+ val getLabels = addFunctionManual(tw.getFreshIdLabel(), OperatorNameConventions .GET .asString(), getterParameterTypes, getterReturnType, classId, locId)
4865
+
4866
+ helper.extractCallToReflectionTarget(
4867
+ getLabels,
4868
+ getter,
4869
+ getterReturnType,
4870
+ expressionTypeArguments,
4871
+ classTypeArguments
4872
+ )
4832
4873
4833
- helper.extractCallToReflectionTarget(
4834
- getLabels,
4835
- getter,
4836
- getterReturnType,
4837
- expressionTypeArguments,
4838
- classTypeArguments
4839
- )
4840
-
4841
- tw.writePropertyRefGetBinding(idPropertyRef, getterCallableId)
4874
+ tw.writePropertyRefGetBinding(idPropertyRef, getterCallableId)
4842
4875
4843
- helper.extractPropertyReferenceInvoke(getLabels.methodId, getterParameterTypes, getterReturnType)
4876
+ helper.extractPropertyReferenceInvoke(getLabels.methodId, getterParameterTypes, getterReturnType)
4877
+ }
4844
4878
} else {
4845
4879
// Property without a getter.
4846
4880
if (backingField == null ) {
@@ -4861,19 +4895,22 @@ open class KotlinFileExtractor(
4861
4895
}
4862
4896
4863
4897
if (setter != null ) {
4864
- val setLabels = addFunctionManual(tw.getFreshIdLabel(), OperatorNameConventions .SET .asString(), parameterTypes, pluginContext.irBuiltIns.unitType, classId, locId)
4865
-
4866
4898
val setterCallableId = useFunction<DbCallable >(setter.owner.realOverrideTarget, classTypeArguments)
4899
+ if (setterCallableId == null ) {
4900
+ logger.errorElement(" Cannot get ID for setter" , propertyReferenceExpr)
4901
+ } else {
4902
+ val setLabels = addFunctionManual(tw.getFreshIdLabel(), OperatorNameConventions .SET .asString(), parameterTypes, pluginContext.irBuiltIns.unitType, classId, locId)
4867
4903
4868
- helper.extractCallToReflectionTarget(
4869
- setLabels,
4870
- setter,
4871
- pluginContext.irBuiltIns.unitType,
4872
- expressionTypeArguments,
4873
- classTypeArguments
4874
- )
4904
+ helper.extractCallToReflectionTarget(
4905
+ setLabels,
4906
+ setter,
4907
+ pluginContext.irBuiltIns.unitType,
4908
+ expressionTypeArguments,
4909
+ classTypeArguments
4910
+ )
4875
4911
4876
- tw.writePropertyRefSetBinding(idPropertyRef, setterCallableId)
4912
+ tw.writePropertyRefSetBinding(idPropertyRef, setterCallableId)
4913
+ }
4877
4914
} else {
4878
4915
if (backingField != null && ! backingField.owner.isFinal) {
4879
4916
val setLabels = addFunctionManual(tw.getFreshIdLabel(), OperatorNameConventions .SET .asString(), parameterTypes, pluginContext.irBuiltIns.unitType, classId, locId)
@@ -5008,7 +5045,11 @@ open class KotlinFileExtractor(
5008
5045
tw.writeCallableBinding(idMemberRef, ids.constructor )
5009
5046
5010
5047
val targetCallableId = useFunction<DbCallable >(target.owner.realOverrideTarget, classTypeArguments)
5011
- tw.writeMemberRefBinding(idMemberRef, targetCallableId)
5048
+ if (targetCallableId == null ) {
5049
+ logger.errorElement(" Cannot get ID for function reference callable" , functionReferenceExpr)
5050
+ } else {
5051
+ tw.writeMemberRefBinding(idMemberRef, targetCallableId)
5052
+ }
5012
5053
5013
5054
val helper = CallableReferenceHelper (functionReferenceExpr, locId, ids)
5014
5055
@@ -5154,7 +5195,11 @@ open class KotlinFileExtractor(
5154
5195
tw.writeExprsKotlinType(callId, callType.kotlinResult.id)
5155
5196
extractExprContext(callId, locId, funLabels.methodId, retId)
5156
5197
val calledMethodId = useFunction<DbMethod >(lambda)
5157
- tw.writeCallableBinding(callId, calledMethodId)
5198
+ if (calledMethodId == null ) {
5199
+ logger.errorElement(" Cannot get ID for called lambda" , lambda)
5200
+ } else {
5201
+ tw.writeCallableBinding(callId, calledMethodId)
5202
+ }
5158
5203
5159
5204
// this access
5160
5205
extractThisAccess(ids.type, funLabels.methodId, callId, - 1 , retId, locId)
@@ -5623,7 +5668,11 @@ open class KotlinFileExtractor(
5623
5668
tw.writeExprsKotlinType(callId, callType.kotlinResult.id)
5624
5669
extractExprContext(callId, locId, ids.function, returnId)
5625
5670
val calledMethodId = useFunction<DbMethod >(invokeMethod, functionType.arguments)
5626
- tw.writeCallableBinding(callId, calledMethodId)
5671
+ if (calledMethodId == null ) {
5672
+ logger.errorElement(" Cannot get ID for called method" , invokeMethod)
5673
+ } else {
5674
+ tw.writeCallableBinding(callId, calledMethodId)
5675
+ }
5627
5676
5628
5677
// <fn> access
5629
5678
val lhsId = tw.getFreshIdLabel<DbVaraccess >()
@@ -5746,14 +5795,17 @@ open class KotlinFileExtractor(
5746
5795
if (baseConstructor == null ) {
5747
5796
logger.warnElement(" Cannot find base constructor" , elementToReportOn)
5748
5797
} else {
5749
- val superCallId = tw.getFreshIdLabel<DbSuperconstructorinvocationstmt >()
5750
- tw.writeStmts_superconstructorinvocationstmt(superCallId, constructorBlockId, 0 , ids.constructor )
5751
-
5752
5798
val baseConstructorId = useFunction<DbConstructor >(baseConstructor)
5799
+ if (baseConstructorId == null ) {
5800
+ logger.errorElement(" Cannot find base constructor ID" , elementToReportOn)
5801
+ } else {
5802
+ val superCallId = tw.getFreshIdLabel<DbSuperconstructorinvocationstmt >()
5803
+ tw.writeStmts_superconstructorinvocationstmt(superCallId, constructorBlockId, 0 , ids.constructor )
5753
5804
5754
- tw.writeHasLocation(superCallId, locId)
5755
- tw.writeCallableBinding(superCallId.cast<DbCaller >(), baseConstructorId)
5756
- extractSuperconstructorArgs(superCallId)
5805
+ tw.writeHasLocation(superCallId, locId)
5806
+ tw.writeCallableBinding(superCallId.cast<DbCaller >(), baseConstructorId)
5807
+ extractSuperconstructorArgs(superCallId)
5808
+ }
5757
5809
}
5758
5810
}
5759
5811
0 commit comments