summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/mapping/NameValidator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/mapping/NameValidator.java')
-rw-r--r--src/cuchaz/enigma/mapping/NameValidator.java79
1 files changed, 31 insertions, 48 deletions
diff --git a/src/cuchaz/enigma/mapping/NameValidator.java b/src/cuchaz/enigma/mapping/NameValidator.java
index c6ae596..35a17f9 100644
--- a/src/cuchaz/enigma/mapping/NameValidator.java
+++ b/src/cuchaz/enigma/mapping/NameValidator.java
@@ -16,82 +16,65 @@ import java.util.regex.Pattern;
16 16
17import javassist.bytecode.Descriptor; 17import javassist.bytecode.Descriptor;
18 18
19public class NameValidator 19public class NameValidator {
20{ 20
21 private static final Pattern IdentifierPattern; 21 private static final Pattern IdentifierPattern;
22 private static final Pattern ClassPattern; 22 private static final Pattern ClassPattern;
23 private static final List<String> ReservedWords = Arrays.asList( 23 private static final List<String> ReservedWords = Arrays.asList(
24 "abstract", "continue", "for", "new", "switch", 24 "abstract", "continue", "for", "new", "switch", "assert", "default", "goto", "package", "synchronized",
25 "assert", "default", "goto", "package", "synchronized", 25 "boolean", "do", "if", "private", "this", "break", "double", "implements", "protected", "throw", "byte",
26 "boolean", "do", "if", "private", "this", 26 "else", "import", "public", "throws", "case", "enum", "instanceof", "return", "transient", "catch",
27 "break", "double", "implements", "protected", "throw", 27 "extends", "int", "short", "try", "char", "final", "interface", "static", "void", "class", "finally",
28 "byte", "else", "import", "public", "throws", 28 "long", "strictfp", "volatile", "const", "float", "native", "super", "while"
29 "case", "enum", "instanceof", "return", "transient",
30 "catch", "extends", "int", "short", "try",
31 "char", "final", "interface", "static", "void",
32 "class", "finally", "long", "strictfp", "volatile",
33 "const", "float", "native", "super", "while"
34 ); 29 );
35 30
36 static 31 static {
37 { 32
38 // java allows all kinds of weird characters... 33 // java allows all kinds of weird characters...
39 StringBuilder startChars = new StringBuilder(); 34 StringBuilder startChars = new StringBuilder();
40 StringBuilder partChars = new StringBuilder(); 35 StringBuilder partChars = new StringBuilder();
41 for( int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++ ) 36 for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
42 { 37 if (Character.isJavaIdentifierStart(i)) {
43 if( Character.isJavaIdentifierStart( i ) ) 38 startChars.appendCodePoint(i);
44 {
45 startChars.appendCodePoint( i );
46 } 39 }
47 if( Character.isJavaIdentifierPart( i ) ) 40 if (Character.isJavaIdentifierPart(i)) {
48 { 41 partChars.appendCodePoint(i);
49 partChars.appendCodePoint( i );
50 } 42 }
51 } 43 }
52 44
53 String identifierRegex = "[A-Za-z_<][A-Za-z0-9_>]*"; 45 String identifierRegex = "[A-Za-z_<][A-Za-z0-9_>]*";
54 IdentifierPattern = Pattern.compile( identifierRegex ); 46 IdentifierPattern = Pattern.compile(identifierRegex);
55 ClassPattern = Pattern.compile( String.format( "^(%s(\\.|/))*(%s)$", identifierRegex, identifierRegex ) ); 47 ClassPattern = Pattern.compile(String.format("^(%s(\\.|/))*(%s)$", identifierRegex, identifierRegex));
56 } 48 }
57 49
58 public static String validateClassName( String name, boolean packageRequired ) 50 public static String validateClassName(String name, boolean packageRequired) {
59 { 51 if (name == null) {
60 if( name == null )
61 {
62 return null; 52 return null;
63 } 53 }
64 if( !ClassPattern.matcher( name ).matches() || ReservedWords.contains( name ) ) 54 if (!ClassPattern.matcher(name).matches() || ReservedWords.contains(name)) {
65 { 55 throw new IllegalNameException(name, "This doesn't look like a legal class name");
66 throw new IllegalNameException( name, "This doesn't look like a legal class name" );
67 } 56 }
68 if( packageRequired && new ClassEntry( name ).getPackageName() == null ) 57 if (packageRequired && new ClassEntry(name).getPackageName() == null) {
69 { 58 throw new IllegalNameException(name, "Class must be in a package");
70 throw new IllegalNameException( name, "Class must be in a package" );
71 } 59 }
72 return Descriptor.toJvmName( name ); 60 return Descriptor.toJvmName(name);
73 } 61 }
74 62
75 public static String validateFieldName( String name ) 63 public static String validateFieldName(String name) {
76 { 64 if (name == null) {
77 if( name == null )
78 {
79 return null; 65 return null;
80 } 66 }
81 if( !IdentifierPattern.matcher( name ).matches() || ReservedWords.contains( name ) ) 67 if (!IdentifierPattern.matcher(name).matches() || ReservedWords.contains(name)) {
82 { 68 throw new IllegalNameException(name, "This doesn't look like a legal identifier");
83 throw new IllegalNameException( name, "This doesn't look like a legal identifier" );
84 } 69 }
85 return name; 70 return name;
86 } 71 }
87 72
88 public static String validateMethodName( String name ) 73 public static String validateMethodName(String name) {
89 { 74 return validateFieldName(name);
90 return validateFieldName( name );
91 } 75 }
92 76
93 public static String validateArgumentName( String name ) 77 public static String validateArgumentName(String name) {
94 { 78 return validateFieldName(name);
95 return validateFieldName( name );
96 } 79 }
97} 80}