1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | package Torello.Java;
class ExtractTypeName
{
static String extract
(final String srcFileName, final boolean throwOnBadTypeName)
{
final int LEN = srcFileName.length();
final int END_LEN;
if (srcFileName.endsWith(".java"))
END_LEN = 5;
else if (srcFileName.endsWith(".class"))
END_LEN = 6;
else throw new IllegalArgumentException
("The File-Name passed is not a valid '.java' or '.class' File");
// Now, the following loop will search for the first instance of a forward or backwards
// slash. If it doesn't find one before reaching the start of the String, the loop breaks
// The loop start at the end of the String, and searches left-wards (towards the beginning)
int pos = LEN - END_LEN - 1;
while (pos >= 0)
{
final char c = srcFileName.charAt(pos);
if (c == '\\') break;
if (c == '/') break;
pos--;
}
// If the loop reached the beginning of the String without finding any of the two standard
// file-separators, then this "Source-File-Name" is a File-Name without any Directory-Path
// Information. Use the entire-beginning of the input string!
if (pos == -1) pos = 0;
// Otherwise, make sure to "skip past" the actual File-Separator character!
else pos++;
// This is the computed string to return. It leaves off the beginning Directory Stuff (if
// there were any), and it also leaves off the ending File-Suffix.
final String ret = srcFileName.substring(pos, LEN - END_LEN);
if (! StrSource.isValidJavaIdentifier(ret))
{
if (throwOnBadTypeName)
throw new JavaIdentifierException("You fucked up");
else
return null;
}
return ret;
}
}
|