Test and fix for NPE in CFA #KT-9078 Fixed #EA-71535 Fixed

This commit is contained in:
Mikhail Glukhikh
2015-09-08 11:17:31 +03:00
parent f708871254
commit 24252b64d0
4 changed files with 36 additions and 0 deletions
@@ -587,6 +587,7 @@ public class JetFlowInformationProvider {
@NotNull Map<Instruction, Edges<Map<VariableDescriptor, VariableControlFlowState>>> initializersMap
) {
Edges<Map<VariableDescriptor, VariableControlFlowState>> initializers = initializersMap.get(pseudocode.getExitInstruction());
if (initializers == null) return;
Set<VariableDescriptor> declaredVariables = getPseudocodeVariablesData().getDeclaredVariables(pseudocode, false);
for (VariableDescriptor variable : declaredVariables) {
if (variable instanceof PropertyDescriptor) {
+12
View File
@@ -0,0 +1,12 @@
// KT-9078 (NPE in control flow analysis); EA-71535
abstract class KFunctionKt9005WorkAround<out R: Any?>(private val _functionInstance: Function<R>): kotlin.reflect.KCallable<R> {
private val _reflectedFunction: kotlin.reflect.KFunction<R> = _functionInstance.<!UNRESOLVED_REFERENCE!>reflect<!>() ?: throw IllegalStateException("")
private val _parameters: List<kotlin.reflect.KParameter> = run {
_functionInstance.javaClass.methods.first().<!UNRESOLVED_REFERENCE!>parameters<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>map<!> {
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object<!> : kotlin.reflect.KParameter {
override val index: Int = 0
}
}
}
}
@@ -0,0 +1,17 @@
package
public abstract class KFunctionKt9005WorkAround</*0*/ out R> : kotlin.reflect.KCallable<R> {
public constructor KFunctionKt9005WorkAround</*0*/ out R>(/*0*/ _functionInstance: kotlin.Function<R>)
private final val _functionInstance: kotlin.Function<R>
private final val _parameters: kotlin.List<kotlin.reflect.KParameter>
private final val _reflectedFunction: kotlin.reflect.KFunction<R>
public abstract override /*1*/ /*fake_override*/ val annotations: kotlin.List<kotlin.Annotation>
public abstract override /*1*/ /*fake_override*/ val name: kotlin.String
public abstract override /*1*/ /*fake_override*/ val parameters: kotlin.List<kotlin.reflect.KParameter>
public abstract override /*1*/ /*fake_override*/ val returnType: kotlin.reflect.KType
public abstract override /*1*/ /*fake_override*/ fun call(/*0*/ vararg args: kotlin.Any? /*kotlin.Array<out kotlin.Any?>*/): R
public abstract override /*1*/ /*fake_override*/ fun callBy(/*0*/ args: kotlin.Map<kotlin.reflect.KParameter, kotlin.Any?>): R
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -53,6 +53,12 @@ public class JetDiagnosticsTestWithStdLibGenerated extends AbstractJetDiagnostic
doTest(fileName);
}
@TestMetadata("kt9078.kt")
public void testKt9078() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/kt9078.kt");
doTest(fileName);
}
@TestMetadata("outstar.kt")
public void testOutstar() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/outstar.kt");