/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.codeInsight; import com.intellij.codeInsight.TargetElementEvaluator; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import gw.plugin.ij.lang.psi.api.expressions.IGosuReferenceExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class GosuTargetElementEvaluator implements TargetElementEvaluator { public boolean includeSelfInGotoImplementation(@NotNull PsiElement element) { return false; } public PsiElement getElementByReference(@NotNull PsiReference ref, int flags) { PsiElement sourceElement = ref.getElement(); //## todo: // if( sourceElement instanceof IGosuCodeReferenceElement ) // { // GosuNewExpression newExpr; // // if( sourceElement.getParent() instanceof GosuNewExpression ) // { // newExpr = (GosuNewExpression)sourceElement.getParent(); // } // else if( sourceElement.getParent().getParent() instanceof GosuNewExpression ) // {//anonymous class declaration // newExpr = (GosuNewExpression)sourceElement.getParent().getParent(); // } // else // { // return null; // } // // final PsiMethod constructor = newExpr.resolveMethod(); // final IGosuArgumentList argumentList = newExpr.getArgumentList(); // if( constructor != null && // argumentList != null && // argumentList.getNamedArguments().length != 0 && // argumentList.getExpressionArguments().length == 0 ) // { // if( constructor.getParameterList().getParametersCount() == 0 ) // { // return constructor.getContainingClass(); // } // } // // return constructor; // } if (sourceElement instanceof IGosuReferenceExpression) { PsiElement resolved = ((IGosuReferenceExpression) sourceElement).resolve(); // if( resolved instanceof GosuGdkMethod ) // { // return correctSearchTargets( resolved ); // } return resolved; } return null; } @Nullable public static PsiElement correctSearchTargets(@Nullable PsiElement target) { if (target != null && !target.isPhysical()) { return target.getNavigationElement(); } return target; } }