// Path: src/api/DefaultEventListener.java
// public class DefaultEventListener implements GeneratorEventListener {
//     @Override
//     public void onPackageProcessingStart(PackageProcessOptions packageProcessOptions, MirrorContext mirrorContext, Generator generator, List<CDeclaration> cDeclarationList) {
// 
//     }
// 
//     @Override
//     public void onCDeclarationRead(PackageProcessOptions packageProcessOptions, CDeclaration cDeclaration) {
//     }
// 
//     @Override
//     public void onPackageProcessingEnd(PackageProcessOptions packageProcessOptions) {
// 
//     }
// 
//     @Override
//     public void beforeManual() {
// 
//     }
// 
//     @Override
//     public void afterManual() {
// 
//     }
// 
//     @Override
//     public void beforeCompile() {
// 
//     }
// 
//     @Override
//     public void afterCompile() {
// 
//     }
// 
//     @Override
//     public void beforeHeaders() {
// 
//     }
// 
//     @Override
//     public void afterHeaders() {
// 
//     }
// }
// 
// Path: src/c/CClass.java
// public interface CClass extends CDeclaration {
// 
//     public List<Field> getFields();
// 
//     public boolean isStatic();
// }
// 
// Path: src/c/CDeclaration.java
// public interface CDeclaration {
//     public String getName();
//     public DeclarationType getDeclType();
//     public void setJavadoc(String string);
//     public String getJavadoc();
// 
// }
// 
// Path: src/c/Param.java
// public class Param extends Triple<String, String, String> {
// 
//     public Param() {
//     }
// 
//     public Param(String first, String second) {
//         super(first, second);
//     }
// 
//     //c type, name, javatype
//     public Param(String first, String second, String third) {
//         super(first, second, third);
//     }
// }
// 
// Path: src/generator/PackageProcessOptions.java
// public class PackageProcessOptions {
// 
//     //name of the package to create (bwapi/bwta)
//     public String packageName;
// 
//     //directory where C headers are located
//     public File cHeadersDir;
// 
//     //optional - name of class which will hold global functions
//     public String globalClassName;
// 
//     //optional - list of classes that should be used in import statements in created .java files
//     public List<String> additionalImportClasses;
// 
//     //optional - directory containing files that should be copied inside the generated api
//     public File manualCopyClassesDir;
// }
// 
// Path: src/impl/Function.java
// public class Function implements Method {
// 
//     String returnType;
// 
//     String name;
// 
//     ArrayList<Param> args = new ArrayList<Param>();
// 
//     boolean isStatic = false;
// 
//     @Override
//     public List<Param> getParams() {
//         return args;
//     }
// 
//     @Override
//     public Method clone() {
//         Function f = new Function();
//         f.name = name;
//         f.returnType = returnType;
//         //f.args.addAll(args);
//         for (Param p : args){
//             f.args.add(new Param(p.first, p.second, p.third));
//         }
//         f.isStatic = isStatic;
//         return f;
//     }
// 
//     Function() {
//     }
// 
//     public Function(String name, String returnType, boolean isStatic, ArrayList<Param> args) {
//         this.name = name;
//         this.returnType = returnType;
//         this.isStatic = isStatic;
//         this.args = args;
//     }
// 
//     @Override
//     public String getType() {
//         return returnType;
//     }
// 
//     //final functions are not supported yet
//     @Override
//     public boolean isFinal() {
//         return false;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     public String toString(){
//        String sig =  returnType +" "+name+"(";
//         for(Param p: getParams()){
//             sig += p.first +" "+p.second +" ";
//         }
//         sig +=")";
//         return sig;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Function)) return false;
// 
//         Function function = (Function) o;
// 
//         if (name != null ? !name.equals(function.name) : function.name != null) return false;
//         if (returnType != null ? !returnType.equals(function.returnType) : function.returnType != null) return false;
// 
//         if(this.args.size()!= function.args.size()){return false;}
// 
//         for(int i = 0; i < args.size(); i++){
//             if(!args.get(i).first.equals(function.args.get(i).first)){
//                 return false;
//             }
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = returnType != null ? returnType.hashCode() : 0;
//         result = 31 * result + (name != null ? name.hashCode() : 0);
//         result = 31 * result + (args != null ? args.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public DeclarationType getDeclType() {
//         return DeclarationType.METHOD;
//     }
// 
//     private String javadoc;
// 
//     public String getJavadoc() {
//         return javadoc;
//     }
// 
//     public void setJavadoc(String javadoc) {
//         this.javadoc = javadoc;
//     }
// 
//     @Override
//     public boolean isStatic() {
//         return isStatic;
//     }
// 
//     public void setStatic(boolean isStatic) {
//         this.isStatic = isStatic;
//     }
// }


import api.DefaultEventListener;
import c.CClass;
import c.CDeclaration;
import c.Param;
import generator.PackageProcessOptions;
import impl.Function;
import java.util.ArrayList;
package inject;



public class GetPolygonPointsInjector extends DefaultEventListener {


