/*
 * Copyright 2000-2012 JetBrains s.r.o.
 *
 * 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.
 */

 /**
  * @author Denis Fokin
  */

#ifdef JUMPLISTBRIDGEJNI_EXPORTS
#define JUMPLISTBRIDGEJNI_API __declspec(dllexport)
#else
#define JUMPLISTBRIDGEJNI_API __declspec(dllimport)
#endif

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_intellij_ui_win_RecentTasks */

#ifndef _Included_com_intellij_ui_win_RecentTasks
#define _Included_com_intellij_ui_win_RecentTasks
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_intellij_ui_win_RecentTasks
 * Method:    initialize
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_intellij_ui_win_RecentTasks_initialize
  (JNIEnv *, jclass, jstring);

/*
 * Class:     com_intellij_ui_win_RecentTasks
 * Method:    addTasksNativeForCategory
 * Signature: (Ljava/lang/String;[Lcom/intellij/ui/win/RecentTasks/Task;)V
 */
JNIEXPORT void JNICALL Java_com_intellij_ui_win_RecentTasks_addTasksNativeForCategory
  (JNIEnv *, jclass, jstring, jobjectArray);

/*
* Class:     com_intellij_ui_win_RecentTasks
* Method:    getShortenPath
* Signature: ([Ljava/lang/String;)[Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_intellij_ui_win_RecentTasks_getShortenPath
	(JNIEnv * jEnv, jclass c, jstring path);

/*
 * Class:     com_intellij_ui_win_RecentTasks
 * Method:    clearNative
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_intellij_ui_win_RecentTasks_clearNative
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

