diff --git a/HISTORY.md b/HISTORY.md
index 80073ca..50d58c4 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -4,6 +4,8 @@
 
 ## <a href="https://github.com/julianhyde/linq4j/releases/tag/linq4j-0.2">0.2</a> / 2014-04-11
 
+* Fix <a href="https://github.com/julianhyde/linq4j/issues/8">#8</a>,
+  "Javadoc generation fails under JDK 1.8".
 * Fix <a href="https://github.com/julianhyde/linq4j/issues/15">#15</a>,
   "`Expressions.ifThenElse` does not work".
 * Use `HashMap` for searching of declarations to reuse; consider both
diff --git a/src/main/java/net/hydromatic/linq4j/Enumerable.java b/src/main/java/net/hydromatic/linq4j/Enumerable.java
index 4e6f510..b242da5 100644
--- a/src/main/java/net/hydromatic/linq4j/Enumerable.java
+++ b/src/main/java/net/hydromatic/linq4j/Enumerable.java
@@ -32,7 +32,7 @@
   /**
    * Converts this Enumerable to a Queryable.
    *
-   * @see EnumerableDefaults#asQueryable(Enumerable
+   * @see EnumerableDefaults#asQueryable(Enumerable)
    */
   Queryable<T> asQueryable();
 
diff --git a/src/main/java/net/hydromatic/linq4j/EnumerableDefaults.java b/src/main/java/net/hydromatic/linq4j/EnumerableDefaults.java
index 34f2eee..84470a0 100644
--- a/src/main/java/net/hydromatic/linq4j/EnumerableDefaults.java
+++ b/src/main/java/net/hydromatic/linq4j/EnumerableDefaults.java
@@ -118,24 +118,26 @@
   }
 
   /**
-   * Returns the input typed as Enumerable<TSource>.
+   * Returns the input typed as {@code Enumerable<TSource>}.
    *
-   * <p>The AsEnumerable<TSource>(Enumerable<TSource>) method has no effect
-   * other than to change the compile-time type of source from a type that
-   * implements Enumerable<TSource> to Enumerable<TSource> itself.
+   * <p>This method has no effect other than to change the compile-time type of
+   * source from a type that implements {@code Enumerable<TSource>} to
+   * {@code Enumerable<TSource>} itself.
    *
-   * <p>AsEnumerable<TSource>(Enumerable<TSource>) can be used to choose
+   * <p>{@code AsEnumerable<TSource>(Enumerable<TSource>)} can be used to choose
    * between query implementations when a sequence implements
-   * Enumerable<TSource> but also has a different set of public query methods
-   * available. For example, given a generic class Table that implements
-   * Enumerable<TSource> and has its own methods such as Where, Select, and
-   * SelectMany, a call to Where would invoke the public Where method of
-   * Table. A Table type that represents a database table could have a Where
-   * method that takes the predicate argument as an expression tree and
-   * converts the tree to SQL for remote execution. If remote execution is not
-   * desired, for example because the predicate invokes a local method, the
-   * AsEnumerable<TSource> method can be used to hide the custom methods and
-   * instead make the standard query operators available.
+   * {@code Enumerable<TSource>} but also has a different set of public query
+   * methods available. For example, given a generic class {@code Table} that
+   * implements {@code Enumerable<TSource>} and has its own methods such as
+   * {@code where}, {@code select}, and {@code selectMany}, a call to
+   * {@code where} would invoke the public {@code where} method of
+   * {@code Table}. A {@code Table} type that represents a database table could
+   * have a {@code where} method that takes the predicate argument as an
+   * expression tree and converts the tree to SQL for remote execution. If
+   * remote execution is not desired, for example because the predicate invokes
+   * a local method, the {@code asEnumerable<TSource>} method can be used to
+   * hide the custom methods and instead make the standard query operators
+   * available.
    */
   public static <TSource> Enumerable<TSource> asEnumerable(
       Enumerable<TSource> enumerable) {
@@ -308,7 +310,7 @@
 
   /**
    * Determines whether a sequence contains a specified
-   * element by using a specified EqualityComparer<TSource>.
+   * element by using a specified {@code EqualityComparer<TSource>}.
    */
   public static <TSource> boolean contains(Enumerable<TSource> enumerable,
       TSource element, EqualityComparer comparer) {
@@ -425,7 +427,7 @@
 
   /**
    * Produces the set difference of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   public static <TSource> Enumerable<TSource> except(
@@ -724,7 +726,7 @@
   /**
    * Correlates the elements of two sequences based on
    * key equality and groups the results. A specified
-   * EqualityComparer<TSource> is used to compare keys.
+   * {@code EqualityComparer<TSource>} is used to compare keys.
    */
   public static <TSource, TInner, TKey, TResult> Enumerable<TResult> groupJoin(
       Enumerable<TSource> outer, Enumerable<TInner> inner,
@@ -761,7 +763,7 @@
 
   /**
    * Produces the set intersection of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   public static <TSource> Enumerable<TSource> intersect(
@@ -803,7 +805,7 @@
 
   /**
    * Correlates the elements of two sequences based on
-   * matching keys. A specified EqualityComparer<TSource> is used to
+   * matching keys. A specified {@code EqualityComparer<TSource>} is used to
    * compare keys.
    */
   public static <TSource, TInner, TKey, TResult> Enumerable<TResult> join(
@@ -1427,7 +1429,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> and flattens the resulting sequences into one
+   * {@code Enumerable<TSource>} and flattens the resulting sequences into one
    * sequence.
    */
   public static <TSource, TResult> Enumerable<TResult> selectMany(
@@ -1472,7 +1474,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, and flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, and flattens the resulting sequences into one
    * sequence. The index of each source element is used in the
    * projected form of that element.
    */
@@ -1484,7 +1486,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, flattens the resulting sequences into one
    * sequence, and invokes a result selector function on each
    * element therein. The index of each source element is used in
    * the intermediate projected form of that element.
@@ -1498,7 +1500,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, flattens the resulting sequences into one
    * sequence, and invokes a result selector function on each
    * element therein.
    */
@@ -1522,7 +1524,7 @@
   /**
    * Determines whether two sequences are equal by
    * comparing their elements by using a specified
-   * EqualityComparer<TSource>.
+   * {@code EqualityComparer<TSource>}.
    */
   public static <TSource> boolean sequenceEqual(Enumerable<TSource> enumerable0,
       Enumerable<TSource> enumerable1, EqualityComparer<TSource> comparer) {
@@ -1817,8 +1819,8 @@
   }
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to a specified key selector function
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function
    * and key comparer.
    */
   public static <TSource, TKey> Map<TKey, TSource> toMap(
@@ -1828,8 +1830,8 @@
   }
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to specified key selector and element
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to specified key selector and element
    * selector functions.
    */
   public static <TSource, TKey, TElement> Map<TKey, TElement> toMap(
@@ -1851,8 +1853,8 @@
   }
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to a specified key selector function,
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function,
    * a comparer, and an element selector function.
    */
   public static <TSource, TKey, TElement> Map<TKey, TElement> toMap(
@@ -1863,7 +1865,7 @@
   }
 
   /**
-   * Creates a List<TSource> from an Enumerable<TSource>.
+   * Creates a {@code List<TSource>} from an {@code Enumerable<TSource>}.
    */
   @SuppressWarnings("unchecked")
   public static <TSource> List<TSource> toList(Enumerable<TSource> source) {
@@ -1888,8 +1890,8 @@
   }
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to a specified key selector function
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function
    * and key comparer.
    */
   public static <TSource, TKey> Lookup<TKey, TSource> toLookup(
@@ -1900,8 +1902,8 @@
   }
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to specified key selector and element
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to specified key selector and element
    * selector functions.
    */
   public static <TSource, TKey, TElement> Lookup<TKey, TElement> toLookup(
@@ -1942,8 +1944,8 @@
   }
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to a specified key selector function,
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function,
    * a comparer and an element selector function.
    */
   public static <TSource, TKey, TElement> Lookup<TKey, TElement> toLookup(
diff --git a/src/main/java/net/hydromatic/linq4j/ExtendedEnumerable.java b/src/main/java/net/hydromatic/linq4j/ExtendedEnumerable.java
index 037017d..859f4e4 100644
--- a/src/main/java/net/hydromatic/linq4j/ExtendedEnumerable.java
+++ b/src/main/java/net/hydromatic/linq4j/ExtendedEnumerable.java
@@ -83,24 +83,27 @@
   boolean any(Predicate1<TSource> predicate);
 
   /**
-   * Returns the input typed as Enumerable<TSource>.
+   * Returns the input typed as {@code Enumerable<TSource>}.
    *
-   * <p>The AsEnumerable<TSource>(Enumerable<TSource>) method has no effect
+   * <p>This method has no effect
    * other than to change the compile-time type of source from a type that
-   * implements Enumerable<TSource> to Enumerable<TSource> itself.
+   * implements {@code Enumerable<TSource>} to {@code Enumerable<TSource>}
+   * itself.
    *
-   * <p>AsEnumerable<TSource>(Enumerable<TSource>) can be used to choose
+   * <p>{@code asEnumerable<TSource>(Enumerable<TSource>)} can be used to choose
    * between query implementations when a sequence implements
-   * Enumerable<TSource> but also has a different set of public query methods
-   * available. For example, given a generic class Table that implements
-   * Enumerable<TSource> and has its own methods such as Where, Select, and
-   * SelectMany, a call to Where would invoke the public Where method of
-   * Table. A Table type that represents a database table could have a Where
-   * method that takes the predicate argument as an expression tree and
-   * converts the tree to SQL for remote execution. If remote execution is not
-   * desired, for example because the predicate invokes a local method, the
-   * AsEnumerable<TSource> method can be used to hide the custom methods and
-   * instead make the standard query operators available.
+
+   * {@code Enumerable<TSource>} but also has a different set of public query
+   * methods available. For example, given a generic class Table that implements
+   * {@code Enumerable<TSource>} and has its own methods such as {@code where},
+   * {@code select}, and {@code selectMany}, a call to {@code where} would
+   * invoke the public {@code where} method of {@code Table}. A {@code Table}
+   * type that represents a database table could have a {@code where} method
+   * that takes the predicate argument as an expression tree and converts the
+   * tree to SQL for remote execution. If remote execution is not desired, for
+   * example because the predicate invokes a local method, the
+   * {@code asEnumerable<TSource>} method can be used to hide the custom methods
+   * and instead make the standard query operators available.
    */
   Enumerable<TSource> asEnumerable();
 
@@ -222,7 +225,7 @@
 
   /**
    * Determines whether a sequence contains a specified
-   * element by using a specified EqualityComparer<TSource>.
+   * element by using a specified {@code EqualityComparer<TSource>}.
    */
   boolean contains(TSource element, EqualityComparer comparer);
 
@@ -260,7 +263,7 @@
 
   /**
    * Returns distinct elements from a sequence by using
-   * a specified EqualityComparer<TSource> to compare values.
+   * a specified {@code EqualityComparer<TSource>} to compare values.
    */
   Enumerable<TSource> distinct(EqualityComparer<TSource> comparer);
 
@@ -286,7 +289,7 @@
 
   /**
    * Produces the set difference of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   Enumerable<TSource> except(Enumerable<TSource> enumerable1,
@@ -436,7 +439,7 @@
   /**
    * Correlates the elements of two sequences based on
    * key equality and groups the results. A specified
-   * EqualityComparer<TSource> is used to compare keys.
+   * {@code EqualityComparer<TSource>} is used to compare keys.
    */
   <TInner, TKey, TResult> Enumerable<TResult> groupJoin(
       Enumerable<TInner> inner, Function1<TSource, TKey> outerKeySelector,
@@ -453,7 +456,7 @@
 
   /**
    * Produces the set intersection of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   Enumerable<TSource> intersect(Enumerable<TSource> enumerable1,
@@ -476,7 +479,7 @@
 
   /**
    * Correlates the elements of two sequences based on
-   * matching keys. A specified EqualityComparer<TSource> is used to
+   * matching keys. A specified {@code EqualityComparer<TSource>} is used to
    * compare keys.
    */
   <TInner, TKey, TResult> Enumerable<TResult> join(Enumerable<TInner> inner,
@@ -742,7 +745,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> and flattens the resulting sequences into one
+   * {@code Enumerable<TSource>} and flattens the resulting sequences into one
    * sequence.
    */
   <TResult> Enumerable<TResult> selectMany(
@@ -750,7 +753,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, and flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, and flattens the resulting sequences into one
    * sequence. The index of each source element is used in the
    * projected form of that element.
    */
@@ -759,7 +762,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, flattens the resulting sequences into one
    * sequence, and invokes a result selector function on each
    * element therein. The index of each source element is used in
    * the intermediate projected form of that element.
@@ -770,7 +773,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource>, flattens the resulting sequences into one
+   * {@code Enumerable<TSource>}, flattens the resulting sequences into one
    * sequence, and invokes a result selector function on each
    * element therein.
    */
@@ -788,7 +791,7 @@
   /**
    * Determines whether two sequences are equal by
    * comparing their elements by using a specified
-   * EqualityComparer<TSource>.
+   * {@code EqualityComparer<TSource>}.
    */
   boolean sequenceEqual(Enumerable<TSource> enumerable1,
       EqualityComparer<TSource> comparer);
@@ -934,8 +937,8 @@
   Enumerable<TSource> takeWhile(Predicate2<TSource, Integer> predicate);
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to a specified key selector
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector
    * function.
    *
    * <p>NOTE: Called {@code toDictionary} in LINQ.NET.</p>
@@ -943,16 +946,16 @@
   <TKey> Map<TKey, TSource> toMap(Function1<TSource, TKey> keySelector);
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to a specified key selector function
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function
    * and key comparer.
    */
   <TKey> Map<TKey, TSource> toMap(Function1<TSource, TKey> keySelector,
       EqualityComparer<TKey> comparer);
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to specified key selector and element
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to specified key selector and element
    * selector functions.
    */
   <TKey, TElement> Map<TKey, TElement> toMap(
@@ -960,8 +963,8 @@
       Function1<TSource, TElement> elementSelector);
 
   /**
-   * Creates a Dictionary<TKey, TValue> from an
-   * Enumerable<TSource> according to a specified key selector function,
+   * Creates a {@code Map<TKey, TValue>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function,
    * a comparer, and an element selector function.
    */
   <TKey, TElement> Map<TKey, TElement> toMap(
@@ -970,28 +973,28 @@
       EqualityComparer<TKey> comparer);
 
   /**
-   * Creates a List<TSource> from an Enumerable<TSource>.
+   * Creates a {@code List<TSource>} from an {@code Enumerable<TSource>}.
    */
   List<TSource> toList();
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to a specified key selector
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector
    * function.
    */
   <TKey> Lookup<TKey, TSource> toLookup(Function1<TSource, TKey> keySelector);
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to a specified key selector function
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function
    * and key comparer.
    */
   <TKey> Lookup<TKey, TSource> toLookup(Function1<TSource, TKey> keySelector,
       EqualityComparer<TKey> comparer);
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to specified key selector and element
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to specified key selector and element
    * selector functions.
    */
   <TKey, TElement> Lookup<TKey, TElement> toLookup(
@@ -999,8 +1002,8 @@
       Function1<TSource, TElement> elementSelector);
 
   /**
-   * Creates a Lookup<TKey, TElement> from an
-   * Enumerable<TSource> according to a specified key selector function,
+   * Creates a {@code Lookup<TKey, TElement>} from an
+   * {@code Enumerable<TSource>} according to a specified key selector function,
    * a comparer and an element selector function.
    */
   <TKey, TElement> Lookup<TKey, TElement> toLookup(
@@ -1016,7 +1019,7 @@
 
   /**
    * Produces the set union of two sequences by using a
-   * specified EqualityComparer<TSource>.
+   * specified {@code EqualityComparer<TSource>}.
    */
   Enumerable<TSource> union(Enumerable<TSource> source1,
       EqualityComparer<TSource> comparer);
diff --git a/src/main/java/net/hydromatic/linq4j/ExtendedQueryable.java b/src/main/java/net/hydromatic/linq4j/ExtendedQueryable.java
index ff1d662..556c15a 100644
--- a/src/main/java/net/hydromatic/linq4j/ExtendedQueryable.java
+++ b/src/main/java/net/hydromatic/linq4j/ExtendedQueryable.java
@@ -182,7 +182,7 @@
 
   /**
    * Produces the set difference of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   Queryable<TSource> except(Enumerable<TSource> enumerable,
@@ -302,7 +302,7 @@
   /**
    * Correlates the elements of two sequences based on
    * key equality and groups the results. A specified
-   * EqualityComparer<TSource> is used to compare keys.
+   * {@code EqualityComparer<TSource>} is used to compare keys.
    */
   <TInner, TKey, TResult> Queryable<TResult> groupJoin(Enumerable<TInner> inner,
       FunctionExpression<Function1<TSource, TKey>> outerKeySelector,
@@ -320,7 +320,7 @@
 
   /**
    * Produces the set intersection of two sequences by
-   * using the specified EqualityComparer<TSource> to compare
+   * using the specified {@code EqualityComparer<TSource>} to compare
    * values.
    */
   Queryable<TSource> intersect(Enumerable<TSource> enumerable,
@@ -338,7 +338,7 @@
 
   /**
    * Correlates the elements of two sequences based on
-   * matching keys. A specified EqualityComparer<TSource> is used to
+   * matching keys. A specified {@code EqualityComparer<TSource>} is used to
    * compare keys.
    */
   <TInner, TKey, TResult> Queryable<TResult> join(Enumerable<TInner> inner,
@@ -368,7 +368,7 @@
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<TSource> and returns the maximum resulting
+   * generic {@code IQueryable<TSource>} and returns the maximum resulting
    * value.
    */
   <TResult extends Comparable<TResult>> TResult max(
@@ -376,7 +376,7 @@
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<TSource> and returns the minimum resulting
+   * generic {@code IQueryable<TSource>} and returns the minimum resulting
    * value.
    */
   <TResult extends Comparable<TResult>> TResult min(
@@ -460,7 +460,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> and combines the resulting sequences into one
+   * {@code Enumerable<TSource>} and combines the resulting sequences into one
    * sequence.
    */
   <TResult> Queryable<TResult> selectMany(
@@ -468,7 +468,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> and combines the resulting sequences into one
+   * {@code Enumerable<TSource>} and combines the resulting sequences into one
    * sequence. The index of each source element is used in the
    * projected form of that element.
    *
@@ -481,7 +481,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> that incorporates the index of the source
+   * {@code Enumerable<TSource>} that incorporates the index of the source
    * element that produced it. A result selector function is invoked
    * on each element of each intermediate sequence, and the
    * resulting values are combined into a single, one-dimensional
@@ -495,7 +495,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<TSource> and invokes a result selector function on each
+   * {@code Enumerable<TSource>} and invokes a result selector function on each
    * element therein. The resulting values from each intermediate
    * sequence are combined into a single, one-dimensional sequence
    * and returned.
@@ -660,7 +660,7 @@
 
   /**
    * Produces the set union of two sequences by using a
-   * specified EqualityComparer<TSource>.
+   * specified {@code EqualityComparer<TSource>}.
    */
   Queryable<TSource> union(Enumerable<TSource> source1,
       EqualityComparer<TSource> comparer);
diff --git a/src/main/java/net/hydromatic/linq4j/Extensions.java b/src/main/java/net/hydromatic/linq4j/Extensions.java
index 21d3ed3..32c3319 100644
--- a/src/main/java/net/hydromatic/linq4j/Extensions.java
+++ b/src/main/java/net/hydromatic/linq4j/Extensions.java
@@ -92,11 +92,11 @@
  * overloaded based on the number of type parameters.</li>
  *
  * <li>Types map as follows:
- * {@code Int32} => {@code int} or {@link Integer},
- * {@code Int64} => {@code long} or {@link Long},
- * {@code bool} => {@code boolean} or {@link Boolean},
- * {@code Dictionary} => {@link Map},
- * {@code Lookup} => {@link Map} whose value type is an {@link Iterable},
+ * {@code Int32} &rarr; {@code int} or {@link Integer},
+ * {@code Int64} &rarr; {@code long} or {@link Long},
+ * {@code bool} &rarr; {@code boolean} or {@link Boolean},
+ * {@code Dictionary} &rarr; {@link Map},
+ * {@code Lookup} &rarr; {@link Map} whose value type is an {@link Iterable},
  * </li>
  *
  * <li>Function types that accept primitive types in LINQ.NET have become
diff --git a/src/main/java/net/hydromatic/linq4j/QueryableDefaults.java b/src/main/java/net/hydromatic/linq4j/QueryableDefaults.java
index 0c32262..8c193d7 100644
--- a/src/main/java/net/hydromatic/linq4j/QueryableDefaults.java
+++ b/src/main/java/net/hydromatic/linq4j/QueryableDefaults.java
@@ -91,8 +91,8 @@
   }
 
   /**
-   * Converts a generic Enumerable<T> to a generic
-   * IQueryable<T>.
+   * Converts a generic {@code Enumerable<T>} to a generic
+   * {@code IQueryable<T>}.
    */
   public static <T> Queryable<T> asQueryable(Queryable<T> queryable) {
     throw Extensions.todo();
@@ -235,7 +235,7 @@
 
   /**
    * Determines whether a sequence contains a specified
-   * element by using a specified EqualityComparer<T>.
+   * element by using a specified {@code EqualityComparer<T>}.
    */
   public static <T> boolean contains(Queryable<T> queryable, T element,
       EqualityComparer comparer) {
@@ -287,7 +287,7 @@
 
   /**
    * Returns distinct elements from a sequence by using
-   * a specified EqualityComparer<T> to compare values.
+   * a specified {@code EqualityComparer<T>} to compare values.
    */
   public static <T> Queryable<T> distinct(Queryable<T> queryable,
       EqualityComparer comparer) {
@@ -323,7 +323,7 @@
 
   /**
    * Produces the set difference of two sequences by
-   * using the specified EqualityComparer<T> to compare
+   * using the specified {@code EqualityComparer<T>} to compare
    * values.
    */
   public static <T> Queryable<T> except(Queryable<T> queryable,
@@ -498,7 +498,7 @@
   /**
    * Correlates the elements of two sequences based on
    * key equality and groups the results. A specified
-   * EqualityComparer<T> is used to compare keys.
+   * {@code EqualityComparer<T>} is used to compare keys.
    */
   public static <TOuter, TInner, TKey, TResult> Enumerable<TResult> groupJoin(
       Queryable<TOuter> outer, Enumerable<TInner> inner,
@@ -522,7 +522,7 @@
 
   /**
    * Produces the set intersection of two sequences by
-   * using the specified EqualityComparer<T> to compare
+   * using the specified {@code EqualityComparer<T>} to compare
    * values.
    */
   public static <T> Queryable<T> intersect(Queryable<T> queryable,
@@ -545,7 +545,7 @@
 
   /**
    * Correlates the elements of two sequences based on
-   * matching keys. A specified EqualityComparer<T> is used to
+   * matching keys. A specified {@code EqualityComparer<T>} is used to
    * compare keys.
    */
   public static <TOuter, TInner, TKey, TResult> Queryable<TResult> join(
@@ -611,7 +611,7 @@
 
   /**
    * Returns the maximum value in a generic
-   * IQueryable<T>.
+   * {@code IQueryable<T>}.
    */
   public static <T> T max(Queryable<T> queryable) {
     throw Extensions.todo();
@@ -619,7 +619,7 @@
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<T> and returns the maximum resulting
+   * generic {@code IQueryable<T>} and returns the maximum resulting
    * value.
    */
   public static <T, TResult> TResult max(Queryable<T> queryable,
@@ -629,7 +629,7 @@
 
   /**
    * Returns the minimum value in a generic
-   * IQueryable<T>.
+   * {@code IQueryable<T>}.
    */
   public static <T> T min(Queryable<T> queryable) {
     throw Extensions.todo();
@@ -637,7 +637,7 @@
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<T> and returns the minimum resulting
+   * generic {@code IQueryable<T>} and returns the minimum resulting
    * value.
    */
   public static <T, TResult> TResult min(Queryable<T> queryable,
@@ -748,7 +748,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and combines the resulting sequences into one
+   * {@code Enumerable<T>} and combines the resulting sequences into one
    * sequence.
    */
   public static <T, TResult> Queryable<TResult> selectMany(Queryable<T> source,
@@ -758,7 +758,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and combines the resulting sequences into one
+   * {@code Enumerable<T>} and combines the resulting sequences into one
    * sequence. The index of each source element is used in the
    * projected form of that element.
    *
@@ -772,7 +772,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> that incorporates the index of the source
+   * {@code Enumerable<T>} that incorporates the index of the source
    * element that produced it. A result selector function is invoked
    * on each element of each intermediate sequence, and the
    * resulting values are combined into a single, one-dimensional
@@ -788,7 +788,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and invokes a result selector function on each
+   * {@code Enumerable<T>} and invokes a result selector function on each
    * element therein. The resulting values from each intermediate
    * sequence are combined into a single, one-dimensional sequence
    * and returned.
@@ -816,7 +816,7 @@
 
   /**
    * Determines whether two sequences are equal by
-   * using a specified EqualityComparer<T> to compare
+   * using a specified {@code EqualityComparer<T>} to compare
    * elements.
    */
   public static <T> boolean sequenceEqual(Queryable<T> queryable,
@@ -1086,7 +1086,7 @@
 
   /**
    * Produces the set union of two sequences by using a
-   * specified EqualityComparer<T>.
+   * specified {@code EqualityComparer<T>}.
    */
   public static <T> Queryable<T> union(Queryable<T> source0,
       Enumerable<T> source1, EqualityComparer<T> comparer) {
diff --git a/src/main/java/net/hydromatic/linq4j/QueryableFactory.java b/src/main/java/net/hydromatic/linq4j/QueryableFactory.java
index 34c2ce9..9eceb47 100644
--- a/src/main/java/net/hydromatic/linq4j/QueryableFactory.java
+++ b/src/main/java/net/hydromatic/linq4j/QueryableFactory.java
@@ -166,7 +166,7 @@
 
   /**
    * Determines whether a sequence contains a specified
-   * element by using a specified EqualityComparer<T>.
+   * element by using a specified {@code EqualityComparer<T>}.
    */
   boolean contains(Queryable<T> source, T element,
       EqualityComparer<T> comparer);
@@ -205,7 +205,7 @@
 
   /**
    * Returns distinct elements from a sequence by using
-   * a specified EqualityComparer<T> to compare values.
+   * a specified {@code EqualityComparer<T>} to compare values.
    */
   Queryable<T> distinct(Queryable<T> source, EqualityComparer<T> comparer);
 
@@ -231,7 +231,7 @@
 
   /**
    * Produces the set difference of two sequences by
-   * using the specified EqualityComparer<T> to compare
+   * using the specified {@code EqualityComparer<T>} to compare
    * values.
    */
   Queryable<T> except(Queryable<T> source, Enumerable<T> enumerable,
@@ -450,13 +450,13 @@
 
   /**
    * Returns the maximum value in a generic
-   * IQueryable<T>.
+   * {@code IQueryable<T>}.
    */
   T max(Queryable<T> source);
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<T> and returns the maximum resulting
+   * generic {@code IQueryable<T>} and returns the maximum resulting
    * value.
    */
   <TResult extends Comparable<TResult>> TResult max(Queryable<T> source,
@@ -464,13 +464,13 @@
 
   /**
    * Returns the minimum value in a generic
-   * IQueryable<T>.
+   * {@code IQueryable<T>}.
    */
   T min(Queryable<T> source);
 
   /**
    * Invokes a projection function on each element of a
-   * generic IQueryable<T> and returns the minimum resulting
+   * generic {@code IQueryable<T>} and returns the minimum resulting
    * value.
    */
   <TResult extends Comparable<TResult>> TResult min(Queryable<T> source,
@@ -536,7 +536,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and combines the resulting sequences into one
+   * {@code Enumerable<T>} and combines the resulting sequences into one
    * sequence.
    */
   <TResult> Queryable<TResult> selectMany(Queryable<T> source,
@@ -544,7 +544,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and combines the resulting sequences into one
+   * {@code Enumerable<T>} and combines the resulting sequences into one
    * sequence. The index of each source element is used in the
    * projected form of that element.
    */
@@ -553,7 +553,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> that incorporates the index of the source
+   * {@code Enumerable<T>} that incorporates the index of the source
    * element that produced it. A result selector function is invoked
    * on each element of each intermediate sequence, and the
    * resulting values are combined into a single, one-dimensional
@@ -566,7 +566,7 @@
 
   /**
    * Projects each element of a sequence to an
-   * Enumerable<T> and invokes a result selector function on each
+   * {@code Enumerable<T>} and invokes a result selector function on each
    * element therein. The resulting values from each intermediate
    * sequence are combined into a single, one-dimensional sequence
    * and returned.
@@ -770,7 +770,7 @@
 
   /**
    * Produces the set union of two sequences by using a
-   * specified EqualityComparer<T>.
+   * specified {@code EqualityComparer<T>}.
    */
   Queryable<T> union(Queryable<T> source, Enumerable<T> source1,
       EqualityComparer<T> comparer);
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/ExpressionType.java b/src/main/java/net/hydromatic/linq4j/expressions/ExpressionType.java
index 439c67f..0277ce8 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/ExpressionType.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/ExpressionType.java
@@ -74,15 +74,14 @@
   AddChecked(" + ", false, 4, false),
 
   /**
-   * A bitwise or logical AND operation, such as (a &amp; b) in C# and
-   * (a And b) in Visual Basic.
+   * A bitwise or logical AND operation, such as {@code a &amp; b} in Java.
    */
   And(" & ", false, 8, false),
 
   /**
    * A conditional AND operation that evaluates the second operand
    * only if the first operand evaluates to true. It corresponds to
-   * (a && b) in C# and (a AndAlso b) in Visual Basic.
+   * {@code a && b} in Java.
    */
   AndAlso(" && ", false, 11, false),
 
@@ -94,12 +93,12 @@
 
   /**
    * An indexing operation in a one-dimensional array, such as
-   * array[index] in C# or array(index) in Visual Basic.
+   * {@code array[index]} in Java.
    */
   ArrayIndex,
 
   /**
-   * A method call, such as in the obj.sampleMethod()
+   * A method call, such as in the {@code obj.sampleMethod()}
    * expression.
    */
   Call(".", false, 1, false),
@@ -111,8 +110,7 @@
   Coalesce,
 
   /**
-   * A conditional operation, such as a > b ? a : b in C# or
-   * If(a > b, a, b) in Visual Basic.
+   * A conditional operation, such as {@code a > b ? a : b} in Java.
    */
   Conditional(" ? ", " : ", false, 13, true),
 
@@ -122,16 +120,16 @@
   Constant,
 
   /**
-   * A cast or conversion operation, such as (SampleType)obj in
-   * C#or CType(obj, SampleType) in Visual Basic. For a numeric
+   * A cast or conversion operation, such as {@code (SampleType) obj} in
+   * Java. For a numeric
    * conversion, if the converted value is too large for the
    * destination type, no exception is thrown.
    */
   Convert(null, false, 2, true),
 
   /**
-   * A cast or conversion operation, such as (SampleType)obj in
-   * C#or CType(obj, SampleType) in Visual Basic. For a numeric
+   * A cast or conversion operation, such as {@code (SampleType) obj} in
+   * Java. For a numeric
    * conversion, if the converted value does not fit the
    * destination type, an exception is thrown.
    */
@@ -144,14 +142,13 @@
   Divide(" / ", false, 3, false),
 
   /**
-   * A node that represents an equality comparison, such as (a
-   * == b) in C# or (a = b) in Visual Basic.
+   * A node that represents an equality comparison, such as {@code a == b} in
+   * Java.
    */
   Equal(" == ", false, 7, false),
 
   /**
-   * A bitwise or logical XOR operation, such as (a ^ b) in C#
-   * or (a Xor b) in Visual Basic.
+   * A bitwise or logical XOR operation, such as {@code a ^ b} in Java.
    */
   ExclusiveOr(" ^ ", false, 9, false),
 
@@ -173,13 +170,12 @@
   Invoke,
 
   /**
-   * A lambda expression, such as a =&gt; a + a in C# or
-   * Function(a) a + a in Visual Basic.
+   * A lambda expression, such as {@code a -&gt; a + a} in Java.
    */
   Lambda,
 
   /**
-   * A bitwise left-shift operation, such as (a &lt;&lt; b).
+   * A bitwise left-shift operation, such as {@code a << b} in Java.
    */
   LeftShift(" << ", false, 5, false),
 
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/Expressions.java b/src/main/java/net/hydromatic/linq4j/expressions/Expressions.java
index 3a34fdf..d3be4b3 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/Expressions.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/Expressions.java
@@ -710,8 +710,8 @@
   }
 
   /**
-   * Creates a DynamicExpression that represents a dynamic
-   * operation bound by the provided CallSiteBinder, using varargs.
+   * Creates a {@code DynamicExpression} that represents a dynamic
+   * operation bound by the provided {@code CallSiteBinder}, using varargs.
    */
   public static DynamicExpression dynamic(CallSiteBinder binder, Type type,
       Expression... expression) {
@@ -719,7 +719,7 @@
   }
 
   /**
-   * Creates an ElementInit, given an Iterable<T> as the second
+   * Creates an {@code ElementInit}, given an {@code Iterable<T>} as the second
    * argument.
    */
   public static ElementInit elementInit(Method method,
