// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ConversionException.java
// public final class ConversionException extends Exception
// {
// 	public ConversionException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public ConversionException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ElementConverter.java
// public interface ElementConverter<E extends Element>
// {
// 	@NotNull ElementConverter<Element> UnknownElementConverterInstance = new ElementConverter<Element>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final Element element) throws ConversionException
// 		{
// 			throw new ConversionException(format(ENGLISH, "Do not know how to convert elements like '%1$s'", element));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<PackageElement> PackageElementIgnoredElementConverterInstance = new ElementConverter<PackageElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final PackageElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<TypeElement> TypeElementIgnoredElementConverterInstance = new ElementConverter<TypeElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final TypeElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	void convert(@NotNull final Warnings warnings, @NotNull final E element) throws ConversionException;
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/javaModules/FatalCompilationException.java
// public final class FatalCompilationException extends Exception
// {
// 	public FatalCompilationException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public FatalCompilationException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/warnings/Warnings.java
// public interface Warnings extends DiagnosticListener<JavaFileObject>
// {
// 	void fatal(@NotNull final FatalCompilationException cause);
// 
// 	void warn(@NotNull final String warning);
// 
// 	void information(@NotNull final String information);
// }


import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter;
import com.stormmq.java2c.transpiler.javaModules.FatalCompilationException;
import com.stormmq.java2c.transpiler.warnings.Warnings;
import com.sun.source.tree.Tree;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter.UnknownElementConverterInstance;
import static javax.lang.model.element.ElementKind.*;
		topLevelConverters = new HashMap<ElementKind, ElementConverter<?>>(5)
		{{
			put(PACKAGE, packageConverter);
			put(ENUM, enumConverter);
			put(CLASS, classConverter);
			put(ANNOTATION_TYPE, annotationConverter);
			put(INTERFACE, interfaceConverter);
		}};
	}

	@Override
	public void init(@NotNull final ProcessingEnvironment pe)
	{
		super.init(pe);
		trees = Trees.instance(pe);
	}

	@Override
	public boolean process(@NotNull final Set<? extends TypeElement> annotations, @NotNull final RoundEnvironment roundEnv)
	{
		assert trees != null;

		for (final Element rootElement : roundEnv.getRootElements())
		{
			@SuppressWarnings("unchecked") @Nullable final ElementConverter<Element> elementConverter = (ElementConverter<Element>) topLevelConverters.get(rootElement.getKind());
			@NotNull final ElementConverter<Element> actualElementConverter = elementConverter == null ? UnknownElementConverterInstance : elementConverter;
			try
			{
				actualElementConverter.convert(warnings, rootElement);
			}
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ConversionException.java
// public final class ConversionException extends Exception
// {
// 	public ConversionException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public ConversionException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/elementConverters/ElementConverter.java
// public interface ElementConverter<E extends Element>
// {
// 	@NotNull ElementConverter<Element> UnknownElementConverterInstance = new ElementConverter<Element>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final Element element) throws ConversionException
// 		{
// 			throw new ConversionException(format(ENGLISH, "Do not know how to convert elements like '%1$s'", element));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<PackageElement> PackageElementIgnoredElementConverterInstance = new ElementConverter<PackageElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final PackageElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	@NotNull ElementConverter<TypeElement> TypeElementIgnoredElementConverterInstance = new ElementConverter<TypeElement>()
// 	{
// 		@Override
// 		public void convert(@NotNull final Warnings warnings, @NotNull final TypeElement element)
// 		{
// 			warnings.warn(format(ENGLISH, "Ignoring elements of kind %1$s", element.getKind().name()));
// 		}
// 	};
// 
// 	void convert(@NotNull final Warnings warnings, @NotNull final E element) throws ConversionException;
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/javaModules/FatalCompilationException.java
// public final class FatalCompilationException extends Exception
// {
// 	public FatalCompilationException(@NotNull final String message)
// 	{
// 		super(message);
// 	}
// 
// 	public FatalCompilationException(@NotNull final String message, @NotNull final Exception cause)
// 	{
// 		super(message, cause);
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/warnings/Warnings.java
// public interface Warnings extends DiagnosticListener<JavaFileObject>
// {
// 	void fatal(@NotNull final FatalCompilationException cause);
// 
// 	void warn(@NotNull final String warning);
// 
// 	void information(@NotNull final String information);
// }


// Path: source/transpiler/com/stormmq/java2c/transpiler/annotationProcessors/CodeTreeAnalyzerProcessor.java
import com.stormmq.java2c.transpiler.conversion.elementConverters.ConversionException;
import com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter;
import com.stormmq.java2c.transpiler.javaModules.FatalCompilationException;
import com.stormmq.java2c.transpiler.warnings.Warnings;
import com.sun.source.tree.Tree;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import static com.stormmq.java2c.transpiler.conversion.elementConverters.ElementConverter.UnknownElementConverterInstance;
import static javax.lang.model.element.ElementKind.*;

		topLevelConverters = new HashMap<ElementKind, ElementConverter<?>>(5)
		{{
			put(PACKAGE, packageConverter);
			put(ENUM, enumConverter);
			put(CLASS, classConverter);
			put(ANNOTATION_TYPE, annotationConverter);
			put(INTERFACE, interfaceConverter);
		}};
	}

	@Override
	public void init(@NotNull final ProcessingEnvironment pe)
	{
		super.init(pe);
		trees = Trees.instance(pe);
	}

	@Override
	public boolean process(@NotNull final Set<? extends TypeElement> annotations, @NotNull final RoundEnvironment roundEnv)
	{
		assert trees != null;

		for (final Element rootElement : roundEnv.getRootElements())
		{
			@SuppressWarnings("unchecked") @Nullable final ElementConverter<Element> elementConverter = (ElementConverter<Element>) topLevelConverters.get(rootElement.getKind());
			@NotNull final ElementConverter<Element> actualElementConverter = elementConverter == null ? UnknownElementConverterInstance : elementConverter;
			try
			{
				actualElementConverter.convert(warnings, rootElement);
			}
			catch (ConversionException e)