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.sql.gen;
 
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
 
 public final class CompilerUtils
 {
     private static final Logger log = Logger.get(CompilerUtils.class);
 
     private static final boolean DUMP_BYTE_CODE_TREE = false;
     private static final boolean DUMP_BYTE_CODE_RAW = false;
     private static final boolean RUN_ASM_VERIFIER = false// verifier doesn't work right now
     private static final AtomicReference<StringDUMP_CLASS_FILES_TO = new AtomicReference<>();
     private static final AtomicLong CLASS_ID = new AtomicLong();
 
     private CompilerUtils()
     {
     }
 
     public static ParameterizedType makeClassName(String baseName)
     {
         return ParameterizedType.typeFromJavaClassName("com.facebook.presto.$gen." + baseName + "_" + .incrementAndGet());
     }
 
     public static <T> Class<? extends T> defineClass(ClassDefinition classDefinitionClass<T> superTypeDynamicClassLoader classLoader)
     {
         Class<?> clazz = defineClasses(ImmutableList.of(classDefinition), classLoader).values().iterator().next();
         return clazz.asSubclass(superType);
     }
 
     public static <T> Class<? extends T> defineClass(ClassDefinition classDefinitionClass<T> superType,  Map<LongMethodHandlecallSiteBindingsClassLoader parentClassLoader)
     {
         Class<?> clazz = defineClass(classDefinitionsuperTypenew DynamicClassLoader(parentClassLoadercallSiteBindings));
         return clazz.asSubclass(superType);
     }
 
     private static Map<StringClass<?>> defineClasses(List<ClassDefinitionclassDefinitionsDynamicClassLoader classLoader)
     {
         ClassInfoLoader classInfoLoader = ClassInfoLoader.createClassInfoLoader(classDefinitionsclassLoader);
 
         if () {
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             DumpByteCodeVisitor dumpByteCode = new DumpByteCodeVisitor(new PrintStream(out));
             for (ClassDefinition classDefinition : classDefinitions) {
                 dumpByteCode.visitClass(classDefinition);
             }
             ..println(new String(out.toByteArray(), .));
         }
 
         Map<Stringbyte[]> byteCodes = new LinkedHashMap<>();
         for (ClassDefinition classDefinition : classDefinitions) {
             ClassWriter cw = new SmartClassWriter(classInfoLoader);
             classDefinition.visit(cw);
             byte[] byteCode = cw.toByteArray();
             if () {
                 ClassReader reader = new ClassReader(byteCode);
                 CheckClassAdapter.verify(readerclassLoadertruenew PrintWriter(.));
             }
             byteCodes.put(classDefinition.getType().getJavaClassName(), byteCode);
         }
 
         String dumpClassPath = .get();
        if (dumpClassPath != null) {
            for (Map.Entry<Stringbyte[]> entry : byteCodes.entrySet()) {
                File file = new File(dumpClassPath, ParameterizedType.typeFromJavaClassName(entry.getKey()).getClassName() + ".class");
                try {
                    .debug("ClassFile: " + file.getAbsolutePath());
                    Files.createParentDirs(file);
                    Files.write(entry.getValue(), file);
                }
                catch (IOException e) {
                    .error(e"Failed to write generated class file to: %s" + file.getAbsolutePath());
                }
            }
        }
        if () {
            for (byte[] byteCode : byteCodes.values()) {
                ClassReader classReader = new ClassReader(byteCode);
                classReader.accept(new TraceClassVisitor(new PrintWriter(.)), .);
            }
        }
        return classLoader.defineClasses(byteCodes);
    }
New to GrepCode? Check out our FAQ X