package org.aksw.sparqlify.core.cast; import java.util.ArrayList; import java.util.List; import org.aksw.sparqlify.type_system.MethodDeclaration; import org.aksw.sparqlify.type_system.MethodSignature; public class MethodDeclarationParserSimple { /** * Very hacky parser for method declarations * TODO Use a grammar based parser instead * * @param str * @return */ public static MethodDeclaration<String> parse(String str) { String[] splits = str.replace('(', ' ').replace(')', ' ').replace(',', ' ').trim().split("\\s+"); //String[] splits = str.split("\\s*(,|\\(|\\))"); String returnType = splits[0]; String name = splits[1]; List<String> paramTypes = new ArrayList<String>(); for(int i = 2; i < splits.length - 1; ++i) { String type = splits[i]; paramTypes.add(type); } String last = splits[splits.length - 1]; String varArgType = null; if(last.endsWith("...")) { varArgType = last.split("\\s+", 2)[0]; } else { paramTypes.add(last); } MethodSignature<String> sig = MethodSignature.create(returnType, paramTypes, varArgType); MethodDeclaration<String> result = MethodDeclaration.create(name, sig); return result; } }