コード例 #1
0
  private void processFromProperties(TypeElement type, Set<TypeElement> types) {
    List<? extends Element> children = type.getEnclosedElements();
    VisitorConfig config = conf.getConfig(type, children);

    // fields
    if (config.visitFieldProperties()) {
      for (VariableElement field : ElementFilter.fieldsIn(children)) {
        TypeElement typeElement = typeExtractor.visit(field.asType());
        if (typeElement != null) {
          types.add(typeElement);
        }
      }
    }

    // getters
    if (config.visitMethodProperties()) {
      for (ExecutableElement method : ElementFilter.methodsIn(children)) {
        String name = method.getSimpleName().toString();
        if ((name.startsWith("get") || name.startsWith("is")) && method.getParameters().isEmpty()) {
          TypeElement typeElement = typeExtractor.visit(method.getReturnType());
          if (typeElement != null) {
            types.add(typeElement);
          }
        }
      }
    }
  }
コード例 #2
0
 private void scanForMultipart(
     ExecutableElement executableElement, RestDocumentation.Resource.Method doc) {
   for (VariableElement var : executableElement.getParameters()) {
     TypeMirror varType = var.asType();
     if (varType.toString().startsWith(MultipartHttpServletRequest.class.getName())) {
       doc.setMultipartRequest(true);
       return;
     }
   }
 }
コード例 #3
0
  private void buildUrlParameters(
      ExecutableElement executableElement, RestDocumentation.Resource.Method doc) {
    RestDocumentation.Resource.Method.UrlFields subs = doc.getUrlParameters();

    for (VariableElement var : executableElement.getParameters()) {
      RequestParam reqParam = var.getAnnotation(RequestParam.class);
      if (reqParam != null) {
        addUrlField(subs, var, reqParam.value());
      }
    }
  }
コード例 #4
0
  private void buildPathVariables(
      ExecutableElement executableElement, RestDocumentation.Resource.Method doc) {
    RestDocumentation.Resource.Method.UrlFields subs = doc.getUrlSubstitutions();

    for (VariableElement var : executableElement.getParameters()) {
      PathVariable pathVar = var.getAnnotation(PathVariable.class);
      if (pathVar != null) {
        addUrlField(subs, var, pathVar.value());
      }
    }
  }
コード例 #5
0
ファイル: ApiDocParser.java プロジェクト: yamingd/argo-doclet
  private void printMethod(ExecutableElement executableElement) {
    StringBuilder s = new StringBuilder(256);
    s.append("method: " + executableElement).append("\n\t");
    s.append("annotations: " + executableElement.getAnnotationMirrors()).append("\n\t");
    s.append("return: " + executableElement.getReturnType()).append("\n\t");
    for (VariableElement var : executableElement.getParameters()) {
      s.append("parameter: " + var + ", " + var.getAnnotation(ApiParameterDoc.class))
          .append("\n\t");
    }

    generator.log(s.toString());
  }
コード例 #6
0
 private boolean validateParametersTypes(ExecutableElement constructor) {
   boolean res = true;
   List<? extends VariableElement> parameters = constructor.getParameters();
   Iterator<TypeElement> sources = context.sources().iterator();
   for (VariableElement parameter : parameters) {
     TypeElement sourceType = sources.next();
     if (!parameter.asType().equals(sourceType.asType())) {
       res = false;
       break;
     }
   }
   return res;
 }
コード例 #7
0
ファイル: LayoutParser.java プロジェクト: raeoks/jruby
  private void parseIdentifier(VariableElement fieldElement) {
    final String name = fieldElement.getSimpleName().toString();
    assert name.endsWith("_IDENTIFIER");

    final String propertyName =
        NameUtils.constantToIdentifier(name.substring(0, name.length() - "_IDENTIFIER".length()));

    getProperty(propertyName).setHasIdentifier(true);
  }
