KT-11765 Analyze code in anonymous initializer of inteface

#KT-11765 Fixed
This commit is contained in:
Pavel V. Talanov
2016-04-04 17:10:36 +03:00
parent 40dc5f24d5
commit 8fe14b7ba5
3 changed files with 21 additions and 12 deletions
@@ -525,20 +525,17 @@ public class BodyResolver {
@NotNull ClassDescriptorWithResolutionScopes classDescriptor
) {
LexicalScope scopeForInitializers = classDescriptor.getScopeForInitializerResolution();
if (!classDescriptor.getConstructors().isEmpty()) {
KtExpression body = anonymousInitializer.getBody();
if (body != null) {
PreliminaryDeclarationVisitor.Companion.createForDeclaration(
(KtDeclaration) anonymousInitializer.getParent().getParent(), trace);
expressionTypingServices.getTypeInfo(
scopeForInitializers, body, NO_EXPECTED_TYPE, outerDataFlowInfo, trace, /*isStatement = */true
);
}
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
KtExpression body = anonymousInitializer.getBody();
if (body != null) {
PreliminaryDeclarationVisitor.Companion.createForDeclaration(
(KtDeclaration) anonymousInitializer.getParent().getParent(), trace);
expressionTypingServices.getTypeInfo(
scopeForInitializers, body, NO_EXPECTED_TYPE, outerDataFlowInfo, trace, /*isStatement = */true
);
}
else {
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
if (classDescriptor.getConstructors().isEmpty()) {
trace.report(ANONYMOUS_INITIALIZER_IN_INTERFACE.on(anonymousInitializer));
processModifiersOnInitializer(anonymousInitializer, scopeForInitializers);
}
}
@@ -0,0 +1,6 @@
interface I {
<error>init {
val c = 1
val g = c
}</error>
}
@@ -526,6 +526,12 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest {
doTest(fileName);
}
@TestMetadata("InitializerInInterface.kt")
public void testInitializerInInterface() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/regression/InitializerInInterface.kt");
doTest(fileName);
}
@TestMetadata("InterfaceDeclarationAsExpression.kt")
public void testInterfaceDeclarationAsExpression() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/checker/regression/InterfaceDeclarationAsExpression.kt");