    @Override
    public void onCDeclarationRead(PackageProcessOptions packageProcessOptions, CDeclaration cDeclaration) {
        if (cDeclaration.getName().equals("Polygon") && packageProcessOptions.packageName.equals("bwta")) {
// Path: src/api/DefaultEventListener.java
// public class DefaultEventListener implements GeneratorEventListener {
//     @Override
//     public void onPackageProcessingStart(PackageProcessOptions packageProcessOptions, MirrorContext mirrorContext, Generator generator, List<CDeclaration> cDeclarationList) {
// 
//     }
// 
//     @Override
//     public void onCDeclarationRead(PackageProcessOptions packageProcessOptions, CDeclaration cDeclaration) {
//     }
// 
//     @Override
//     public void onPackageProcessingEnd(PackageProcessOptions packageProcessOptions) {
// 
//     }
// 
//     @Override
//     public void beforeManual() {
// 
//     }
// 
//     @Override
//     public void afterManual() {
// 
//     }
// 
//     @Override
//     public void beforeCompile() {
// 
//     }
// 
//     @Override
//     public void afterCompile() {
// 
//     }
// 
//     @Override
//     public void beforeHeaders() {
// 
//     }
// 
//     @Override
//     public void afterHeaders() {
// 
//     }
// }
// 
// Path: src/c/CClass.java
// public interface CClass extends CDeclaration {
// 
//     public List<Field> getFields();
// 
//     public boolean isStatic();
// }
// 
// Path: src/c/CDeclaration.java
// public interface CDeclaration {
//     public String getName();
//     public DeclarationType getDeclType();
//     public void setJavadoc(String string);
//     public String getJavadoc();
// 
// }
// 
// Path: src/c/Param.java
// public class Param extends Triple<String, String, String> {
// 
//     public Param() {
//     }
// 
//     public Param(String first, String second) {
//         super(first, second);
//     }
// 
//     //c type, name, javatype
//     public Param(String first, String second, String third) {
//         super(first, second, third);
//     }
// }
// 
// Path: src/generator/PackageProcessOptions.java
// public class PackageProcessOptions {
// 
//     //name of the package to create (bwapi/bwta)
//     public String packageName;
// 
//     //directory where C headers are located
//     public File cHeadersDir;
// 
//     //optional - name of class which will hold global functions
//     public String globalClassName;
// 
//     //optional - list of classes that should be used in import statements in created .java files
//     public List<String> additionalImportClasses;
// 
//     //optional - directory containing files that should be copied inside the generated api
//     public File manualCopyClassesDir;
// }
// 
// Path: src/impl/Function.java
// public class Function implements Method {
// 
//     String returnType;
// 
//     String name;
// 
//     ArrayList<Param> args = new ArrayList<Param>();
// 
//     boolean isStatic = false;
// 
//     @Override
//     public List<Param> getParams() {
//         return args;
//     }
// 
//     @Override
//     public Method clone() {
//         Function f = new Function();
//         f.name = name;
//         f.returnType = returnType;
//         //f.args.addAll(args);
//         for (Param p : args){
//             f.args.add(new Param(p.first, p.second, p.third));
//         }
//         f.isStatic = isStatic;
//         return f;
//     }
// 
//     Function() {
//     }
// 
//     public Function(String name, String returnType, boolean isStatic, ArrayList<Param> args) {
//         this.name = name;
//         this.returnType = returnType;
//         this.isStatic = isStatic;
//         this.args = args;
//     }
// 
//     @Override
//     public String getType() {
//         return returnType;
//     }
// 
//     //final functions are not supported yet
//     @Override
//     public boolean isFinal() {
//         return false;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     public String toString(){
//        String sig =  returnType +" "+name+"(";
//         for(Param p: getParams()){
//             sig += p.first +" "+p.second +" ";
//         }
//         sig +=")";
//         return sig;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Function)) return false;
// 
//         Function function = (Function) o;
// 
//         if (name != null ? !name.equals(function.name) : function.name != null) return false;
//         if (returnType != null ? !returnType.equals(function.returnType) : function.returnType != null) return false;
// 
//         if(this.args.size()!= function.args.size()){return false;}
// 
//         for(int i = 0; i < args.size(); i++){
//             if(!args.get(i).first.equals(function.args.get(i).first)){
//                 return false;
//             }
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = returnType != null ? returnType.hashCode() : 0;
//         result = 31 * result + (name != null ? name.hashCode() : 0);
//         result = 31 * result + (args != null ? args.hashCode() : 0);
//         return result;
//     }
// 
//     @Override
//     public DeclarationType getDeclType() {
//         return DeclarationType.METHOD;
//     }
// 
//     private String javadoc;
// 
//     public String getJavadoc() {
//         return javadoc;
//     }
// 
//     public void setJavadoc(String javadoc) {
//         this.javadoc = javadoc;
//     }
// 
//     @Override
//     public boolean isStatic() {
//         return isStatic;
//     }
// 
//     public void setStatic(boolean isStatic) {
//         this.isStatic = isStatic;
//     }
// }


// Path: src/inject/GetPolygonPointsInjector.java
import api.DefaultEventListener;
import c.CClass;
import c.CDeclaration;
import c.Param;
import generator.PackageProcessOptions;
import impl.Function;
import java.util.ArrayList;

package inject;



public class GetPolygonPointsInjector extends DefaultEventListener {


    @Override
    public void onCDeclarationRead(PackageProcessOptions packageProcessOptions, CDeclaration cDeclaration) {
        if (cDeclaration.getName().equals("Polygon") && packageProcessOptions.packageName.equals("bwta")) {
            CClass cClass = (CClass) cDeclaration;