Author: henrib Date: Wed Aug 5 13:05:48 2015 New Revision: 1694207 URL: http://svn.apache.org/r1694207 Log: JEXL: Added hashCode/equals to Script/Closure
Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Closure.java commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Scope.java commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Script.java commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/scripting/Main.java Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Closure.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Closure.java?rev=1694207&r1=1694206&r2=1694207&view=diff ============================================================================== --- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Closure.java (original) +++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Closure.java Wed Aug 5 13:05:48 2015 @@ -51,6 +51,38 @@ public class Closure extends Script { return debug.toString(); } + @Override + public int hashCode() { + // CSOFF: Magic number + int hash = 17; + hash = 31 * hash + (this.jexl != null ? this.jexl.hashCode() : 0); + hash = 31 * hash + (this.source != null ? this.source.hashCode() : 0); + hash = 31 * hash + (this.frame != null ? this.frame.hashCode() : 0); + // CSON: Magic number + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Closure other = (Closure) obj; + if (this.jexl != other.jexl) { + return false; + } + if ((this.source == null) ? (other.source != null) : !this.source.equals(other.source)) { + return false; + } + if (this.frame != other.frame && (this.frame == null || !this.frame.equals(other.frame))) { + return false; + } + return true; + } + /** * Sets the hoisted index of a given symbol, ie the target index of a parent hoisted symbol in this closure's frame. * <p>This is meant to allow a locally defined function to "see" and call itself as a local (hoisted) variable; Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Scope.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Scope.java?rev=1694207&r1=1694206&r2=1694207&view=diff ============================================================================== --- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Scope.java (original) +++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Scope.java Wed Aug 5 13:05:48 2015 @@ -16,6 +16,7 @@ */ package org.apache.commons.jexl3.internal; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; @@ -290,6 +291,23 @@ public final class Scope { stack = r; } + @Override + public int hashCode() { + return Arrays.deepHashCode(this.stack); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Frame other = (Frame) obj; + return Arrays.deepEquals(this.stack, other.stack); + } + /** * Gets a value. * @param s the offset in this frame Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Script.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Script.java?rev=1694207&r1=1694206&r2=1694207&view=diff ============================================================================== --- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Script.java (original) +++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Script.java Wed Aug 5 13:05:48 2015 @@ -110,6 +110,34 @@ public class Script implements JexlScrip } @Override + public int hashCode() { + // CSOFF: Magic number + int hash = 17; + hash = 31 * hash + (this.jexl != null ? this.jexl.hashCode() : 0); + hash = 31 * hash + (this.source != null ? this.source.hashCode() : 0); + return hash; + // CSON: Magic number + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Script other = (Script) obj; + if (this.jexl != other.jexl) { + return false; + } + if ((this.source == null) ? (other.source != null) : !this.source.equals(other.source)) { + return false; + } + return true; + } + + @Override public String toString() { CharSequence src = source; if (src == null) { Modified: commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/scripting/Main.java URL: http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/scripting/Main.java?rev=1694207&r1=1694206&r2=1694207&view=diff ============================================================================== --- commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/scripting/Main.java (original) +++ commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/scripting/Main.java Wed Aug 5 13:05:48 2015 @@ -18,9 +18,11 @@ package org.apache.commons.jexl3.scripting; import java.io.BufferedReader; -import java.io.FileReader; +import java.io.File; +import java.io.FileInputStream; import java.io.InputStreamReader; +import java.nio.charset.Charset; import javax.script.ScriptEngine; import javax.script.ScriptException; @@ -29,6 +31,24 @@ import javax.script.ScriptException; * @since 2.0 */ public class Main { + /** + * Reads an input. + * @param charset the charset or null for default charset + * @param fileName the file name or null for stdin + * @return the reader + * @throws Exception if anything goes wrong + */ + static BufferedReader read(Charset charset, String fileName) throws Exception { + BufferedReader in = new BufferedReader( + new InputStreamReader( + fileName == null + ? System.in + : new FileInputStream(new File(fileName)), + charset == null + ? Charset.defaultCharset() + : charset)); + return in; + } /** * Test application for JexlScriptEngine (JSR-223 implementation). @@ -49,10 +69,10 @@ public class Main { ScriptEngine engine = fac.getScriptEngine(); engine.put("args", args); if (args.length == 1){ - Object value = engine.eval(new FileReader(args[0])); + Object value = engine.eval(read(null, args[0])); System.out.println("Return value: "+value); } else { - BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); + BufferedReader console = read(null, null); String line; System.out.print("> "); while(null != (line=console.readLine())){