/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.jdt;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonNull;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.internal.codeassist.ISearchRequestor;
import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
/**
* @author Evgen Vidolob
*/
public class JsonSearchRequester implements ISearchRequestor {
private static final Gson gson = new GsonBuilder().disableHtmlEscaping().serializeNulls().create();
private JsonArray result = new JsonArray();
@Override
public void acceptConstructor(int modifiers, char[] simpleTypeName, int parameterCount, char[] signature, char[][] parameterTypes,
char[][] parameterNames, int typeModifiers, char[] packageName, int extraFlags, String path,
AccessRestriction access) {
if(access != null){
switch (access.getProblemId()){
case IProblem.ForbiddenReference:
return;
}
}
JsonObject constructor = new JsonObject();
constructor.addProperty("modifiers", modifiers);
constructor.addProperty("simpleTypeName", new String(simpleTypeName));
constructor.addProperty("parameterCount", parameterCount);
constructor.add("signature", signature == null ? JsonNull.INSTANCE : new JsonPrimitive(new String(signature)));
constructor.add("parameterTypes", BinaryTypeConvector.toJsonArrayString(parameterTypes));
constructor.add("parameterNames", BinaryTypeConvector.toJsonArrayString(parameterNames));
constructor.addProperty("typeModifiers", typeModifiers);
constructor.addProperty("packageName", new String(packageName));
constructor.addProperty("extraFlags", extraFlags);
result.add(constructor);
}
public String toJsonString() {
return gson.toJson(result);
}
@Override
public void acceptType(char[] packageName, char[] typeName, char[][] enclosingTypeNames, int modifiers,
AccessRestriction accessRestriction) {
if(accessRestriction != null){
switch (accessRestriction.getProblemId()){
case IProblem.ForbiddenReference:
return;
}
}
JsonObject type = new JsonObject();
type.addProperty("packageName", new String(packageName));
type.addProperty("typeName", new String(typeName));
type.add("enclosingTypeNames", BinaryTypeConvector.toJsonArrayString(enclosingTypeNames));
type.addProperty("modifiers", modifiers);
result.add(type);
}
@Override
public void acceptPackage(char[] packageName) {
result.add(new JsonPrimitive(new String(packageName)));
}
}