From 57f45b0409d5363782052183bb090175c469f89a Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 4 Aug 2014 00:26:48 -0400 Subject: added stable save order for mappings to hopefully help with merging added color-coding for source identifiers redesigned rename GUI customized editor pane, added popup menu finished name validation added last-chance save on window close --- src/cuchaz/enigma/mapping/NameValidator.java | 52 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 17 deletions(-) (limited to 'src/cuchaz/enigma/mapping/NameValidator.java') diff --git a/src/cuchaz/enigma/mapping/NameValidator.java b/src/cuchaz/enigma/mapping/NameValidator.java index 30982dc..a8421fa 100644 --- a/src/cuchaz/enigma/mapping/NameValidator.java +++ b/src/cuchaz/enigma/mapping/NameValidator.java @@ -10,12 +10,28 @@ ******************************************************************************/ package cuchaz.enigma.mapping; +import java.util.Arrays; +import java.util.List; import java.util.regex.Pattern; +import javassist.bytecode.Descriptor; + public class NameValidator { - private static final String IdentifierPattern; + private static final Pattern IdentifierPattern; private static final Pattern ClassPattern; + private static final List ReservedWords = Arrays.asList( + "abstract", "continue", "for", "new", "switch", + "assert", "default", "goto", "package", "synchronized", + "boolean", "do", "if", "private", "this", + "break", "double", "implements", "protected", "throw", + "byte", "else", "import", "public", "throws", + "case", "enum", "instanceof", "return", "transient", + "catch", "extends", "int", "short", "try", + "char", "final", "interface", "static", "void", + "class", "finally", "long", "strictfp", "volatile", + "const", "float", "native", "super", "while" + ); static { @@ -34,34 +50,36 @@ public class NameValidator } } - IdentifierPattern = String.format( "[\\Q%s\\E][\\Q%s\\E]*", startChars.toString(), partChars.toString() ); - ClassPattern = Pattern.compile( String.format( "^(%s(\\.|/))*(%s)$", IdentifierPattern, IdentifierPattern ) ); + String identifierRegex = "[A-Za-z_<][A-Za-z0-9_>]*"; + IdentifierPattern = Pattern.compile( identifierRegex ); + ClassPattern = Pattern.compile( String.format( "^(%s(\\.|/))*(%s)$", identifierRegex, identifierRegex ) ); } - public String validateClassName( String name ) + public static String validateClassName( String name ) { - if( !ClassPattern.matcher( name ).matches() ) + if( name == null || !ClassPattern.matcher( name ).matches() || ReservedWords.contains( name ) ) { - throw new IllegalArgumentException( "Illegal name: " + name ); + throw new IllegalNameException( name ); } - - return classNameToJavaName( name ); + return Descriptor.toJvmName( name ); } - public static String fileNameToClassName( String fileName ) + public static String validateFieldName( String name ) { - final String suffix = ".class"; - - if( !fileName.endsWith( suffix ) ) + if( name == null || !IdentifierPattern.matcher( name ).matches() || ReservedWords.contains( name ) ) { - return null; + throw new IllegalNameException( name ); } - - return fileName.substring( 0, fileName.length() - suffix.length() ).replace( "/", "." ); + return name; + } + + public static String validateMethodName( String name ) + { + return validateFieldName( name ); } - public static String classNameToJavaName( String className ) + public static String validateArgumentName( String name ) { - return className.replace( ".", "/" ); + return validateFieldName( name ); } } -- cgit v1.2.3