diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index dae1db64533..8420463b76f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -330,7 +330,10 @@ public abstract class MemberCodegen + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('A') + PsiWhiteSpace(' ') + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + PsiElement(init)('init') + PsiErrorElement:Expecting '{' after 'init' + + PsiWhiteSpace('\n') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n') + CLASS + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('B') + PsiWhiteSpace(' ') + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + MODIFIER_LIST + ANNOTATION_ENTRY + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Ann') + PsiWhiteSpace(' ') + PsiElement(init)('init') + PsiErrorElement:Expecting '{' after 'init' + + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + PsiElement(init)('init') + PsiErrorElement:Expecting '{' after 'init' + + PsiWhiteSpace('\n ') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('foo') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + BLOCK + PsiElement(LBRACE)('{') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + PsiElement(init)('init') + PsiErrorElement:Expecting '{' after 'init' + + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + PsiElement(init)('init') + PsiErrorElement:Expecting '{' after 'init' + + PsiWhiteSpace('\n ') + ANONYMOUS_INITIALIZER + PsiElement(init)('init') + PsiWhiteSpace(' ') + BLOCK + PsiElement(LBRACE)('{') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java index 875557db132..dc49a29db6d 100644 --- a/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java @@ -1564,6 +1564,12 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { doParsingTest(fileName); } + @TestMetadata("initRecovery.kt") + public void testInitRecovery() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/recovery/initRecovery.kt"); + doParsingTest(fileName); + } + @TestMetadata("InvalidCharInSingleLineLambda.kt") public void testInvalidCharInSingleLineLambda() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/recovery/InvalidCharInSingleLineLambda.kt"); diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt index 3b6b7f266b3..1b815dffcd5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt @@ -179,8 +179,8 @@ private fun addDebugExpressionBeforeContextElement(codeFragment: JetCodeFragment fun insertNewInitializer(classBody: JetClassBody): PsiElement? { val initializer = psiFactory.createAnonymousInitializer() val newInitializer = (classBody.addAfter(initializer, classBody.getFirstChild()) as JetClassInitializer) - val block = newInitializer.getBody() as JetBlockExpression - return block.getLastChild() + val block = newInitializer.getBody() as JetBlockExpression? + return block?.getLastChild() } val elementBefore = when { diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCalleeMethodsTreeStructure.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCalleeMethodsTreeStructure.java index 554b4e39047..d656bcb0d6b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCalleeMethodsTreeStructure.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCalleeMethodsTreeStructure.java @@ -70,7 +70,10 @@ public class KotlinCalleeMethodsTreeStructure extends KotlinCallTreeStructure { JetClassBody body = classOrObject.getBody(); if (body != null) { for (JetClassInitializer initializer : body.getAnonymousInitializers()) { - elementsToAnalyze.add(initializer.getBody()); + JetExpression initializerBody = initializer.getBody(); + if (initializerBody != null) { + elementsToAnalyze.add(initializerBody); + } } for (JetProperty property : body.getProperties()) { JetExpression initializer = property.getInitializer(); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt index e7925325e69..271ec530941 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddInitKeywordFix.kt @@ -44,7 +44,7 @@ public class AddInitKeywordFix(element: JetClassInitializer) : JetIntentionActio val psiFactory = JetPsiFactory(file) val initKeyword = psiFactory.createInitKeyword() - val anchor = element.getBody() + val anchor = element.getBody() ?: return element.addBefore(initKeyword, anchor) element.addBefore(psiFactory.createWhiteSpace(), anchor) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java index 3666a8829ea..b21488c2e56 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/InitializerVisitor.java @@ -58,7 +58,10 @@ public final class InitializerVisitor extends TranslatorVisitor { @Override public Void visitAnonymousInitializer(@NotNull JetClassInitializer initializer, @NotNull TranslationContext context) { - result.add(translateAsStatementAndMergeInBlockIfNeeded(initializer.getBody(), context)); + JetExpression initializerBody = initializer.getBody(); + if (initializerBody != null) { + result.add(translateAsStatementAndMergeInBlockIfNeeded(initializerBody, context)); + } return null; }