Add JetInvokeFunctionReference for JetCallExpression

This commit is contained in:
Natalia.Ukhorskaya
2013-03-13 13:42:09 +04:00
parent 4039202806
commit 37986891df
15 changed files with 211 additions and 15 deletions
@@ -326,7 +326,10 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitThisExpression(@NotNull JetThisExpression expression,
@NotNull TranslationContext context) {
return context.getThisObject(getDescriptorForReferenceExpression(context.bindingContext(), expression.getInstanceReference()));
DeclarationDescriptor thisExpression =
getDescriptorForReferenceExpression(context.bindingContext(), expression.getInstanceReference());
assert thisExpression != null : "This expression must reference a descriptor: " + expression.getText();
return context.getThisObject(thisExpression);
}
@Override
@@ -37,6 +37,7 @@ public final class ReferenceAccessTranslator extends AbstractTranslator implemen
/*package*/ static ReferenceAccessTranslator newInstance(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
DeclarationDescriptor referenceDescriptor = getDescriptorForReferenceExpression(context.bindingContext(), expression);
assert referenceDescriptor != null : "JetSimpleName expression must reference a descriptor " + expression.getText();
return new ReferenceAccessTranslator(referenceDescriptor, context);
}
@@ -123,13 +123,16 @@ public final class BindingUtils {
return context.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter);
}
@NotNull
@Nullable
public static DeclarationDescriptor getDescriptorForReferenceExpression(@NotNull BindingContext context,
@NotNull JetReferenceExpression reference) {
DeclarationDescriptor referencedDescriptor = getNullableDescriptorForReferenceExpression(context, reference);
assert referencedDescriptor != null
: message(reference, "Reference expression must reference a descriptor for reference " + reference.getText());
return referencedDescriptor;
if (BindingContextUtils.isExpressionWithValidReference(reference, context)) {
assert referencedDescriptor != null
: message(reference, "Reference expression must reference a descriptor for reference " + reference.getText());
return referencedDescriptor;
}
return null;
}
@Nullable