package jetbrains.mps.lang.typesystem.behavior;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import java.util.List;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
public class MessageStatementUtil {
public static final int MIN_LENGTH = 3;
private static final int MAX_LENGTH = 20;
public static String generateNameFromExpression(SNode expr) {
List<SNode> descendants = SNodeOperations.getNodeDescendants(expr, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d565d10L, "jetbrains.mps.baseLanguage.structure.StringLiteral"), true, new SAbstractConcept[]{});
if (ListSequence.fromList(descendants).isEmpty()) {
return null;
}
return convertToCamelCaseNameString(SPropertyOperations.getString(ListSequence.fromList(descendants).last(), MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93d565d10L, 0xf93d565d11L, "value")));
}
private static String convertToCamelCaseNameString(String nameString) {
String[] tokens = nameString.split(" ");
String result = "";
for (String token : tokens) {
if (result.length() > MAX_LENGTH) {
break;
}
result += convertTokenToCamelCase(token);
}
return result;
}
private static String convertTokenToCamelCase(String token) {
token = clearNameFromNonJavaSymbols(token);
if (token.length() <= 1) {
return "";
}
return token.substring(0, 1).toUpperCase() + token.substring(1).toLowerCase();
}
private static String clearNameFromNonJavaSymbols(String name) {
name = name.toLowerCase();
String res = "";
for (int i = 0; i < name.length(); ++i) {
if (name.charAt(i) >= 'a' && name.charAt(i) <= 'z') {
res += name.charAt(i);
}
}
return res;
}
}