mirror of
				https://github.com/DanilaFe/abacus
				synced 2025-11-03 10:23:41 -08:00 
			
		
		
		
	Merge pull request #42 from DanilaFe/java8-subset
Restrict Abacus core to a Java8 subset
This commit is contained in:
		
						commit
						5a1fdfe4bc
					
				@ -6,7 +6,6 @@ import java.util.Collection;
 | 
				
			|||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Stack;
 | 
					import java.util.Stack;
 | 
				
			||||||
import java.util.function.Function;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A pattern that can be compiled from a string and used in lexing.
 | 
					 * A pattern that can be compiled from a string and used in lexing.
 | 
				
			||||||
@ -36,8 +35,8 @@ public class Pattern<T> {
 | 
				
			|||||||
     * A map of regex operator to functions that modify a PatternChain
 | 
					     * A map of regex operator to functions that modify a PatternChain
 | 
				
			||||||
     * with the appropriate operation.
 | 
					     * with the appropriate operation.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Map<Character, Function<PatternChain<T>, PatternChain<T>>> operations =
 | 
					    private Map<Character, Transformation<T>> operations =
 | 
				
			||||||
            new HashMap<Character, Function<PatternChain<T>, PatternChain<T>>>() {{
 | 
					            new HashMap<Character, Transformation<T>>() {{
 | 
				
			||||||
                put('+', Pattern.this::transformPlus);
 | 
					                put('+', Pattern.this::transformPlus);
 | 
				
			||||||
                put('*', Pattern.this::transformStar);
 | 
					                put('*', Pattern.this::transformStar);
 | 
				
			||||||
                put('?', Pattern.this::transformQuestion);
 | 
					                put('?', Pattern.this::transformQuestion);
 | 
				
			||||||
@ -207,7 +206,7 @@ public class Pattern<T> {
 | 
				
			|||||||
            if (operations.containsKey(currentChar)) {
 | 
					            if (operations.containsKey(currentChar)) {
 | 
				
			||||||
                if (currentChain == null) return null;
 | 
					                if (currentChain == null) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                currentChain = operations.get(currentChar).apply(currentChain);
 | 
					                currentChain = operations.get(currentChar).transform(currentChain);
 | 
				
			||||||
                fullChain.append(currentChain);
 | 
					                fullChain.append(currentChain);
 | 
				
			||||||
                currentChain = null;
 | 
					                currentChain = null;
 | 
				
			||||||
                index++;
 | 
					                index++;
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					package org.nwapw.abacus.lexing.pattern;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * An interface that transforms a pattern chain into a different pattern chain.
 | 
				
			||||||
 | 
					 * @param <T> the type used to identify the nodes in the pattern chain.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface Transformation<T> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Performs the actual transformation.
 | 
				
			||||||
 | 
					     * @param from the original chain.
 | 
				
			||||||
 | 
					     * @return the resulting chain.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    PatternChain<T> transform(PatternChain<T> from);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
package org.nwapw.abacus.plugin;
 | 
					package org.nwapw.abacus.plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.nwapw.abacus.number.NumberInterface;
 | 
					import org.nwapw.abacus.number.NumberInterface;
 | 
				
			||||||
 | 
					import org.nwapw.abacus.number.promotion.PromotionFunction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.function.Function;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A class that holds data about a number implementation.
 | 
					 * A class that holds data about a number implementation.
 | 
				
			||||||
@ -14,7 +14,7 @@ public abstract class NumberImplementation {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The list of paths through which this implementation can be promoted.
 | 
					     * The list of paths through which this implementation can be promoted.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Map<String, Function<NumberInterface, NumberInterface>> promotionPaths;
 | 
					    private Map<String, PromotionFunction> promotionPaths;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * The implementation class for this implementation.
 | 
					     * The implementation class for this implementation.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@ -41,7 +41,7 @@ public abstract class NumberImplementation {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return the map of documentation paths.
 | 
					     * @return the map of documentation paths.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public final Map<String, Function<NumberInterface, NumberInterface>> getPromotionPaths() {
 | 
					    public final Map<String, PromotionFunction> getPromotionPaths() {
 | 
				
			||||||
        return promotionPaths;
 | 
					        return promotionPaths;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ package org.nwapw.abacus.number.promotion
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.nwapw.abacus.number.NumberInterface
 | 
					import org.nwapw.abacus.number.NumberInterface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typealias PromotionFunction = java.util.function.Function<NumberInterface, NumberInterface>
 | 
					 | 
				
			||||||
typealias PromotionPath = List<PromotionFunction>
 | 
					typealias PromotionPath = List<PromotionFunction>
 | 
				
			||||||
typealias NumberClass = Class<NumberInterface>
 | 
					typealias NumberClass = Class<NumberInterface>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -14,5 +13,5 @@ typealias NumberClass = Class<NumberInterface>
 | 
				
			|||||||
 * @param from the number to start from.
 | 
					 * @param from the number to start from.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
fun PromotionPath.promote(from: NumberInterface): NumberInterface {
 | 
					fun PromotionPath.promote(from: NumberInterface): NumberInterface {
 | 
				
			||||||
    return fold(from, { current, function -> function.apply(current) })
 | 
					    return fold(from, { current, function -> function.promote(current) })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					package org.nwapw.abacus.number.promotion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.nwapw.abacus.number.NumberInterface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Function that is used to promote a number from one type to another.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * A promotion function is used in the promotion system as a mean to
 | 
				
			||||||
 | 
					 * actually "travel" down the promotion path.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					interface PromotionFunction {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Promotes the given [number] into another type.
 | 
				
			||||||
 | 
					     * @param number the number to promote from.
 | 
				
			||||||
 | 
					     * @return the new number with the same value.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    fun promote(number: NumberInterface): NumberInterface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -6,7 +6,6 @@ import org.nwapw.abacus.number.NumberInterface
 | 
				
			|||||||
import org.nwapw.abacus.plugin.NumberImplementation
 | 
					import org.nwapw.abacus.plugin.NumberImplementation
 | 
				
			||||||
import org.nwapw.abacus.plugin.PluginListener
 | 
					import org.nwapw.abacus.plugin.PluginListener
 | 
				
			||||||
import org.nwapw.abacus.plugin.PluginManager
 | 
					import org.nwapw.abacus.plugin.PluginManager
 | 
				
			||||||
import java.util.function.Function
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A class that handles promotions based on priority and the
 | 
					 * A class that handles promotions based on priority and the
 | 
				
			||||||
@ -32,7 +31,11 @@ class PromotionManager(val abacus: Abacus) : PluginListener {
 | 
				
			|||||||
        val fromName = abacus.pluginManager.interfaceImplementationNameFor(from.implementation)
 | 
					        val fromName = abacus.pluginManager.interfaceImplementationNameFor(from.implementation)
 | 
				
			||||||
        val toName = abacus.pluginManager.interfaceImplementationNameFor(to.implementation)
 | 
					        val toName = abacus.pluginManager.interfaceImplementationNameFor(to.implementation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(fromName == toName) return listOf(Function { it })
 | 
					        if(fromName == toName) return listOf(object : PromotionFunction {
 | 
				
			||||||
 | 
					            override fun promote(number: NumberInterface): NumberInterface {
 | 
				
			||||||
 | 
					                return number
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(from.promotionPaths.containsKey(toName))
 | 
					        if(from.promotionPaths.containsKey(toName))
 | 
				
			||||||
            return listOf(from.promotionPaths[toName] ?: return null)
 | 
					            return listOf(from.promotionPaths[toName] ?: return null)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,19 +5,17 @@ import org.junit.BeforeClass;
 | 
				
			|||||||
import org.junit.Test;
 | 
					import org.junit.Test;
 | 
				
			||||||
import org.nwapw.abacus.Abacus;
 | 
					import org.nwapw.abacus.Abacus;
 | 
				
			||||||
import org.nwapw.abacus.config.Configuration;
 | 
					import org.nwapw.abacus.config.Configuration;
 | 
				
			||||||
 | 
					import org.nwapw.abacus.number.promotion.PromotionFunction;
 | 
				
			||||||
import org.nwapw.abacus.number.standard.NaiveNumber;
 | 
					import org.nwapw.abacus.number.standard.NaiveNumber;
 | 
				
			||||||
import org.nwapw.abacus.number.NumberInterface;
 | 
					 | 
				
			||||||
import org.nwapw.abacus.number.range.NumberRange;
 | 
					import org.nwapw.abacus.number.range.NumberRange;
 | 
				
			||||||
import org.nwapw.abacus.number.standard.PreciseNumber;
 | 
					import org.nwapw.abacus.number.standard.PreciseNumber;
 | 
				
			||||||
import org.nwapw.abacus.plugin.standard.StandardPlugin;
 | 
					import org.nwapw.abacus.plugin.standard.StandardPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.function.Function;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class RangeTests {
 | 
					public class RangeTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Abacus abacus = new Abacus(new Configuration( "precise", new String[]{}));
 | 
					    private static Abacus abacus = new Abacus(new Configuration( "precise", new String[]{}));
 | 
				
			||||||
    private static Function<NumberInterface, NumberInterface> naivePromotion = i -> new NaiveNumber((i.toString()));
 | 
					    private static PromotionFunction naivePromotion = i -> new NaiveNumber((i.toString()));
 | 
				
			||||||
    private static Function<NumberInterface, NumberInterface> precisePromotion = i -> new PreciseNumber((i.toString()));
 | 
					    private static PromotionFunction precisePromotion = i -> new PreciseNumber((i.toString()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @BeforeClass
 | 
					    @BeforeClass
 | 
				
			||||||
    public static void prepareTests() {
 | 
					    public static void prepareTests() {
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,6 @@ import org.nwapw.abacus.exception.AbacusException;
 | 
				
			|||||||
import org.nwapw.abacus.function.Documentation;
 | 
					import org.nwapw.abacus.function.Documentation;
 | 
				
			||||||
import org.nwapw.abacus.function.DocumentationType;
 | 
					import org.nwapw.abacus.function.DocumentationType;
 | 
				
			||||||
import org.nwapw.abacus.number.*;
 | 
					import org.nwapw.abacus.number.*;
 | 
				
			||||||
import org.nwapw.abacus.plugin.ClassFinder;
 | 
					 | 
				
			||||||
import org.nwapw.abacus.plugin.PluginListener;
 | 
					import org.nwapw.abacus.plugin.PluginListener;
 | 
				
			||||||
import org.nwapw.abacus.plugin.PluginManager;
 | 
					import org.nwapw.abacus.plugin.PluginManager;
 | 
				
			||||||
import org.nwapw.abacus.plugin.standard.StandardPlugin;
 | 
					import org.nwapw.abacus.plugin.standard.StandardPlugin;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package org.nwapw.abacus.plugin;
 | 
					package org.nwapw.abacus.fx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user