Skip to content

Commit

Permalink
Add some comments and simplify logic
Browse files Browse the repository at this point in the history
  • Loading branch information
lukebemish committed Apr 10, 2024
1 parent a32109e commit d24d6be
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/main/java/net/neoforged/accesstransformer/parser/AtParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,19 @@ public static List<AccessTransformer> parse(Reader wrappedReader, String originN
List<AccessTransformer> accessTransformers = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
// Strip comments and split on spaces
StringBuilder builder = new StringBuilder();
line.chars().takeWhile(c -> c != '#').forEach(builder::appendCodePoint);
String withoutComments = builder.toString();
List<String> parts = new ArrayList<>();
builder.setLength(0);
for (char c : withoutComments.toCharArray()) {
for (char c : line.toCharArray()) {
if (Character.isWhitespace(c)) {
if (!builder.isEmpty()) {
parts.add(builder.toString());
}
builder.setLength(0);
} else if (c == '#') {
builder.setLength(0);
break;
} else {
builder.appendCodePoint(c);
}
Expand All @@ -46,11 +48,14 @@ public static List<AccessTransformer> parse(Reader wrappedReader, String originN
parts.add(builder.toString());
}
if (parts.isEmpty()) {
// The line is empty or all comments
continue;
}
if (parts.size() < 2) {
throw new RuntimeException("Invalid line " + reader.getLineNumber() + "; should be '<modifier> <class name>'");
// The line has something in the "modifier" slot but nothing else
throw new RuntimeException("Invalid line " + reader.getLineNumber() + "; should be '<modifier> <class name> [<member>]'");
}

String modifierString = parts.get(0);
AccessTransformer.FinalState finalState = AccessTransformer.FinalState.LEAVE;
if (modifierString.endsWith("-f")) {
Expand All @@ -61,7 +66,9 @@ public static List<AccessTransformer> parse(Reader wrappedReader, String originN
modifierString = modifierString.substring(0, modifierString.length() - 2);
}
AccessTransformer.Modifier modifier = parseModifier(modifierString, reader.getLineNumber());

String className = parts.get(1);
// Validate class name as dot-separated java identifiers
int finalIndex = reader.getLineNumber();
if (className.chars().reduce(0, (last, current) -> {
if (last == 0 && !Character.isJavaIdentifierStart(current) ||
Expand All @@ -78,6 +85,7 @@ public static List<AccessTransformer> parse(Reader wrappedReader, String originN

if (parts.size() < 3) {
target = new ClassTarget(className);
// Class ATs of inner classes have a corresponding inner class AT for the nesting class
locateInnerClassAts(className, modifier, finalState, originName, reader.getLineNumber(), accessTransformers);
} else {
String identifier = parts.get(2);
Expand Down

0 comments on commit d24d6be

Please sign in to comment.