package org.overture.ide.ui.templates;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContext;
import org.overture.ast.definitions.AExplicitFunctionDefinition;
import org.overture.ast.definitions.AExplicitOperationDefinition;
import org.overture.ast.definitions.AImplicitFunctionDefinition;
import org.overture.ast.definitions.AImplicitOperationDefinition;
import org.overture.ast.node.INode;
import org.overture.ast.patterns.APatternListTypePair;
import org.overture.ast.patterns.PPattern;
public class VdmFunctionCompletionExtractor{
private static VdmCompletionHelper VdmHelper = new VdmCompletionHelper();
public String[] implicitFunctionNameExtractor(AImplicitFunctionDefinition node){
String functionName[] = new String[2];
String[] SplitName = (node.getName().toString()).split("\\(");
functionName[0] = SplitName[0];
if(functionName[0] != null && !functionName[0].isEmpty()){
functionName[1] = functionName[0] + "("; //ReplacemestString
}
List<String> parameterNameList = null;
parameterNameList = implicitFunctionParameterNameExtractor(node);
return VdmHelper.templatePatternGenerator(parameterNameList,functionName);
}
public String[] explicitFunctionNameExtractor(AExplicitFunctionDefinition node){
String functionName[] = new String[2];
String[] SplitName = (node.getName().toString()).split("\\(");
functionName[0] = SplitName[0];
if(functionName[0] != null && !functionName[0].isEmpty()){
functionName[1] = functionName[0] + "("; //ReplacemestString
}
List<String> parameterNameList = null;
parameterNameList = explicitFunctionParameterNameExtractor(node);
return VdmHelper.templatePatternGenerator(parameterNameList,functionName);
}
public List<String> explicitFunctionParameterNameExtractor(AExplicitFunctionDefinition node) {
List<String> parameterNameList = new ArrayList<String>();
LinkedList<List<PPattern>> strList = node.getParamPatternList();
List<PPattern> paramList = strList.getFirst();
for (PPattern str : paramList) {
parameterNameList.add(str.toString());
}
return parameterNameList;
}
public List<String> implicitFunctionParameterNameExtractor(AImplicitFunctionDefinition node) {
List<String> parameterNameList = new ArrayList<String>();
LinkedList<APatternListTypePair> strList = node.getParamPatterns();
for(int i = 0;i < strList.size(); i++){
parameterNameList.add(strList.get(i).getPatterns().getFirst().toString());
}
return parameterNameList;
}
}