Search code examples
intellij-ideaaspectjintellij-14

IntelliJ 14 use AspectJ inpath


I need to weave a few jars in addition to my source. In Eclipse / Ant the way to do this is using the inpath option. Ant and Eclipse provide significant support for adding jars this way. Is there anything similar for IntelliJ (I am using 14)?

I've used the AspectJ Weaver plugin, but it does not allow me to put advice on methods that are part of Jars.

Edit: I used -inpath as extra command line paramaters, however I get compilation errors from that indicating that it could not figure out the base class of any of the classes in the inpath jars.

Edit2: For now I am not using intellij's make, instead I am building the output using Ant. It is not ideal but it works, and without much speed loss.

Edit3: jars used for -inpath compilation: spring-tx-3.2.11, spring-orm-3.2.11, spring-binding-2.3.1

From debug logging of intellij's build, this is pretty much for every class in that jars

 [Xlint:cantFindType]' @(no source information available)
/Users/dlikhten/Developer/workspaces/x/src/x-web/web/war/WEB-INF/lib/spring-binding-2.3.1.RELEASE.jar:0::0 
2014-12-10 13:28:52,992 [  23440]  DEBUG - ng.aspectj.build.AjBuilderBase - error: 'can't determine superclass of missing type javax.el.PropertyNotWritableException
when weaving type org.springframework.binding.expression.el.MapAdaptableELResolver

Solution

  • As much as I love IntelliJ IDEA for the most part, I have to admit that I switch to Eclipse whenever dealing with AspectJ because IDEA's AspectJ support is not state of the art. Okay, AspectJ is an Eclipse project, so good support there is to be expected, but anyway.

    The only way I found to use the inpath on external libraries is actually customising the Ajc command line for your project and just add an -inpath my/external/lib.jar:

    Java compiler settings for Ajc


    Update:

    Here is my little demo project with an aspect and a driver application using Apache Commons Compress 1.9. Just make sure to change the path to your sample ZIP file in order to get it running:

    public aspect DemoAspect {
        before() : execution(public * *(..)) {
            System.out.println(thisJoinPoint);
        }
    }
    
    import org.apache.commons.compress.archivers.ArchiveEntry;
    import org.apache.commons.compress.archivers.ArchiveException;
    import org.apache.commons.compress.archivers.ArchiveInputStream;
    import org.apache.commons.compress.archivers.ArchiveStreamFactory;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class Main {
        public static void main(String[] args) throws IOException, ArchiveException {
            System.out.println("Hello world!");
            ArchiveInputStream input = new ArchiveStreamFactory().createArchiveInputStream(
                new BufferedInputStream(
                    new FileInputStream("c:\\Users\\Alexander\\Downloads\\rudi.zip")
                )
            );
            ArchiveEntry entry;
            while ((entry = input.getNextEntry()) != null) {
                System.out.println(entry);
            }
        }
    }
    

    Console output without commons-compress-1.9.jar on inpath:

    As you can see, the aspect works. It intercepts the main method's execution. Then the main method prints "Hello world!" and the 3 file names from my sample zip.

    execution(void Main.main(String[]))
    Hello world!
    index.cgi
    upload.cgi
    cmd.cgi
    

    Console output with commons-compress-1.9.jar on inpath:

    Now put the external JAR on the inpath like in the screenshot. Use the full path, please! We now expect to see a lot of public method executions from Commons Compress intercepted and logged by the aspect as well. And really, after "Build" -> "Rebuild project" the output changes to:

    execution(void Main.main(String[]))
    Hello world!
    execution(ArchiveInputStream org.apache.commons.compress.archivers.ArchiveStreamFactory.createArchiveInputStream(InputStream))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.matches(byte[], int))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes())
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(ZipEncoding org.apache.commons.compress.archivers.zip.ZipEncodingHelper.getZipEncoding(String))
    execution(ArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry())
    execution(ZipArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(GeneralPurposeBit org.apache.commons.compress.archivers.zip.GeneralPurposeBit.parse(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useDataDescriptor(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useUTF8ForNames(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useStrongEncryption(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useEncryption(boolean))
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesUTF8ForNames())
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesDataDescriptor())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setGeneralPurposeBit(GeneralPurposeBit))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setMethod(int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(byte[] org.apache.commons.compress.archivers.zip.ZipLong.getBytes(long))
    execution(long org.apache.commons.compress.archivers.zip.ZipUtil.dosToJavaTime(long))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(String org.apache.commons.compress.archivers.zip.FallbackZipEncoding.decode(byte[]))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtra(byte[]))
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.AsiExtraField.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.X7875_NewUnix.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.JarMarker.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.UnicodePathExtraField.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.UnicodeCommentExtraField.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(void org.apache.commons.compress.archivers.zip.ExtraFieldUtils.register(Class))
    execution(ZipShort org.apache.commons.compress.archivers.zip.Zip64ExtendedInformationExtraField.getHeaderId())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.parse(byte[], boolean, ExtraFieldUtils.UnparseableExtraField))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtraFields(ZipExtraField[]))
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraFields(boolean))
    execution(byte[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.mergeLocalFileDataData(ZipExtraField[]))
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setSize(long))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(ZipMethod[] org.apache.commons.compress.archivers.zip.ZipMethod.values())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    index.cgi
    execution(ArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry())
    execution(ZipArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(GeneralPurposeBit org.apache.commons.compress.archivers.zip.GeneralPurposeBit.parse(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useDataDescriptor(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useUTF8ForNames(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useStrongEncryption(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useEncryption(boolean))
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesUTF8ForNames())
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesDataDescriptor())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setGeneralPurposeBit(GeneralPurposeBit))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setMethod(int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipUtil.dosToJavaTime(long))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(String org.apache.commons.compress.archivers.zip.FallbackZipEncoding.decode(byte[]))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtra(byte[]))
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.parse(byte[], boolean, ExtraFieldUtils.UnparseableExtraField))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtraFields(ZipExtraField[]))
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraFields(boolean))
    execution(byte[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.mergeLocalFileDataData(ZipExtraField[]))
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setSize(long))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    upload.cgi
    execution(ArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry())
    execution(ZipArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(GeneralPurposeBit org.apache.commons.compress.archivers.zip.GeneralPurposeBit.parse(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useDataDescriptor(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useUTF8ForNames(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useStrongEncryption(boolean))
    execution(void org.apache.commons.compress.archivers.zip.GeneralPurposeBit.useEncryption(boolean))
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesUTF8ForNames())
    execution(boolean org.apache.commons.compress.archivers.zip.GeneralPurposeBit.usesDataDescriptor())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setGeneralPurposeBit(GeneralPurposeBit))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setMethod(int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipUtil.dosToJavaTime(long))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(String org.apache.commons.compress.archivers.zip.FallbackZipEncoding.decode(byte[]))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getPlatform())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtra(byte[]))
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.parse(byte[], boolean, ExtraFieldUtils.UnparseableExtraField))
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setExtraFields(ZipExtraField[]))
    execution(ZipExtraField[] org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraFields(boolean))
    execution(byte[] org.apache.commons.compress.archivers.zip.ExtraFieldUtils.mergeLocalFileDataData(ZipExtraField[]))
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    execution(ZipExtraField org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getExtraField(ZipShort))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.hashCode())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(void org.apache.commons.compress.archivers.zip.ZipArchiveEntry.setSize(long))
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(int org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getMethod())
    execution(int org.apache.commons.compress.archivers.zip.ZipMethod.getCode())
    execution(String org.apache.commons.compress.archivers.zip.ZipArchiveEntry.getName())
    cmd.cgi
    execution(ArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry())
    execution(ZipArchiveEntry org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[]))
    execution(int org.apache.commons.compress.utils.IOUtils.readFully(InputStream, byte[], int, int))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[]))
    execution(int org.apache.commons.compress.archivers.zip.ZipShort.getValue(byte[], int))
    execution(boolean org.apache.commons.compress.archivers.zip.ZipLong.equals(Object))
    execution(long org.apache.commons.compress.archivers.zip.ZipLong.getValue())