Skip to content

Commit

Permalink
Check for Java keywords in java package validity check
Browse files Browse the repository at this point in the history
  • Loading branch information
gbevin committed Dec 27, 2024
1 parent 4f6c294 commit c59c269
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 15 deletions.
28 changes: 13 additions & 15 deletions src/main/java/rife/validation/ValidityChecks.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import rife.tools.ArrayUtils;
import rife.tools.StringUtils;

import javax.lang.model.SourceVersion;
import java.lang.reflect.Array;
import java.net.MalformedURLException;
import java.net.URL;
Expand Down Expand Up @@ -518,46 +519,43 @@ public static boolean checkJavaPackage(Object value) {

var identifier = true;
var it = new StringCharacterIterator(name);
var segment = new StringBuilder();
var first = true;
for (var c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
if ((first && !Character.isJavaIdentifierStart(c)) ||
(!first && !Character.isJavaIdentifierPart(c))) {
if (c == '.') {
if (SourceVersion.isKeyword(segment)) {
identifier = false;
break;
}

first = true;
segment.setLength(0);
continue;
}
else {
identifier = false;
break;
}
}

segment.append(c);
first = false;
}

return identifier;
return identifier && !SourceVersion.isKeyword(segment);
}

public static boolean checkJavaIdentifier(Object value) {
if (null == value) {
return false;
}

if (!(value instanceof String name) || name.isBlank()) {
if (!(value instanceof CharSequence name)) {
return false;
}

var identifier = true;
var first = true;
var it = new StringCharacterIterator(name);
for (var c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
if ((first && !Character.isJavaIdentifierStart(c)) ||
(!first && !Character.isJavaIdentifierPart(c))) {
identifier = false;
break;
}
first = false;
}

return identifier;
return SourceVersion.isIdentifier(name);
}
}
5 changes: 5 additions & 0 deletions src/test/java/rife/validation/TestValidityChecks.java
Original file line number Diff line number Diff line change
Expand Up @@ -514,8 +514,13 @@ void testJavaPackage() {
assertFalse(ValidityChecks.checkJavaPackage(".a.b"));
assertFalse(ValidityChecks.checkJavaPackage("1.a.b"));
assertFalse(ValidityChecks.checkJavaPackage("a.1b"));
assertFalse(ValidityChecks.checkJavaPackage("int"));
assertFalse(ValidityChecks.checkJavaPackage("if.b"));
assertFalse(ValidityChecks.checkJavaPackage("a.while"));
assertTrue(ValidityChecks.checkJavaPackage("a"));
assertTrue(ValidityChecks.checkJavaPackage("a.b"));
assertTrue(ValidityChecks.checkJavaPackage("a.int_"));
assertTrue(ValidityChecks.checkJavaPackage("a.int_.while_"));
assertTrue(ValidityChecks.checkJavaPackage("com.A1.bB"));
}

Expand Down

0 comments on commit c59c269

Please sign in to comment.