コード例 #1
0
ファイル: FunLib.java プロジェクト: jgralab/jgralab
    private void createSigInfo(
        Entry<String, FunctionInfo> e,
        Description consAnno,
        HashMap<Category, ArrayList<SignatureInfo>> cat2sig,
        int i) {
      SignatureInfo si = new SignatureInfo();
      si.signature = e.getValue().signatures[i];
      Method m = si.signature.evaluateMethod;

      Description des = m.getAnnotation(Description.class);
      if ((des == null) || (des.params() == null)) {
        si.params = consAnno.params();
      } else {
        si.description = des.description();
        si.params = des.params();
      }
      if (e.getValue().needsEvaluatorArgument()) {
        // the first parameter is the InternalGreqlEvaluator
        assert si.params[0].equals("internal");
        si.params = Arrays.copyOfRange(si.params, 1, si.params.length);
      }

      if ((des != null) && (des.categories() != null)) {
        for (Category cat : des.categories()) {
          if (!cat2sig.containsKey(cat)) {
            cat2sig.put(cat, new ArrayList<SignatureInfo>());
          }
          cat2sig.get(cat).add(si);
        }
      } else {
        for (Category cat : consAnno.categories()) {
          if (!cat2sig.containsKey(cat)) {
            cat2sig.put(cat, new ArrayList<SignatureInfo>());
          }
          cat2sig.get(cat).add(si);
        }
      }
    }
コード例 #2
0
ファイル: FunLib.java プロジェクト: jgralab/jgralab
    private void fillCat2Funs(final Map<String, FunctionInfo> funs) {
      for (Entry<String, FunctionInfo> e : funs.entrySet()) {

        Class<?> funClass = e.getValue().getFunction().getClass();
        assert (funClass.getConstructors().length == 1);
        Constructor<?> cons = funClass.getConstructors()[0];

        String name = e.getKey();
        String constructorDescription = null;

        Description consAnno = cons.getAnnotation(Description.class);
        if (consAnno != null) {
          constructorDescription = consAnno.description();
        }

        HashMap<Category, ArrayList<SignatureInfo>> cat2sig = new HashMap<>();
        int methodCount = e.getValue().signatures.length;
        for (int i = 0; i < methodCount; i++) {
          createSigInfo(e, consAnno, cat2sig, i);
        }

        for (Category cat : cat2sig.keySet()) {
          SortedMap<String, AnnotationInfo> m = cat2funs.get(cat);
          if (m == null) {
            m = new TreeMap<>();
            cat2funs.put(cat, m);
          }
          AnnotationInfo aninfo = new AnnotationInfo();
          aninfo.name = name;
          aninfo.constructorDescription = constructorDescription;
          aninfo.signatureInfos = cat2sig.get(cat).toArray(new SignatureInfo[] {});
          m.put(aninfo.name, aninfo);
          cat2funs.put(cat, m);
        }
      }
    }
コード例 #3
0
ファイル: FunLib.java プロジェクト: jgralab/jgralab
    public final String getHtmlDescription() {
      StringBuilder sb = new StringBuilder();
      sb.append("<html><body><p>GReQL function <font color=\"blue\"><strong>")
          .append(name)
          .append("</strong></font></p><dl>");
      assert (functionClass.getConstructors().length == 1);
      Constructor<?> cons = functionClass.getConstructors()[0];

      Description consDesc = cons.getAnnotation(Description.class);

      for (Signature sig : signatures) {
        Description funDesc = sig.evaluateMethod.getAnnotation(Description.class);
        if (funDesc == null) {
          funDesc = consDesc;
        }
        if (funDesc == null) {
          continue;
        }
        Class<?> ret = sig.evaluateMethod.getReturnType();
        String returnType = Types.getGreqlTypeName(ret);

        boolean acceptsType =
            sig.parameterTypes[sig.parameterTypes.length - 1] == TypeCollection.class;
        sb.append("<dt><strong><font color=\"purple\">")
            .append(returnType)
            .append(" <font color=\"blue\">")
            .append(name)
            .append("</font></strong>");
        if (acceptsType) {
          sb.append(" { <font color=\"#008000\">types...</font> } ");
        }
        sb.append("(");
        String delim = "";
        int i = 0;
        for (String p : funDesc.params()) {
          if ((i == 0) && needsGraphArgument) {
            // don't show Graph argument
            ++i;
            continue;
          }
          if ((i == 0) && needsEvaluatorArgument) {
            // don't show evaluator argument
            ++i;
            continue;
          }
          if ((i == (sig.parameterTypes.length - 1)) && acceptsType) {
            // don't show TypeCollection argument
            ++i;
            continue;
          }
          Class<?> cls = sig.parameterTypes[i++];
          String type = Types.getGreqlTypeName(cls);
          sb.append(delim)
              .append("<strong><font color=\"purple\">")
              .append(type)
              .append("</font></strong> ")
              .append(p);
          delim = ", ";
        }
        sb.append(")</dt><dd>").append(funDesc.description()).append("</dd>");
      }
      sb.append("</dl></body></html>");
      return sb.toString();
    }