Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2015 Objectos, Fábrica de Software LTDA.
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not
   * use this file except in compliance with the License. You may obtain a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
  */
 package br.com.objectos.way.auto.functional;
 
 import java.util.List;
 
 

Author(s):
marcio.endo@objectos.com.br (Marcio Endo)
 
 abstract class IsPredicateStatic extends AbstractHasIsPredicate {
 
   IsPredicateStatic(IsPredicate predicate) {
     super(predicate);
   }
 
   public static IsPredicateStatic wrap(IsPredicate predicate) {
     List<ParameterSpecparameterSpecList = predicate.parameterSpecList;
     return parameterSpecList.isEmpty()
         ? new ParameterLess(predicate)
         : new WithParameter(predicate);
   }
 
   public abstract List<FieldSpecfieldList();
 
   public abstract List<MethodSpecmethodList();
 
   void addFieldListTo(TypeSpec.Builder type) {
     List<FieldSpecfieldList = fieldList();
     for (FieldSpec field : fieldList) {
       type.addField(field);
     }
   }
 
   void addMethodListTo(TypeSpec.Builder type) {
     List<MethodSpecmethodList = methodList();
     for (MethodSpec method : methodList) {
       type.addMethod(method);
     }
   }
 
   private static class ParameterLess extends IsPredicateStatic {
 
     public ParameterLess(IsPredicate predicate) {
       super(predicate);
     }
 
     @Override
     public List<FieldSpecfieldList() {
       FieldSpec yes = field(className(), "INSTANCE");
       FieldSpec not = field(classNameNot(), "NOT");
       return ImmutableList.of(yesnot);
     }
 
     @Override
     public List<MethodSpecmethodList() {
       MethodSpec yes = method("get""INSTANCE");
       MethodSpec not = method("not""NOT");
       return ImmutableList.of(yesnot);
     }
 
     private FieldSpec field(ClassName classNameString name) {
       return FieldSpec.builder(predicateTypeName(), name)
           .initializer("new $T()"className)
           .build();
     }
 
     private MethodSpec method(String nameString fieldName) {
       return MethodSpec.methodBuilder(name)
           .addModifiers(..)
           .returns(predicateTypeName())
           .addStatement("return $L"fieldName)
           .build();
     }
 
   }
  private static class WithParameter extends IsPredicateStatic {
    public WithParameter(IsPredicate predicate) {
      super(predicate);
    }
    @Override
    public List<FieldSpecfieldList() {
      return ImmutableList.of();
    }
    @Override
    public List<MethodSpecmethodList() {
      MethodSpec yes = method("get"className());
      MethodSpec not = method("not"classNameNot());
      return ImmutableList.of(yesnot);
    }
    private MethodSpec method(String nameClassName className) {
      MethodSpec.Builder b = MethodSpec.methodBuilder(name)
          .returns(predicateTypeName());
      for (ParameterSpec parameterSpec : parameterSpecList()) {
        b.addParameter(parameterSpec);
      }
      CodeBlock returnStatement = methodInfo().statementWriter()
          .add("return new $T(")
          .add("$L").forEachParameter(", ")
          .add(")")
          .set(className)
          .setParameterName()
          .write();
      return b.addCode(returnStatement)
          .build();
    }
  }
New to GrepCode? Check out our FAQ X