Adapt to latest PrologCafe snapshot

I changed around some of the APIs in PrologCafe to make the use of
SymbolTerm safer in a shared environment.

Change-Id: I182c8c6fad78598749a75a1b45ad264c500ab5d5
diff --git a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
index e8a6b0e..e6b15c1 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologEnvironment.java
@@ -24,6 +24,8 @@
 import com.googlecode.prolog_cafe.lang.SystemException;
 import com.googlecode.prolog_cafe.lang.Term;
 
+import java.util.EnumSet;
+
 /**
  * Per-thread Prolog interpreter.
  * <p>
@@ -56,7 +58,7 @@
     setPrologClassLoader(new PrologClassLoader(newCL));
     setMaxArity(8);
     setMaxDatabaseSize(64);
-    setEnableReflection(false);
+    setEnabled(EnumSet.allOf(Prolog.Feature.class), false);
   }
 
   /** Get the global Guice Injector that configured the environment. */
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
index fe5c140..653a034 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectState.java
@@ -139,7 +139,7 @@
           new PushbackReader(new StringReader(rules), Prolog.PUSHBACK_SIZE);
       JavaObjectTerm streamObject = new JavaObjectTerm(in);
       if (!env.execute(Prolog.BUILTIN, "consult_stream",
-          SymbolTerm.makeSymbol("rules.pl"), streamObject)) {
+          SymbolTerm.intern("rules.pl"), streamObject)) {
         throw new CompileException("Cannot consult rules.pl " +
             getProject().getName() + " " + getConfig().getRevision());
       }
diff --git a/gerrit-server/src/main/java/gerrit/PRED_$load_commit_labels_1.java b/gerrit-server/src/main/java/gerrit/PRED_$load_commit_labels_1.java
index 73d3264..9fe6d48 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_$load_commit_labels_1.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_$load_commit_labels_1.java
@@ -24,9 +24,9 @@
 
 /** Exports list of {@code commit_label( label('Code-Review', 2), user(12345789) )}. */
 class PRED_$load_commit_labels_1 extends Predicate.P1 {
-  private static final SymbolTerm sym_commit_label = SymbolTerm.makeSymbol("commit_label", 2);
-  private static final SymbolTerm sym_label = SymbolTerm.makeSymbol("label", 2);
-  private static final SymbolTerm sym_user = SymbolTerm.makeSymbol("user", 1);
+  private static final SymbolTerm sym_commit_label = SymbolTerm.intern("commit_label", 2);
+  private static final SymbolTerm sym_label = SymbolTerm.intern("label", 2);
+  private static final SymbolTerm sym_user = SymbolTerm.intern("user", 1);
 
   PRED_$load_commit_labels_1(Term a1, Operation n) {
     arg1 = a1;
@@ -57,7 +57,7 @@
 
         StructureTerm labelTerm = new StructureTerm(
             sym_label,
-            SymbolTerm.makeSymbol(t.getCategory().getLabelName()),
+            SymbolTerm.intern(t.getCategory().getLabelName()),
             new IntegerTerm(a.getValue()));
 
         StructureTerm userTerm = new StructureTerm(
diff --git a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_approval_types_1.java b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_approval_types_1.java
index c8ceb62..cbe0fd8 100644
--- a/gerrit-server/src/main/java/gerrit/PRED_get_legacy_approval_types_1.java
+++ b/gerrit-server/src/main/java/gerrit/PRED_get_legacy_approval_types_1.java
@@ -68,14 +68,14 @@
     return cont;
   }
 
-  static final SymbolTerm symApprovalType = SymbolTerm.makeSymbol(
+  static final SymbolTerm symApprovalType = SymbolTerm.intern(
       "approval_type", 5);
 
   static Term export(ApprovalType type) {
     return new StructureTerm(symApprovalType,
-        SymbolTerm.makeSymbol(type.getCategory().getLabelName()),
-        SymbolTerm.makeSymbol(type.getCategory().getId().get()),
-        SymbolTerm.makeSymbol(type.getCategory().getFunctionName()),
+        SymbolTerm.intern(type.getCategory().getLabelName()),
+        SymbolTerm.intern(type.getCategory().getId().get()),
+        SymbolTerm.intern(type.getCategory().getFunctionName()),
         new IntegerTerm(type.getMin().getValue()),
         new IntegerTerm(type.getMax().getValue()));
   }
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
index 604fef5..ba258be 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
@@ -30,12 +30,13 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.EnumSet;
 import java.util.List;
 
 
 /** Base class for any tests written in Prolog. */
 public abstract class PrologTestCase extends TestCase {
-  private static final SymbolTerm test_1 = SymbolTerm.makeSymbol("test", 1);
+  private static final SymbolTerm test_1 = SymbolTerm.intern("test", 1);
 
   private String pkg;
   private boolean hasSetup;
@@ -54,6 +55,7 @@
             PrologEnvironment.Factory.class);
     env = factory.create(getClass().getClassLoader());
     env.setMaxDatabaseSize(16 * 1024);
+    env.setEnabled(Prolog.Feature.IO, true);
 
     consult(getClass(), prologResource);
 
@@ -62,7 +64,7 @@
     hasTeardown = has("teardown");
 
     StructureTerm head = new StructureTerm(":",
-        SymbolTerm.makeSymbol(pkg),
+        SymbolTerm.intern(pkg),
         new StructureTerm(test_1, new VariableTerm()));
 
     tests = new ArrayList<Term>();
@@ -79,7 +81,7 @@
     }
 
     String path = url.getPath();
-    if (!env.execute(Prolog.BUILTIN, "consult", SymbolTerm.makeSymbol(path))) {
+    if (!env.execute(Prolog.BUILTIN, "consult", SymbolTerm.intern(path))) {
       throw new CompileException("Cannot consult" + path);
     }
   }
@@ -90,7 +92,7 @@
   }
 
   private boolean has(String name) {
-    StructureTerm head = SymbolTerm.makeSymbol(pkg, name, 0);
+    StructureTerm head = SymbolTerm.create(pkg, name, 0);
     return env.execute(Prolog.BUILTIN, "clause", head, new VariableTerm());
   }
 
@@ -145,7 +147,7 @@
   }
 
   private void call(String name) {
-    StructureTerm head = SymbolTerm.makeSymbol(pkg, name, 0);
+    StructureTerm head = SymbolTerm.create(pkg, name, 0);
     if (!env.execute(Prolog.BUILTIN, "call", head)) {
       fail("Cannot invoke " + pkg + ":" + name);
     }