Fixed keywords after 'this@' completion + fixed implementation of JetExpressionWithLabel.getLabelName()

This commit is contained in:
Valentin Kipyatkov
2015-05-20 11:46:16 +03:00
parent 2a5ca095ee
commit a6f76bbf76
13 changed files with 56 additions and 28 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.psi
import com.intellij.lang.ASTNode
import org.jetbrains.kotlin.JetNodeTypes
import org.jetbrains.kotlin.name.Name
open public class JetExpressionWithLabel(node: ASTNode) : JetExpressionImpl(node) {
@@ -25,7 +26,8 @@ open public class JetExpressionWithLabel(node: ASTNode) : JetExpressionImpl(node
findChildByType<JetContainerNode>(JetNodeTypes.LABEL_QUALIFIER)?.
findChildByType(JetNodeTypes.LABEL) as? JetSimpleNameExpression
public fun getLabelName(): String? = getTargetLabel()?.getIdentifier()?.getText()
public fun getLabelName(): String? = getTargetLabel()?.getReferencedName()
public fun getLabelNameAsName(): Name? = getTargetLabel()?.getReferencedNameAsName()
override fun <R, D> accept(visitor: JetVisitor<R, D>, data: D) = visitor.visitExpressionWithLabel(this, data)
}
@@ -429,10 +429,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
ExpressionTypingContext context,
boolean onlyClassReceivers
) {
String labelName = expression.getLabelName();
Name labelName = expression.getLabelNameAsName();
if (labelName != null) {
LabelResolver.LabeledReceiverResolutionResult resolutionResult =
LabelResolver.INSTANCE.resolveThisOrSuperLabel(expression, context, Name.identifier(labelName));
LabelResolver.INSTANCE.resolveThisOrSuperLabel(expression, context, labelName);
if (resolutionResult.success()) {
ReceiverParameterDescriptor receiverParameterDescriptor = resolutionResult.getReceiverParameterDescriptor();
recordThisOrSuperCallInTraceAndCallExtension(context, receiverParameterDescriptor, expression);
@@ -57,9 +57,9 @@ public class LabelResolver {
@Nullable
private Name getLabelNameIfAny(@NotNull PsiElement element) {
if (element instanceof JetLabeledExpression) {
String labelName = ((JetLabeledExpression) element).getLabelName();
Name labelName = ((JetLabeledExpression) element).getLabelNameAsName();
if (labelName != null) {
return Name.identifier(labelName);
return labelName;
}
}
if (element instanceof JetFunctionLiteralExpression) {
@@ -126,10 +126,9 @@ public class LabelResolver {
@NotNull ResolutionContext context
) {
JetSimpleNameExpression labelElement = expression.getTargetLabel();
String name = expression.getLabelName();
if (labelElement == null || name == null) return null;
Name labelName = expression.getLabelNameAsName();
if (labelElement == null || labelName == null) return null;
Name labelName = Name.identifier(name);
Collection<DeclarationDescriptor> declarationsByLabel = context.scope.getDeclarationsByLabel(labelName);
int size = declarationsByLabel.size();