From cf92026d0f625b3501ac50e8d9614c831575a40c Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Mon, 10 Nov 2014 19:00:15 +0100
Subject: [PATCH] use functional interfaces for operation factories

---
 .../r/runtime/ops/BinaryArithmetic.java       | 77 +++----------------
 .../runtime/ops/BinaryArithmeticFactory.java  |  6 +-
 .../truffle/r/runtime/ops/BinaryCompare.java  | 49 ++----------
 .../truffle/r/runtime/ops/BinaryLogic.java    | 35 +--------
 .../runtime/ops/BooleanOperationFactory.java  |  6 +-
 .../r/runtime/ops/OperationFactory.java       |  5 +-
 .../r/runtime/ops/UnaryArithmetic.java        | 35 +--------
 .../r/runtime/ops/UnaryArithmeticFactory.java |  6 +-
 8 files changed, 35 insertions(+), 184 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
index bc37448c28..39e978d642 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
@@ -56,74 +56,15 @@ public abstract class BinaryArithmetic extends Operation {
     public static class PowBuiltin {
     }
 
-    public static final BinaryArithmeticFactory ADD = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Add();
-        }
-    };
-    public static final BinaryArithmeticFactory SUBTRACT = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Subtract();
-        }
-    };
-    public static final BinaryArithmeticFactory MULTIPLY = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Multiply();
-        }
-    };
-    public static final BinaryArithmeticFactory INTEGER_DIV = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new IntegerDiv();
-        }
-    };
-
-    public static final BinaryArithmeticFactory DIV = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Div();
-        }
-    };
-
-    public static final BinaryArithmeticFactory MOD = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Mod();
-        }
-    };
-
-    public static final BinaryArithmeticFactory POW = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Pow();
-        }
-    };
-
-    public static final BinaryArithmeticFactory MAX = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Max();
-        }
-    };
-
-    public static final BinaryArithmeticFactory MIN = new BinaryArithmeticFactory() {
-
-        @Override
-        public BinaryArithmetic create() {
-            return new Min();
-        }
-    };
+    public static final BinaryArithmeticFactory ADD = Add::new;
+    public static final BinaryArithmeticFactory SUBTRACT = Subtract::new;
+    public static final BinaryArithmeticFactory MULTIPLY = Multiply::new;
+    public static final BinaryArithmeticFactory INTEGER_DIV = IntegerDiv::new;
+    public static final BinaryArithmeticFactory DIV = Div::new;
+    public static final BinaryArithmeticFactory MOD = Mod::new;
+    public static final BinaryArithmeticFactory POW = Pow::new;
+    public static final BinaryArithmeticFactory MAX = Max::new;
+    public static final BinaryArithmeticFactory MIN = Min::new;
 
     private final boolean supportsIntResult;
 
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmeticFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmeticFactory.java
index 9caa9b4a99..9f50120d85 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmeticFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmeticFactory.java
@@ -22,8 +22,8 @@
  */
 package com.oracle.truffle.r.runtime.ops;
 
