/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.parser; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiExpressionStatement; import com.intellij.psi.PsiType; import gw.lang.parser.IParsedElement; import gw.lang.parser.expressions.IMethodCallExpression; import gw.lang.parser.statements.IMethodCallStatement; import gw.lang.reflect.IType; import gw.plugin.ij.lang.GosuTokenTypes; import gw.plugin.ij.lang.psi.api.statements.IGosuStatement; import gw.plugin.ij.lang.psi.api.types.IGosuTypeElement; import gw.plugin.ij.lang.psi.impl.GosuPsiElementImpl; import org.jetbrains.annotations.Nullable; public class GosuMethodCallStatementImpl extends GosuPsiElementImpl<IMethodCallStatement> implements IGosuTypeElement, IGosuStatement, PsiExpressionStatement { public GosuMethodCallStatementImpl(GosuCompositeElement node) { super(node); } @Nullable public PsiElement getReferenceNameElement() { return findLastChildByType(GosuTokenTypes.TT_IDENTIFIER); } @Override public PsiType getType() { return createType(getTypeReferenced()); } private IType getTypeReferenced() { IMethodCallStatement parsedElement = getParsedElement(); IParsedElement pe = parsedElement.getLocation().getChildren().get(0).getParsedElement(); return ((IMethodCallExpression) pe).getType(); } @Override public PsiExpression getExpression() { return (PsiExpression) getFirstChild(); } }