コード例 #8
0
ファイル: FloatElement.java プロジェクト: tompecina/bitwriter
 // processes the element
 private void process(final boolean isDouble) throws ProcessorException, IOException {
   log.fine("Processing floating-point element,");
   final int count =
       extractIntegerAttribute(element, "repeat", 0, null, 1, processor.getScriptProcessor());
   for (int iter = 0; iter < count; iter++) {
     for (Node content : children(element)) {
       if (content instanceof Text) {
         final String trimmedText = ((Text) content).getTextContent().trim();
         if (trimmedText.isEmpty()) {
           continue;
         }
         for (String split : new ScriptLine(trimmedText)) {
           log.finer("Processing segment: " + split);
           final BigInteger value;
           if (ScriptProcessor.isScript(split)) {
             if (isDouble) {
               value =
                   BigInteger.valueOf(
                       Double.doubleToLongBits(
                           processor.getScriptProcessor().evalAsDouble(split)));
             } else {
               value =
                   BigInteger.valueOf(
                       Float.floatToIntBits(processor.getScriptProcessor().evalAsFloat(split)));
             }
           } else {
             try {
               if (isDouble) {
                 value = BigInteger.valueOf(Double.doubleToLongBits(Util.stringToDouble(split)));
               } else {
                 value = BigInteger.valueOf(Float.floatToIntBits(Util.stringToFloat(split)));
               }
             } catch (final NumberFormatException | NullPointerException exception) {
               throw new ProcessorException("Illegal number format (2): " + split);
             }
           }
           write(value);
         }
       } else if (content instanceof Element) {
         final Element innerElement = (Element) content;
         switch (innerElement.getTagName()) {
           case "flush":
             new FlushElement(processor, innerElement);
             break;
           case "script":
             new ScriptElement(processor, innerElement);
             break;
           default:
             VariableElement.create(processor, innerElement, false);
             break;
         }
       }
     }
   }
   log.fine("Floating-point element processed");
 }
コード例 #9
0
ファイル: LayoutParser.java プロジェクト: raeoks/jruby
  private void parseShapeConstructor(ExecutableElement methodElement) {
    List<? extends VariableElement> parameters = methodElement.getParameters();

    if (superLayout != null) {
      assert parameters.size() >= superLayout.getAllShapeProperties().size();
      parameters =
          parameters.subList(superLayout.getAllShapeProperties().size(), parameters.size());
    }

    for (VariableElement element : parameters) {
      final String name = element.getSimpleName().toString();

      constructorProperties.add(name);
      final PropertyBuilder property = getProperty(name);
      setPropertyType(property, element.asType());
      parseConstructorParameterAnnotations(property, element);
      property.setIsShapeProperty(true);
      hasShapeProperties = true;
    }
  }
コード例 #10
0
  private void buildRequestBodies(
      ExecutableElement executableElement, RestDocumentation.Resource.Method doc) {
    List<VariableElement> requestBodies = new ArrayList<VariableElement>();
    for (VariableElement var : executableElement.getParameters()) {
      if (var.getAnnotation(org.springframework.web.bind.annotation.RequestBody.class) != null) {
        requestBodies.add(var);
      }
    }

    if (requestBodies.size() > 1) {
      throw new IllegalStateException(
          String.format(
              "Method %s in class %s has multiple @RequestBody params",
              executableElement.getSimpleName(), executableElement.getEnclosingElement()));
    }

    if (requestBodies.size() == 1) {
      buildRequestBody(requestBodies.get(0), doc);
    }
  }
コード例 #11
0
ファイル: LayoutParser.java プロジェクト: raeoks/jruby
  private void parseConstructor(ExecutableElement methodElement) {
    List<? extends VariableElement> parameters = methodElement.getParameters();

    if (hasShapeProperties || (superLayout != null && superLayout.hasShapeProperties())) {
      assert parameters.get(0).asType().toString().equals(DynamicObjectFactory.class.getName())
          : parameters.get(0).asType();
      parameters = parameters.subList(1, parameters.size());
    }

    if (superLayout != null) {
      assert parameters.size() >= superLayout.getAllNonShapeProperties().size();
      parameters =
          parameters.subList(superLayout.getAllNonShapeProperties().size(), parameters.size());
    }

    for (VariableElement element : parameters) {
      final String name = element.getSimpleName().toString();

      constructorProperties.add(name);
      final PropertyBuilder property = getProperty(name);
      setPropertyType(property, element.asType());
      parseConstructorParameterAnnotations(property, element);
    }
  }
