Recovery for initializer if no LBRACE

- If no LBRACE after 'init' keyword parse initializer without body
- Made getBody() nullable, appropriate checks added
This commit is contained in:
Denis Zharkov
2015-03-18 19:58:15 +03:00
parent f4ed05cd90
commit eefea26d54
11 changed files with 130 additions and 12 deletions
@@ -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 {
@@ -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();
@@ -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)