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; } }