コード例 #12
0
ファイル: XLogProcessor.java プロジェクト: hejunbinlan/XLog
  @Override
  public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) {
    System.out.println("processing: " + env.toString());
    List<MethodToLog> methodToLogs = new ArrayList<>();
    List<String> classNames = new ArrayList<>();

    for (Element element : env.getElementsAnnotatedWith(XLog.class)) {
      if (element.getKind() != ElementKind.METHOD
          && element.getKind() != ElementKind.CONSTRUCTOR
          && element.getKind() != ElementKind.CLASS) {
        throw new IllegalStateException(
            String.format(
                "@%s annotation must be on as method, constructor or class.",
                element.getSimpleName()));
      }
      if (element instanceof TypeElement) {
        // class
        String pkgName = ((TypeElement) element).getQualifiedName().toString();
        if (!classNames.contains(pkgName)) {
          classNames.add(pkgName);
        }
      } else if (element instanceof ExecutableElement) {
        // method or constructor
        ExecutableElement e = (ExecutableElement) element;

        int type = XLogUtils.TYPE_METHOD;
        if (e.getKind() == ElementKind.METHOD) {
          type = XLogUtils.TYPE_METHOD;
        } else if (e.getKind() == ElementKind.CONSTRUCTOR) {
          type = XLogUtils.TYPE_CONSTRUCTOR;
        }

        TypeElement te = findEnclosingTypeElement(e);
        System.out.println(te.getQualifiedName().toString() + "." + e.getSimpleName());
        System.out.println(e.getReturnType());
        List<String> parameters = new ArrayList<>();
        List<String> parameterNames = new ArrayList<>();
        for (VariableElement ve : e.getParameters()) {
          System.out.println(ve.asType());
          System.out.println(ve.getSimpleName());
          parameters.add(ve.asType().toString());
          parameterNames.add(ve.getSimpleName().toString());
        }
        MethodToLog methodToLog =
            new MethodToLog(
                type,
                te.getQualifiedName().toString(),
                e.getSimpleName().toString(),
                parameters,
                parameterNames);
        methodToLogs.add(methodToLog);

        if (!classNames.contains(methodToLog.getClassName())) {
          classNames.add(methodToLog.getClassName());
        }
      }
    }

    if (methodToLogs.size() > 0) {
      generateXLogProcessor("_" + MD5(env.toString()), methodToLogs, classNames);
    }

    return true;
  }
コード例 #13
0
 private void addUrlField(
     RestDocumentation.Resource.Method.UrlFields subs, VariableElement var, String annoValue) {
   String name =
       (annoValue == null || annoValue.isEmpty()) ? var.getSimpleName().toString() : annoValue;
   subs.addField(name, newJsonType(var.asType()));
 }
コード例 #14
0
 private void buildRequestBody(VariableElement var, RestDocumentation.Resource.Method doc) {
   doc.setRequestBody(newJsonType(var.asType()));
 }
コード例 #15
0
 /**
  * {@inheritDoc}
  *
  * <p>This implementation scans the enclosed elements, unless the element is a {@code
  * RESOURCE_VARIABLE} in which case {@code visitUnknown} is called.
  *
  * @param e {@inheritDoc}
  * @param p {@inheritDoc}
  * @return the result of scanning
  */
 public R visitVariable(VariableElement e, P p) {
   if (e.getKind() != ElementKind.RESOURCE_VARIABLE) return scan(e.getEnclosedElements(), p);
   else return visitUnknown(e, p);
 }