0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-19 20:02:16 +02:00

slight optimization

avoids creating a matcher twice, looks nicer
This commit is contained in:
TrianguloY 2023-06-10 13:24:52 +02:00
parent 7e2e755e6b
commit dff73c1e63
2 changed files with 13 additions and 17 deletions

View File

@ -19,7 +19,6 @@ import com.trianguloy.urlchecker.utilities.JavaUtils;
import com.trianguloy.urlchecker.utilities.RegexFix;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
@ -111,14 +110,14 @@ class PatternDialog extends AModuleDialog {
public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
// init
messages.clear();
String url = urlData.url;
var url = urlData.url;
// check each pattern
JSONObject patterns = catalog.getCatalog();
for (String pattern : JavaUtils.toList(patterns.keys())) {
var patterns = catalog.getCatalog();
for (var pattern : JavaUtils.toList(patterns.keys())) {
try {
JSONObject data = patterns.optJSONObject(pattern);
Message message = new Message(pattern);
var data = patterns.optJSONObject(pattern);
var message = new Message(pattern);
// enabled?
if (data == null) continue;
@ -126,7 +125,7 @@ class PatternDialog extends AModuleDialog {
// get regex (must exists)
if (!data.has("regex")) continue;
Pattern regex = Pattern.compile(data.getString("regex"));
var regex_matcher = Pattern.compile(data.getString("regex")).matcher(url);
// applied?
message.applied = urlData.getData(APPLIED + pattern) != null;
@ -134,7 +133,7 @@ class PatternDialog extends AModuleDialog {
// check matches
// if 'regexp' matches, the pattern can match
// if 'regexp' doesn't match, the patter doesn't match
var matches = regex.matcher(url).find();
var matches = regex_matcher.find();
if (matches && data.has("excludeRegex")) {
// if 'excludeRegex' doesn't exist, the pattern can match
// if 'excludeRegex' matches, the pattern doesn't matches
@ -147,12 +146,12 @@ class PatternDialog extends AModuleDialog {
// check replacements
String replacement = null;
Object replacements = data.opt("replacement");
var replacements = data.opt("replacement");
if (replacements != null) {
// data exists
if (replacements instanceof JSONArray) {
// array, get random
JSONArray replacementsArray = (JSONArray) replacements;
var replacementsArray = (JSONArray) replacements;
replacement = replacementsArray.getString(new Random().nextInt(replacementsArray.length()));
} else {
// single data, get that one
@ -162,7 +161,7 @@ class PatternDialog extends AModuleDialog {
if (replacement != null) {
// replace url
message.newUrl = regexFix.replaceAll(url, regex, replacement);
message.newUrl = regexFix.replaceAll(url, regex_matcher, replacement);
// automatic? apply
if (data.optBoolean("automatic")) {

View File

@ -6,7 +6,6 @@ import android.view.View;
import android.widget.Switch;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* On Android 10 and under, optional groups may yield a "null" in the replacement output instead of an empty string.
@ -42,18 +41,16 @@ public class RegexFix {
}
/**
* Use this instead of: pattern.matcher(text).replaceAll(replacement)
* Use this instead of: matcher = pattern.matcher(text); result = matcher.replaceAll(replacement)
*/
public String replaceAll(String text, Pattern pattern, String replacement) {
Matcher matcher = pattern.matcher(text);
public String replaceAll(String text, Matcher matcher, String replacement) {
if (IS_ANDROID_FIXED || !pttrn_regexfix.get()) {
// no fix required or explicitly disabled, just use native function
return matcher.replaceAll(replacement);
}
// Copied from https://android.googlesource.com/platform/libcore/+/refs/heads/android13-release/ojluni/src/main/java/java/util/regex/Matcher.java#837
boolean result = matcher.find();
boolean result = matcher.reset().find();
if (result) {
StringBuffer sb = new StringBuffer();
int appendPos = 0;