/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.debugger.evaluation;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilder;
import com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiClassOwner;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import gw.plugin.ij.lang.psi.IGosuPsiElement;
/**
*/
public class GosuEvaluatorBuilderImpl implements EvaluatorBuilder {
private static final GosuEvaluatorBuilderImpl INSTANCE = new GosuEvaluatorBuilderImpl();
public static EvaluatorBuilder instance() {
return INSTANCE;
}
public ExpressionEvaluator build( PsiElement codeFragment, SourcePosition position ) throws EvaluateException {
PsiClass contextOfType = PsiTreeUtil.getContextOfType( codeFragment, PsiClass.class, false );
PsiClassOwner ctxFile = (PsiClassOwner)contextOfType.getContainingFile();
return new GosuExpressionEvaluatorImpl(
codeFragment.getProject(),
"DebuggerFragment",
codeFragment.getText(),
ctxFile.getClasses()[0].getQualifiedName(),
contextOfType.getQualifiedName(),
position.getOffset() );
}
private IGosuPsiElement getGosuPsiElementFromCtx( PsiElement context ) {
if( context == null ) {
return null;
}
if( context instanceof IGosuPsiElement ) {
return (IGosuPsiElement)context;
}
return getGosuPsiElementFromCtx( context.getParent() );
}
}