Variouse BugFixes and additions.

-Fixed: Bugs in Mappers causing problems when parsing library.
-Fixed: IConditon should throw a error with 0 arguments.
-Added: CacheFile is now sorted so you can remove caches easier.
-Removed: Unnessesary code.
-Added: Counters.
-Added: Gitignore
This commit is contained in:
Speiger 2021-06-21 16:55:39 +02:00
parent 0f00ad1771
commit 54e66d7f53
8 changed files with 69 additions and 28 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
# ---> Gradle
.gradle
settings.gradle
**/build/
!src/**/build/

View File

@ -42,7 +42,7 @@ public class ConditionedSegment
ConditionedSegment segment = new ConditionedSegment(startIndex);
ICondition condition = ICondition.parse(currentLine);
List<ConditionedSegment> childSegments = new ArrayList<>();
StringJoiner segmentText = new StringJoiner("\n", "\n", "");
StringJoiner segmentText = new StringJoiner("\n", (currentIndex <= 0 || includeStartNewLine(lines.get(currentIndex-1).trim())) ? "\n" : "", "");
for(int i = currentIndex+1;i<lines.size();i++)
{
String s = lines.get(i);
@ -80,4 +80,8 @@ public class ConditionedSegment
throw new IllegalStateException("Unclosed #If found in ["+fileName+"] at line ["+startIndex+"]");
}
static boolean includeStartNewLine(String s)
{
return !s.startsWith("#") || s.equalsIgnoreCase("#endif");
}
}

View File

@ -48,7 +48,7 @@ public interface ICondition
}
switch(conditions.size())
{
case 0: return ALWAYS_TRUE;
case 0: throw new IllegalStateException("Empty Conditions are not allowed");
case 1: return conditions.get(0);
default: return new OrCondition(conditions);
}

View File

@ -50,21 +50,29 @@ public class ArgumentMapper implements IMapper
public String apply(String t)
{
Matcher matcher = pattern.matcher(t);
if(matcher.find())
try
{
StringBuffer buffer = new StringBuffer();
do
if(matcher.find())
{
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
if(!text.isEmpty())
StringBuffer buffer = new StringBuffer();
do
{
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
buffer.append(String.format(replacement, (Object[])getString(text).split(argumentBreaker)));
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));
if(!text.isEmpty())
{
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
buffer.append(String.format(replacement, (Object[])getString(text).split(argumentBreaker)));
}
}
while(matcher.find());
matcher.appendTail(buffer);
return buffer.toString();
}
while(matcher.find());
matcher.appendTail(buffer);
return buffer.toString();
}
catch(Exception e)
{
e.printStackTrace();
}
return t;
}

View File

@ -48,20 +48,28 @@ public class InjectMapper implements IMapper
public String apply(String t)
{
Matcher matcher = pattern.matcher(t);
if(matcher.find())
try
{
StringBuffer buffer = new StringBuffer();
do
if(matcher.find())
{
String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1));
if(!text.isEmpty())
StringBuffer buffer = new StringBuffer();
do
{
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
buffer.append(String.format(replacement, getString(text)));
}
} while (matcher.find());
matcher.appendTail(buffer);
return buffer.toString();
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));
if(!text.isEmpty())
{
RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length());
buffer.append(String.format(replacement, getString(text)));
}
} while (matcher.find());
matcher.appendTail(buffer);
return buffer.toString();
}
}
catch(Exception e)
{
e.printStackTrace();
}
return t;
}

View File

@ -6,9 +6,10 @@ import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class FileUtils
{
@ -40,9 +41,11 @@ public class FileUtils
{
try(BufferedWriter writer = Files.newBufferedWriter(dataFolder.resolve("cache.bin")))
{
for(Entry<String, String> entry : mappings.entrySet())
List<String> keys = new ArrayList<String>(mappings.keySet());
keys.sort(String.CASE_INSENSITIVE_ORDER);
for(String s : keys)
{
writer.write(entry.getKey()+"="+entry.getValue());
writer.write(s+"="+mappings.get(s));
writer.newLine();
}
writer.flush();

View File

@ -20,6 +20,18 @@ public class RegexUtil
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)
{
if(text.charAt(startIndex + 1) != increase)

View File

@ -11,6 +11,7 @@ import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@ -56,6 +57,7 @@ public abstract class TemplateProcessor
System.out.println("Nothing has changed");
return false;
}
AtomicLong[] counters = new AtomicLong[]{new AtomicLong(), new AtomicLong(), new AtomicLong()};
final boolean relative = relativePackages();
Set<IMapper>[] mappers = debugUnusedMappers() ? new Set[]{Collections.synchronizedSet(new HashSet<IMapper>()), Collections.synchronizedSet(new HashSet<IMapper>())} : null;
ThreadPoolExecutor service = (ThreadPoolExecutor)Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
@ -67,8 +69,11 @@ public abstract class TemplateProcessor
Path path = pathsLeft.get(i);
try
{
long startTime = System.currentTimeMillis();
Template template = Template.parse(path);
createProcesses(FileUtils.getFileName(path), T -> service.execute(new BuildTask(relative ? outputFolder.resolve(sourceFolder.relativize(path).getParent()) : outputFolder, template, T, mappers)));
counters[2].addAndGet(System.currentTimeMillis() - startTime);
counters[1].addAndGet(1);
createProcesses(FileUtils.getFileName(path), T -> {service.execute(new BuildTask(relative ? outputFolder.resolve(sourceFolder.relativize(path).getParent()) : outputFolder, template, T, mappers));counters[0].addAndGet(1);});
}
catch(Exception e)
{
@ -95,7 +100,7 @@ public abstract class TemplateProcessor
System.out.println("Mapper ["+mapper.getSearchValue()+"] is not used in the Entire Build Process");
}
}
System.out.println("Finished Tasks: "+(System.currentTimeMillis() - start)+"ms");
System.out.println("Finished Building ["+counters[0].get()+"] Files from ["+counters[1].get()+"] in "+(System.currentTimeMillis() - start)+"ms (Template Parsing: "+counters[2].get()+"ms (avg: "+((counters[2].get() / Math.max(1D, counters[1].get())))+"ms)");
FileUtils.saveMappings(existing, dataFolder);
System.out.print("Saved Changes");
return true;