/*******************************************************************************
* Copyright (c) 2005, 2012 eBay Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
/**
*
*/
package org.eclipse.vjet.eclipse.internal.codeassist.select.translator;
import org.eclipse.vjet.dsf.jst.IJstMethod;
import org.eclipse.vjet.dsf.jst.IJstNode;
import org.eclipse.vjet.dsf.jst.declaration.JstMethod;
import org.eclipse.vjet.dsf.jst.declaration.JstVars;
import org.eclipse.vjet.eclipse.codeassist.CodeassistUtils;
import org.eclipse.vjet.eclipse.core.IVjoSourceModule;
import org.eclipse.vjet.eclipse.core.VjetPlugin;
import org.eclipse.vjet.eclipse.internal.codeassist.select.JstNodeDLTKElementResolver;
import org.eclipse.dltk.mod.core.IMember;
import org.eclipse.dltk.mod.core.IModelElement;
import org.eclipse.dltk.mod.core.ModelException;
/**
* JstVars translator
*
*
*
*/
public class JstVarsTranslator extends DefaultNodeTranslator {
/*
* (non-Javadoc)
*
* @see org.eclipse.vjet.eclipse.internal.codeassist.select.translator.DefaultNodeTranslator#convert(org.eclipse.vjet.dsf.jst.IJstNode)
*/
@Override
public IModelElement[] convert(IVjoSourceModule module, IJstNode node) {
JstVars jstVars = (JstVars) node;
if (jstVars.getSource() == null) {
return null;
}
IJstNode declaringBlock = CodeassistUtils.findDeclaringMethod(jstVars);
if(declaringBlock==null){
declaringBlock = CodeassistUtils.findDeclaringBlock(jstVars);
}
IModelElement element =null;
IModelElement[] elementFromAry = JstNodeDLTKElementResolver.lookupAndConvert(declaringBlock);
if(elementFromAry!=null && elementFromAry.length==1){
element = elementFromAry[0];
}
if(declaringBlock instanceof JstMethod){
IJstMethod jstMethod = (JstMethod)declaringBlock;
if ( jstMethod!=null ) {//get the first signature method
if(!jstMethod.getOverloaded().isEmpty()){
IModelElement[] convert = JstNodeDLTKElementResolver.convert(module, jstMethod.getOverloaded().get(0));
if(convert!=null && convert.length>0){
element = convert[0];
}
}else{
IModelElement[] convert = JstNodeDLTKElementResolver.convert(module, jstMethod);
if(convert!=null && convert.length>0){
element = convert[0];
}
}
}
}
if (element == null ) {
return null;
}
try {
IMember dltkMethod = (IMember) element;
// TODO support selection engine for var x,y,z;
String localVarName = CodeassistUtils.getFirstVariableName(jstVars);
IModelElement[] children = dltkMethod.getChildren();
for (int i = 0; i < children.length; i++) {
if (IModelElement.FIELD == children[i].getElementType()
&& children[i].getElementName().equals(localVarName)) {
return new IModelElement[]{children[i]};
}
}
} catch (ModelException e) {
VjetPlugin.error(e.getLocalizedMessage(), e);
}
return null;
}
}