org.neo4j.codegen.bytecode.ByteCodeGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of neo4j-codegen Show documentation
Show all versions of neo4j-codegen Show documentation
Simple library for generating code.
/*
* Copyright (c) 2002-2017 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package org.neo4j.codegen.bytecode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.neo4j.codegen.ByteCodes;
import org.neo4j.codegen.ClassEmitter;
import org.neo4j.codegen.CodeGenerator;
import org.neo4j.codegen.CompilationFailureException;
import org.neo4j.codegen.TypeReference;
class ByteCodeGenerator extends CodeGenerator
{
private final Configuration configuration;
private final Map classes = new HashMap<>();
ByteCodeGenerator( ClassLoader parentClassLoader, Configuration configuration )
{
super( parentClassLoader );
this.configuration = configuration;
}
@Override
protected ClassEmitter generate( TypeReference type, TypeReference base, TypeReference[] interfaces )
{
ClassByteCodeWriter codeWriter = new ClassByteCodeWriter( type, base, interfaces );
synchronized ( this )
{
ClassByteCodeWriter old = classes.put( type, codeWriter );
if ( old != null )
{
classes.put( type, old );
throw new IllegalStateException( "Trying to generate class twice: " + type );
}
}
return codeWriter;
}
protected Iterable extends ByteCodes> compile( ClassLoader classpathLoader ) throws CompilationFailureException
{
List byteCodes = new ArrayList<>( classes.size() );
for ( ClassByteCodeWriter writer : classes.values() )
{
byteCodes.add( writer.toByteCodes() );
}
ByteCodeChecker checker = configuration.bytecodeChecker();
if ( checker != null )
{
checker.check( classpathLoader, byteCodes );
}
return byteCodes;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy