Refactor comprehensions and other AST nodes

* Cleanup ForClause and IfClause to be static classes
* Add missing/non-visible accessors and constructors
* Make use of final modifiers more consistent
* Make LValue an ASTNode.

RELNOTES: None
PiperOrigin-RevId: 156050683
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java b/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
index 52bf299..1b74dcd 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parameter.java
@@ -69,7 +69,7 @@
   }
 
   /** mandatory parameter (positional or key-only depending on position): Ident */
-  public static class Mandatory<V, T> extends Parameter<V, T> {
+  public static final class Mandatory<V, T> extends Parameter<V, T> {
 
     public Mandatory(String name) {
       super(name);
@@ -90,7 +90,7 @@
   }
 
   /** optional parameter (positional or key-only depending on position): Ident = Value */
-  public static class Optional<V, T> extends Parameter<V, T> {
+  public static final class Optional<V, T> extends Parameter<V, T> {
     public final V defaultValue;
 
     public Optional(String name, @Nullable V defaultValue) {
@@ -118,7 +118,7 @@
   }
 
   /** extra positionals parameter (star): *identifier */
-  public static class Star<V, T> extends Parameter<V, T> {
+  public static final class Star<V, T> extends Parameter<V, T> {
     public Star(@Nullable String name, @Nullable T type) {
       super(name, type);
     }
@@ -146,7 +146,7 @@
   }
 
   /** extra keywords parameter (star_star): **identifier */
-  public static class StarStar<V, T> extends Parameter<V, T> {
+  public static final class StarStar<V, T> extends Parameter<V, T> {
     public StarStar(String name, @Nullable T type) {
       super(name, type);
     }