Package org.eclipse.jdt.internal.compiler.classfmt

Examples of org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException


            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);
          }
          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;
  }
View Full Code Here


    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);
    }
View Full Code Here

    return parameterTypes;
  }
  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);
          }
          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;
  }
View Full Code Here

    if (indexOfClosingParen == 1) {
      // there is no parameter
      return 0;
    }
    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;
  }
View Full Code Here

            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);
          }
          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;
  }
View Full Code Here

    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);
    }
View Full Code Here

    return parameterTypes;
  }
  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);
          }
          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;
  }
View Full Code Here

    if (indexOfClosingParen == 1) {
      // there is no parameter
      return 0;
    }
    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;
  }
View Full Code Here

TOP

Related Classes of org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.