-public abstract class BinaryArithmeticFactory extends OperationFactory {
+@FunctionalInterface
+public interface BinaryArithmeticFactory extends OperationFactory {
 
-    @Override
-    public abstract BinaryArithmetic create();
+    BinaryArithmetic create();
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryCompare.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryCompare.java
index 0a614dc224..51cdb19edf 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryCompare.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryCompare.java
@@ -52,49 +52,12 @@ public abstract class BinaryCompare extends BooleanOperation {
     public static class LessBuiltin {
     }
 
-    public static final BooleanOperationFactory NOT_EQUAL = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new NotEqual();
-        }
-    };
-
-    public static final BooleanOperationFactory EQUAL = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new Equal();
-        }
-    };
-    public static final BooleanOperationFactory GREATER_EQUAL = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new GreaterEqual();
-        }
-    };
-    public static final BooleanOperationFactory GREATER_THAN = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new GreaterThan();
-        }
-    };
-    public static final BooleanOperationFactory LESS_EQUAL = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new LessEqual();
-        }
-    };
-    public static final BooleanOperationFactory LESS_THAN = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new LessThan();
-        }
-    };
+    public static final BooleanOperationFactory NOT_EQUAL = NotEqual::new;
+    public static final BooleanOperationFactory EQUAL = Equal::new;
+    public static final BooleanOperationFactory GREATER_EQUAL = GreaterEqual::new;
+    public static final BooleanOperationFactory GREATER_THAN = GreaterThan::new;
+    public static final BooleanOperationFactory LESS_EQUAL = LessEqual::new;
+    public static final BooleanOperationFactory LESS_THAN = LessThan::new;
 
     public BinaryCompare(boolean commutative) {
         super(commutative, false);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryLogic.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryLogic.java
index 42927099a3..94c72adc0d 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryLogic.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryLogic.java
@@ -45,37 +45,10 @@ public abstract class BinaryLogic extends BooleanOperation {
     public static class OrBuiltin {
     }
 
-    public static final BooleanOperationFactory NON_VECTOR_AND = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new NonVectorAnd();
-        }
-    };
-
-    public static final BooleanOperationFactory NON_VECTOR_OR = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new NonVectorOr();
-        }
-    };
-
-    public static final BooleanOperationFactory AND = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new And();
-        }
-    };
-
-    public static final BooleanOperationFactory OR = new BooleanOperationFactory() {
-
-        @Override
-        public BooleanOperation create() {
-            return new Or();
-        }
-    };
+    public static final BooleanOperationFactory NON_VECTOR_AND = NonVectorAnd::new;
+    public static final BooleanOperationFactory NON_VECTOR_OR = NonVectorOr::new;
+    public static final BooleanOperationFactory AND = And::new;
+    public static final BooleanOperationFactory OR = Or::new;
 
     public BinaryLogic() {
         super(true, true);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BooleanOperationFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BooleanOperationFactory.java
index 01745f511a..fd6384e591 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BooleanOperationFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BooleanOperationFactory.java
@@ -22,8 +22,8 @@
  */
 package com.oracle.truffle.r.runtime.ops;
 
-public abstract class BooleanOperationFactory extends OperationFactory {
+@FunctionalInterface
+public interface BooleanOperationFactory extends OperationFactory {
 
-    @Override
-    public abstract BooleanOperation create();
+    BooleanOperation create();
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/OperationFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/OperationFactory.java
index f16147f68a..1b92f75b31 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/OperationFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/OperationFactory.java
@@ -22,8 +22,9 @@
  */
 package com.oracle.truffle.r.runtime.ops;
 
-public abstract class OperationFactory {
+@FunctionalInterface
+public interface OperationFactory {
 
-    public abstract Operation create();
+    Operation create();
 
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmetic.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmetic.java
index b270f54a42..e141953c17 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmetic.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmetic.java
@@ -20,37 +20,10 @@ import com.oracle.truffle.r.runtime.data.*;
 
 public abstract class UnaryArithmetic extends Operation {
 
-    public static final UnaryArithmeticFactory NEGATE = new UnaryArithmeticFactory() {
-
-        @Override
-        public UnaryArithmetic create() {
-            return new Negate();
-        }
-    };
-
-    public static final UnaryArithmeticFactory ROUND = new UnaryArithmeticFactory() {
-
-        @Override
-        public UnaryArithmetic create() {
-            return new Round();
-        }
-    };
-
-    public static final UnaryArithmeticFactory FLOOR = new UnaryArithmeticFactory() {
-
-        @Override
-        public UnaryArithmetic create() {
-            return new Floor();
-        }
-    };
-
-    public static final UnaryArithmeticFactory CEILING = new UnaryArithmeticFactory() {
-
-        @Override
-        public UnaryArithmetic create() {
-            return new Ceiling();
-        }
-    };
+    public static final UnaryArithmeticFactory NEGATE = Negate::new;
+    public static final UnaryArithmeticFactory ROUND = Round::new;
+    public static final UnaryArithmeticFactory FLOOR = Floor::new;
+    public static final UnaryArithmeticFactory CEILING = Ceiling::new;
 
     public UnaryArithmetic() {
         super(false, false);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmeticFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmeticFactory.java
index 19ef9e17c4..07a19b5d38 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmeticFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/UnaryArithmeticFactory.java
@@ -22,8 +22,8 @@
  */
 package com.oracle.truffle.r.runtime.ops;
 
-public abstract class UnaryArithmeticFactory extends OperationFactory {
+@FunctionalInterface
+public interface UnaryArithmeticFactory extends OperationFactory {
 
-    @Override
-    public abstract UnaryArithmetic create();
+    UnaryArithmetic create();
 }
-- 
GitLab