Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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 com.facebook.presto.byteCode;
 
 
 
 import java.util.List;
 import java.util.Set;
 
 import static com.facebook.presto.byteCode.Access.STATIC;
 import static com.facebook.presto.byteCode.Access.a;
 import static com.facebook.presto.byteCode.Access.toAccessModifier;
 import static com.google.common.collect.Iterables.any;
 import static com.google.common.collect.Iterables.concat;
 import static org.objectweb.asm.Opcodes.ACC_SUPER;
 import static org.objectweb.asm.Opcodes.V1_7;
 
 public class ClassDefinition
 {
     private final EnumSet<Accessaccess;
     private final ParameterizedType type;
     private final ParameterizedType superClass;
     private final List<ParameterizedTypeinterfaces = new ArrayList<>();
     private final List<AnnotationDefinitionannotations = new ArrayList<>();
     private final List<FieldDefinitionfields = new ArrayList<>();
     private final List<MethodDefinitionmethods = new ArrayList<>();
     private final MethodDefinition classInitializer;
     private String source;
     private String debug;
 
     public ClassDefinition(
             EnumSet<Accessaccess,
             String name,
             ParameterizedType superClass,
             ParameterizedType... interfaces)
     {
         this(accessnew ParameterizedType(name), superClassinterfaces);
     }
 
     public ClassDefinition(
             EnumSet<Accessaccess,
             ParameterizedType type,
             ParameterizedType superClass,
             ParameterizedType... interfaces)
     {
         Preconditions.checkNotNull(access"access is null");
         Preconditions.checkNotNull(access"access is null");
         Preconditions.checkNotNull(superClass"superClass is null");
         Preconditions.checkNotNull(interfaces"interfaces is null");
 
         this. = access;
         this. = type;
         this. = superClass;
         this..addAll(ImmutableList.copyOf(interfaces));
 
          = new MethodDefinition(thisa(), "<clinit>", ParameterizedType.type(void.class), ImmutableList.<Parameter>of());
     }
 
     public Set<AccessgetAccess()
     {
         return ImmutableSet.copyOf();
     }
 
     public String getName()
     {
         return .getClassName();
     }
 
     public ParameterizedType getType()
     {
         return ;
     }
 
     public ParameterizedType getSuperClass()
     {
         return ;
     }
 
     public String getSource()
    {
        return ;
    }
    {
        return ImmutableList.copyOf();
    }
    {
        return ImmutableList.copyOf();
    }
    public List<FieldDefinitiongetFields()
    {
        return ImmutableList.copyOf();
    }
    public List<MethodDefinitiongetMethods()
    {
        return ImmutableList.copyOf();
    }
    public void visit(ClassVisitor visitor)
    {
        // Generic signature if super class or any interface is generic
        String signature = null;
        if (.isGeneric() || any(, ParameterizedType::isGeneric)) {
            signature = genericClassSignature();
        }
        String[] interfaces = new String[this..size()];
        for (int i = 0; i < interfaces.lengthi++) {
            interfaces[i] = this..get(i).getClassName();
        }
        visitor.visit(toAccessModifier() | .getClassName(), signature.getClassName(), interfaces);
        // visit source
        if ( != null) {
            visitor.visitSource();
        }
        // visit annotations
        for (AnnotationDefinition annotation : ) {
            annotation.visitClassAnnotation(visitor);
        }
        // visit fields
        for (FieldDefinition field : ) {
            field.visit(visitor);
        }
        // visit clinit method
        .visit(visitortrue);
        // visit methods
        for (MethodDefinition method : ) {
            method.visit(visitor);
        }
        // done
        visitor.visitEnd();
    }
    {
        AnnotationDefinition annotationDefinition = new AnnotationDefinition(type);
        .add(annotationDefinition);
        return annotationDefinition;
    }
    {
        AnnotationDefinition annotationDefinition = new AnnotationDefinition(type);
        .add(annotationDefinition);
        return annotationDefinition;
    }
    public FieldDefinition declareField(EnumSet<AccessaccessString nameClass<?> type)
    {
        FieldDefinition fieldDefinition = new FieldDefinition(thisaccessnametype);
        .add(fieldDefinition);
        return fieldDefinition;
    }
    public ClassDefinition addField(EnumSet<AccessaccessString nameClass<?> type)
    {
        declareField(accessnametype);
        return this;
    }
    public FieldDefinition declareField(EnumSet<AccessaccessString nameParameterizedType type)
    {
        FieldDefinition fieldDefinition = new FieldDefinition(thisaccessnametype);
        .add(fieldDefinition);
        return fieldDefinition;
    }
    public ClassDefinition addField(EnumSet<AccessaccessString nameParameterizedType type)
    {
        declareField(accessnametype);
        return this;
    }
    {
        .add(field);
        return this;
    }
    {
        return ;
    }
            EnumSet<Accessaccess,
            Parameter... parameters)
    {
        return declareMethod(access"<init>", ParameterizedType.type(void.class), ImmutableList.copyOf(parameters));
    }
            EnumSet<Accessaccess,
            Iterable<Parameterparameters)
    {
        return declareMethod(access"<init>", ParameterizedType.type(void.class), ImmutableList.copyOf(parameters));
    }
    {
        MethodDefinition constructor = declareConstructor(access);
        constructor
                .getBody()
                .append(constructor.getThis())
                .invokeConstructor()
                .ret();
        return this;
    }
    {
        .add(method);
        return this;
    }
    public ClassDefinition visitSource(String sourceString debug)
    {
        this. = source;
        this. = debug;
        return this;
    }
            EnumSet<Accessaccess,
            String name,
            ParameterizedType returnType,
            Parameter... parameters)
    {
        return declareMethod(accessnamereturnType, ImmutableList.copyOf(parameters));
    }
            EnumSet<Accessaccess,
            String name,
            ParameterizedType returnType,
            Iterable<Parameterparameters)
    {
        MethodDefinition methodDefinition = new MethodDefinition(thisaccessnamereturnTypeparameters);
        .add(methodDefinition);
        return methodDefinition;
    }
    public static String genericClassSignature(
            ParameterizedType classType,
            ParameterizedType... interfaceTypes
    )
    {
        return Joiner.on("").join(
                concat(ImmutableList.of(classType), ImmutableList.copyOf(interfaceTypes))
        );
    }
    public static String genericClassSignature(
            ParameterizedType classType,
            List<ParameterizedTypeinterfaceTypes
    )
    {
        return Joiner.on("").join(concat(ImmutableList.of(classType), interfaceTypes));
    }
    @Override
    public String toString()
    {
        final StringBuilder sb = new StringBuilder();
        sb.append("ClassDefinition");
        sb.append("{access=").append();
        sb.append(", type=").append();
        sb.append('}');
        return sb.toString();
    }
New to GrepCode? Check out our FAQ X