Exemplo n.º 1
0
int		getFileSize(const std::wstring& filepath)
{
	std::string	mbcs_filepath	=	toMBCS(filepath);
	struct stat file_stat;
	stat(mbcs_filepath.c_str(),&file_stat);
	return (int)file_stat.st_size;		//不支持大文件
}
bool ClassSpaceChecker::collectJavaClassInfo(const QString & classFile, ClassFileContext *ctx) 
{
	JavaClass *clazz = jclass_class_new(toMBCS(classFile).c_str(), NULL);

	if(clazz == NULL)
		return false;

	// method count
	ctx->methodCount = clazz->methods_count;
	ConstantPool *constant_pool = clazz->constant_pool;
		
	if(constant_pool == NULL)
		return false;

	char* class_name;
	char* method_name;
	char* package_name;
	char* this_class = jclass_cp_get_this_class_name(constant_pool);
	char* this_package = jclass_get_package_from_class_name(this_class);

	for(int count = 1; count < constant_pool->count; count++)
	{
		switch(constant_pool->entries[count].tag)
		{
		case CONSTANT_Class:
			class_name = jclass_cp_get_class_name(constant_pool, count, 1);
			package_name = jclass_get_package_from_class_name(class_name);

			if(!jclass_string_is_primitive_type(class_name))
			{
				if(strcmp(class_name, this_class) != 0)
				{
					//if(strchr(class_name,'$') == NULL)
					{
						ctx->classReferencedList.insert(class_name);
					}
				}
			}
			free(class_name);

			if(package_name != NULL)
			{	
				//if(do_flag & PACKAGES)
				//	string_list_add(package_list, package_name, IS_DEPENDENCY);
				free(package_name);
			}
			break;

		case CONSTANT_Methodref:
		case CONSTANT_InterfaceMethodref:
			//if(do_flag & METHOD_REF)
			//{
			//	method_name = jclass_cp_get_method_signature(constant_pool, count, 1);
			//	if(method_name != NULL)
			//	{
			//		class_name = jclass_get_class_from_method_signature(method_name);

			//		method_flag = (strcmp(class_name, this_class)? IS_DEPENDENCY: flag);
			//		
			//		if (constant_pool->entries[count].tag == CONSTANT_Methodref)
			//			string_list_add(method_list, method_name, method_flag);
			//		else
			//			string_list_add(interface_method_list, method_name, method_flag);

			//		free(class_name);
			//		free(method_name);
			//	}

			//}
			break;
		}
	}
	
	free(this_class);
	free(this_package);
	
	jclass_class_free(clazz);

	return true;
}