All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gemstone.gemfire.codeAnalysis.ClassAndMethodDetails Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */
package com.gemstone.gemfire.codeAnalysis;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.Assert;

import com.gemstone.gemfire.codeAnalysis.decode.CompiledClass;
import com.gemstone.gemfire.codeAnalysis.decode.CompiledCode;
import com.gemstone.gemfire.codeAnalysis.decode.CompiledMethod;


/**
 * A class used to store the names of dataserializable classes and the sizes
 * of their toData/fromData methods.
 * 
 * @author bruces
 *
 */
public class ClassAndMethodDetails {
  static String[] hexChars;
  public String className;
  public Map methodCode = new HashMap();
  
  static {
    String[] digits = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
    
    hexChars = new String[256];
    for (int i=0; i<256; i++) {
      hexChars[i] = digits[(i>>4)&0xf] + digits[i&0xf];
    }
  }
  
  public ClassAndMethodDetails(CompiledClass dclass) {
    this.className = dclass.fullyQualifiedName();
  }
  
  private ClassAndMethodDetails() {
  }

  public static ClassAndMethodDetails create(LineNumberReader in) throws IOException {
    String line;
    while ((line = in.readLine()) != null) {
      line = line.trim();
      if (line.length() == 0 || line.startsWith("#") || line.startsWith("//")) {
        continue;
      }
      break;
    }
    if (line == null) {
      return null;
    }
    ClassAndMethodDetails instance = new ClassAndMethodDetails();
    String[] fields = line.split(",");
    try {
      instance.className = fields[0];
      int numMethods = Integer.parseInt(fields[1]);
      for (int i=0; i entry: methodCode.entrySet()) {
      sb.append(entry.getKey()).append(',');
      byte[] code = entry.getValue();
      for (int i=0; i methods = new ArrayList(cam.methods.values());
    Collections.sort(methods);
    sb.append(',').append(methods.size()).append("\n");
    for (CompiledMethod method: methods) {
      CompiledCode c = method.getCode();
      if (c != null) {
        sb.append(method.name())
          .append(',').append(c.code.length).append(',');
        for (int i=0; i




© 2015 - 2024 Weber Informatics LLC | Privacy Policy