Got rid of all Reflection. Sadly a bit of Performance loss
This commit is contained in:
parent
8937d44428
commit
6f3f45d718
|
@ -5,7 +5,7 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
archivesBaseName = 'Simple Code Generator'
|
archivesBaseName = 'Simple Code Generator'
|
||||||
version = '1.0.3'
|
version = '1.0.4'
|
||||||
apply plugin: 'maven'
|
apply plugin: 'maven'
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package speiger.src.builder.mappers;
|
package speiger.src.builder.mappers;
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import speiger.src.builder.misc.RegexMatcher;
|
||||||
import speiger.src.builder.misc.RegexUtil;
|
import speiger.src.builder.misc.RegexUtil;
|
||||||
|
|
||||||
public class ArgumentMapper implements IMapper
|
public class ArgumentMapper implements IMapper
|
||||||
|
@ -49,7 +49,7 @@ public class ArgumentMapper implements IMapper
|
||||||
@Override
|
@Override
|
||||||
public String apply(String t)
|
public String apply(String t)
|
||||||
{
|
{
|
||||||
Matcher matcher = pattern.matcher(t);
|
RegexMatcher matcher = new RegexMatcher(pattern, t);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(matcher.find())
|
if(matcher.find())
|
||||||
|
@ -57,17 +57,16 @@ public class ArgumentMapper implements IMapper
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if(matcher.end() < RegexUtil.getLastAppendPosition(matcher)) return apply(matcher.appendTail(buffer).toString());
|
|
||||||
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
|
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
|
||||||
if(!text.isEmpty())
|
if(!text.isEmpty())
|
||||||
{
|
{
|
||||||
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
|
matcher.appendReplacement(buffer, "").skip(text.length());
|
||||||
buffer.append(String.format(replacement, (Object[])getString(text).split(argumentBreaker)));
|
buffer.append(String.format(replacement, (Object[])getString(text).split(argumentBreaker)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while(matcher.find());
|
while(matcher.find());
|
||||||
matcher.appendTail(buffer);
|
matcher.appendTail(buffer);
|
||||||
return buffer.toString();
|
return apply(buffer.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package speiger.src.builder.mappers;
|
package speiger.src.builder.mappers;
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import speiger.src.builder.misc.RegexMatcher;
|
||||||
import speiger.src.builder.misc.RegexUtil;
|
import speiger.src.builder.misc.RegexUtil;
|
||||||
|
|
||||||
public class InjectMapper implements IMapper
|
public class InjectMapper implements IMapper
|
||||||
|
@ -47,7 +47,7 @@ public class InjectMapper implements IMapper
|
||||||
@Override
|
@Override
|
||||||
public String apply(String t)
|
public String apply(String t)
|
||||||
{
|
{
|
||||||
Matcher matcher = pattern.matcher(t);
|
RegexMatcher matcher = new RegexMatcher(pattern, t);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(matcher.find())
|
if(matcher.find())
|
||||||
|
@ -55,16 +55,15 @@ public class InjectMapper implements IMapper
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if(matcher.end() < RegexUtil.getLastAppendPosition(matcher)) return apply(matcher.appendTail(buffer).toString());
|
|
||||||
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
|
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
|
||||||
if(!text.isEmpty())
|
if(!text.isEmpty())
|
||||||
{
|
{
|
||||||
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
|
matcher.appendReplacement(buffer, "").skip(text.length());
|
||||||
buffer.append(String.format(replacement, getString(text)));
|
buffer.append(String.format(replacement, getString(text)));
|
||||||
}
|
}
|
||||||
} while (matcher.find());
|
} while (matcher.find());
|
||||||
matcher.appendTail(buffer);
|
matcher.appendTail(buffer);
|
||||||
return buffer.toString();
|
return apply(buffer.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package speiger.src.builder.mappers;
|
package speiger.src.builder.mappers;
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import speiger.src.builder.misc.RegexMatcher;
|
||||||
import speiger.src.builder.misc.RegexUtil;
|
import speiger.src.builder.misc.RegexUtil;
|
||||||
|
|
||||||
public class LineMapper implements IMapper
|
public class LineMapper implements IMapper
|
||||||
|
@ -30,7 +30,7 @@ public class LineMapper implements IMapper
|
||||||
@Override
|
@Override
|
||||||
public String apply(String t)
|
public String apply(String t)
|
||||||
{
|
{
|
||||||
Matcher matcher = pattern.matcher(t);
|
RegexMatcher matcher = new RegexMatcher(pattern, t);
|
||||||
if(matcher.find())
|
if(matcher.find())
|
||||||
{
|
{
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
@ -42,11 +42,11 @@ public class LineMapper implements IMapper
|
||||||
{
|
{
|
||||||
matcher.appendReplacement(buffer, pattern.pattern());
|
matcher.appendReplacement(buffer, pattern.pattern());
|
||||||
buffer.setLength(buffer.length() - (start - result[0]));
|
buffer.setLength(buffer.length() - (start - result[0]));
|
||||||
RegexUtil.skip(matcher, result[1] - start);
|
matcher.skip(result[1] - start);
|
||||||
}
|
}
|
||||||
} while (matcher.find());
|
} while (matcher.find());
|
||||||
matcher.appendTail(buffer);
|
matcher.appendTail(buffer);
|
||||||
return buffer.toString();
|
return apply(buffer.toString());
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
package speiger.src.builder.misc;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class RegexMatcher
|
||||||
|
{
|
||||||
|
Matcher match;
|
||||||
|
StringWrapper text;
|
||||||
|
|
||||||
|
public RegexMatcher(Pattern pattern, String text)
|
||||||
|
{
|
||||||
|
this.text = new StringWrapper(text);
|
||||||
|
match = pattern.matcher(this.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean find()
|
||||||
|
{
|
||||||
|
return match.find();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int end()
|
||||||
|
{
|
||||||
|
return match.end()+text.getOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegexMatcher appendReplacement(StringBuffer sb, String replacement)
|
||||||
|
{
|
||||||
|
match.appendReplacement(sb, replacement);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegexMatcher appendTail(StringBuffer sb)
|
||||||
|
{
|
||||||
|
match.appendTail(sb);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegexMatcher skip(int amount)
|
||||||
|
{
|
||||||
|
text.offset(amount+match.end());
|
||||||
|
match.reset();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class StringWrapper implements CharSequence
|
||||||
|
{
|
||||||
|
String s;
|
||||||
|
int offset;
|
||||||
|
|
||||||
|
public StringWrapper(String s)
|
||||||
|
{
|
||||||
|
this.s = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int length()
|
||||||
|
{
|
||||||
|
return s.length() - offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public char charAt(int index)
|
||||||
|
{
|
||||||
|
return s.charAt(index+offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence subSequence(int start, int end)
|
||||||
|
{
|
||||||
|
return s.subSequence(start+offset, end+offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void offset(int offset)
|
||||||
|
{
|
||||||
|
this.offset += offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOffset()
|
||||||
|
{
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,37 +1,7 @@
|
||||||
package speiger.src.builder.misc;
|
package speiger.src.builder.misc;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
|
|
||||||
public class RegexUtil
|
public class RegexUtil
|
||||||
{
|
{
|
||||||
static Field LAST_POS;
|
|
||||||
|
|
||||||
public static Matcher skip(Matcher matcher, int amount)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LAST_POS.setInt(matcher, LAST_POS.getInt(matcher) + amount);
|
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return matcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getLastAppendPosition(Matcher matcher)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return LAST_POS.getInt(matcher);
|
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String searchUntil(String text, int startIndex, char increase, char decrease)
|
public static String searchUntil(String text, int startIndex, char increase, char decrease)
|
||||||
{
|
{
|
||||||
if(text.charAt(startIndex + 1) != increase)
|
if(text.charAt(startIndex + 1) != increase)
|
||||||
|
@ -72,19 +42,4 @@ public class RegexUtil
|
||||||
if(start == -1) return null;
|
if(start == -1) return null;
|
||||||
return new int[]{start, offset};
|
return new int[]{start, offset};
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Field field = Matcher.class.getDeclaredField("lastAppendPosition");
|
|
||||||
field.setAccessible(true);
|
|
||||||
LAST_POS = field;
|
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue