Example usage for org.eclipse.jdt.internal.compiler.classfmt ClassFormatException ClassFormatException

List of usage examples for org.eclipse.jdt.internal.compiler.classfmt ClassFormatException ClassFormatException

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.classfmt ClassFormatException ClassFormatException.

Prototype

public ClassFormatException(int code) 

Source Link

Usage

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

private char[] decodeFieldType(char[] signature) throws ClassFormatException {
    if (signature == null)
        return null;
    int arrayDim = 0;
    for (int i = 0, max = signature.length; i < max; i++) {
        switch (signature[i]) {
        case 'B':
            if (arrayDim > 0)
                return convertToArrayType(BYTE, arrayDim);
            return BYTE;

        case 'C':
            if (arrayDim > 0)
                return convertToArrayType(CHAR, arrayDim);
            return CHAR;

        case 'D':
            if (arrayDim > 0)
                return convertToArrayType(DOUBLE, arrayDim);
            return DOUBLE;

        case 'F':
            if (arrayDim > 0)
                return convertToArrayType(FLOAT, arrayDim);
            return FLOAT;

        case 'I':
            if (arrayDim > 0)
                return convertToArrayType(INT, arrayDim);
            return INT;

        case 'J':
            if (arrayDim > 0)
                return convertToArrayType(LONG, arrayDim);
            return LONG;

        case 'L':
            int indexOfSemiColon = CharOperation.indexOf(';', signature, i + 1);
            if (indexOfSemiColon == -1)
                throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
            if (arrayDim > 0) {
                return convertToArrayType(
                        replace('/', '.', CharOperation.subarray(signature, i + 1, indexOfSemiColon)),
                        arrayDim);/*w ww.  jav a 2  s . c om*/
            }
            return replace('/', '.', CharOperation.subarray(signature, i + 1, indexOfSemiColon));

        case 'S':
            if (arrayDim > 0)
                return convertToArrayType(SHORT, arrayDim);
            return SHORT;

        case 'Z':
            if (arrayDim > 0)
                return convertToArrayType(BOOLEAN, arrayDim);
            return BOOLEAN;

        case 'V':
            return VOID;

        case '[':
            arrayDim++;
            break;

        default:
            throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
        }
    }
    return null;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

/**
 * For example://from  ww w  .  j  a va  2s  .c  o  m
 *   - int foo(String[]) is ([Ljava/lang/String;)I => java.lang.String[] in a char[][]
 *   - void foo(int) is (I)V ==> int
 */
private char[][] decodeParameterTypes(char[] signature, boolean firstIsSynthetic) throws ClassFormatException {
    if (signature == null)
        return null;
    int indexOfClosingParen = CharOperation.lastIndexOf(')', signature);
    if (indexOfClosingParen == 1) {
        // there is no parameter
        return null;
    }
    if (indexOfClosingParen == -1) {
        throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
    }
    char[][] parameterTypes = new char[3][];
    int parameterTypesCounter = 0;
    int arrayDim = 0;
    for (int i = 1; i < indexOfClosingParen; i++) {
        if (parameterTypesCounter == parameterTypes.length) {
            // resize
            System.arraycopy(parameterTypes, 0, (parameterTypes = new char[parameterTypesCounter * 2][]), 0,
                    parameterTypesCounter);
        }
        switch (signature[i]) {
        case 'B':
            parameterTypes[parameterTypesCounter++] = BYTE;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'C':
            parameterTypes[parameterTypesCounter++] = CHAR;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'D':
            parameterTypes[parameterTypesCounter++] = DOUBLE;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'F':
            parameterTypes[parameterTypesCounter++] = FLOAT;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'I':
            parameterTypes[parameterTypesCounter++] = INT;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'J':
            parameterTypes[parameterTypesCounter++] = LONG;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'L':
            int indexOfSemiColon = CharOperation.indexOf(';', signature, i + 1);
            if (indexOfSemiColon == -1)
                throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
            if (firstIsSynthetic && parameterTypesCounter == 0) {
                // skip first synthetic parameter
                firstIsSynthetic = false;
            } else {
                parameterTypes[parameterTypesCounter++] = replace('/', '.',
                        CharOperation.subarray(signature, i + 1, indexOfSemiColon));
                if (arrayDim > 0)
                    convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            }
            i = indexOfSemiColon;
            arrayDim = 0;
            break;

        case 'S':
            parameterTypes[parameterTypesCounter++] = SHORT;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case 'Z':
            parameterTypes[parameterTypesCounter++] = BOOLEAN;
            if (arrayDim > 0)
                convertToArrayType(parameterTypes, parameterTypesCounter - 1, arrayDim);
            arrayDim = 0;
            break;

        case '[':
            arrayDim++;
            break;

        default:
            throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
        }
    }
    if (parameterTypes.length != parameterTypesCounter) {
        System.arraycopy(parameterTypes, 0, parameterTypes = new char[parameterTypesCounter][], 0,
                parameterTypesCounter);
    }
    return parameterTypes;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

private char[] decodeReturnType(char[] signature) throws ClassFormatException {
    if (signature == null)
        return null;
    int indexOfClosingParen = CharOperation.lastIndexOf(')', signature);
    if (indexOfClosingParen == -1)
        throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
    int arrayDim = 0;
    for (int i = indexOfClosingParen + 1, max = signature.length; i < max; i++) {
        switch (signature[i]) {
        case 'B':
            if (arrayDim > 0)
                return convertToArrayType(BYTE, arrayDim);
            return BYTE;

        case 'C':
            if (arrayDim > 0)
                return convertToArrayType(CHAR, arrayDim);
            return CHAR;

        case 'D':
            if (arrayDim > 0)
                return convertToArrayType(DOUBLE, arrayDim);
            return DOUBLE;

        case 'F':
            if (arrayDim > 0)
                return convertToArrayType(FLOAT, arrayDim);
            return FLOAT;

        case 'I':
            if (arrayDim > 0)
                return convertToArrayType(INT, arrayDim);
            return INT;

        case 'J':
            if (arrayDim > 0)
                return convertToArrayType(LONG, arrayDim);
            return LONG;

        case 'L':
            int indexOfSemiColon = CharOperation.indexOf(';', signature, i + 1);
            if (indexOfSemiColon == -1)
                throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
            if (arrayDim > 0) {
                return convertToArrayType(
                        replace('/', '.', CharOperation.subarray(signature, i + 1, indexOfSemiColon)),
                        arrayDim);//from  www .  jav  a2s.  c om
            }
            return replace('/', '.', CharOperation.subarray(signature, i + 1, indexOfSemiColon));

        case 'S':
            if (arrayDim > 0)
                return convertToArrayType(SHORT, arrayDim);
            return SHORT;

        case 'Z':
            if (arrayDim > 0)
                return convertToArrayType(BOOLEAN, arrayDim);
            return BOOLEAN;

        case 'V':
            return VOID;

        case '[':
            arrayDim++;
            break;

        default:
            throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
        }
    }
    return null;
}

From source file:com.codenvy.ide.ext.java.server.internal.core.search.indexing.BinaryIndexer.java

License:Open Source License

private int extractArgCount(char[] signature, char[] className) throws ClassFormatException {
    int indexOfClosingParen = CharOperation.lastIndexOf(')', signature);
    if (indexOfClosingParen == 1) {
        // there is no parameter
        return 0;
    }/*  w ww .  ja  v  a 2  s.  c o m*/
    if (indexOfClosingParen == -1) {
        throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
    }
    int parameterTypesCounter = 0;
    for (int i = 1; i < indexOfClosingParen; i++) {
        switch (signature[i]) {
        case 'B':
        case 'C':
        case 'D':
        case 'F':
        case 'I':
        case 'J':
        case 'S':
        case 'Z':
            parameterTypesCounter++;
            break;
        case 'L':
            int indexOfSemiColon = CharOperation.indexOf(';', signature, i + 1);
            if (indexOfSemiColon == -1)
                throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
            // verify if first parameter is synthetic
            if (className != null && parameterTypesCounter == 0) {
                char[] classSignature = Signature.createCharArrayTypeSignature(className, true);
                int length = indexOfSemiColon - i + 1;
                if (classSignature.length > (length + 1)) {
                    // synthetic means that parameter type has same signature than given class
                    for (int j = i, k = 0; j < indexOfSemiColon; j++, k++) {
                        if (!(signature[j] == classSignature[k]
                                || (signature[j] == '/' && classSignature[k] == '.'))) {
                            parameterTypesCounter++;
                            break;
                        }
                    }
                } else {
                    parameterTypesCounter++;
                }
                className = null; // do not verify following parameters
            } else {
                parameterTypesCounter++;
            }
            i = indexOfSemiColon;
            break;
        case '[':
            break;
        default:
            throw new ClassFormatException(ClassFormatException.ErrInvalidMethodSignature);
        }
    }
    return parameterTypesCounter;
}