javax.lang.model.element.TypeElement#getAnnotation ( )源码实例Demo

下面列出了javax.lang.model.element.TypeElement#getAnnotation ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: doma   文件: EmbeddableMetaFactory.java
void validateFieldAnnotation(VariableElement fieldElement, EmbeddableMeta embeddableMeta) {
  TypeElement foundAnnotationTypeElement = null;
  for (AnnotationMirror annotation : fieldElement.getAnnotationMirrors()) {
    DeclaredType declaredType = annotation.getAnnotationType();
    TypeElement typeElement = ctx.getMoreTypes().toTypeElement(declaredType);
    if (typeElement.getAnnotation(EntityField.class) != null) {
      if (foundAnnotationTypeElement != null) {
        throw new AptException(
            Message.DOMA4288,
            fieldElement,
            new Object[] {
              foundAnnotationTypeElement.getQualifiedName(), typeElement.getQualifiedName()
            });
      }
      foundAnnotationTypeElement = typeElement;
    }
  }
}
 
源代码2 项目: snap-desktop   文件: AboutBoxProcessor.java
@Override
protected boolean handleProcess(Set<? extends TypeElement> set, RoundEnvironment env) throws LayerGenerationException {
    Elements elements = processingEnv.getElementUtils();
    for (Element element : env.getElementsAnnotatedWith(AboutBox.class)) {
        TypeElement clazz = (TypeElement) element;
        AboutBox aboutBox = clazz.getAnnotation(AboutBox.class);
        String teName = elements.getBinaryName(clazz).toString();
        File file = layer(element)
                .file("AboutBox/" + teName.replace('.', '-') + ".instance")
                .intvalue("position", aboutBox.position())
                .bundlevalue("displayName", aboutBox.displayName());
        if (!aboutBox.iconPath().isEmpty()) {
            file.bundlevalue("iconPath", aboutBox.iconPath());
        }
        file.write();
    }
    return true;
}
 
源代码3 项目: Module2Module   文件: RouterProcessor.java
private void processInstaller(Set<? extends Element> mainAppElement) throws IOException {
    TypeElement typeElement = (TypeElement) mainAppElement.iterator().next();
    JavaFileObject javaFileObject = mFiler.createSourceFile(Config.ROUTER_MANAGER, typeElement);
    PrintWriter writer = new PrintWriter(javaFileObject.openWriter());

    writer.println("package " + Config.PACKAGE_NAME + ";");
    writer.println("public class " + Config.ROUTER_MANAGER + " {");
    writer.println("public static void " + Config.ROUTER_MANAGER_METHOD + "() {");

    Components componentsAnnotation = typeElement.getAnnotation(Components.class);
    String[] components = componentsAnnotation.value();
    for (String item : components) {
        writer.println(Config.FILE_PREFIX + item + ".router();");
    }

    writer.println("}");
    writer.println("}");

    writer.flush();
    writer.close();
}
 
源代码4 项目: squidb   文件: ImplementsPlugin.java
private void parseInterfaces() {
    TypeElement modelSpecElement = modelSpec.getModelSpecElement();
    if (modelSpecElement.getAnnotation(Implements.class) != null) {
        List<DeclaredTypeName> typeNames = utils.getTypeNamesFromAnnotationValue(
                utils.getAnnotationValue(modelSpecElement, Implements.class, "interfaceClasses"));
        if (!AptUtils.isEmpty(typeNames)) {
            interfaces.addAll(typeNames);
        }

        AnnotationValue value = utils
                .getAnnotationValue(modelSpecElement, Implements.class, "interfaceDefinitions");
        List<AnnotationMirror> interfaceSpecs = utils.getValuesFromAnnotationValue(value,
                AnnotationMirror.class);

        for (AnnotationMirror spec : interfaceSpecs) {
            AnnotationValue interfaceClassValue = utils.getAnnotationValueFromMirror(spec, "interfaceClass");
            List<DeclaredTypeName> interfaceClassList = utils.getTypeNamesFromAnnotationValue(interfaceClassValue);
            if (!AptUtils.isEmpty(interfaceClassList)) {
                DeclaredTypeName interfaceClass = interfaceClassList.get(0);

                AnnotationValue interfaceTypeArgsValue = utils
                        .getAnnotationValueFromMirror(spec, "interfaceTypeArgs");
                List<DeclaredTypeName> typeArgs = utils.getTypeNamesFromAnnotationValue(interfaceTypeArgsValue);
                if (AptUtils.isEmpty(typeArgs)) {
                    List<String> typeArgNames = utils.getValuesFromAnnotationValue(
                            utils.getAnnotationValueFromMirror(spec, "interfaceTypeArgNames"), String.class);
                    for (String typeArgName : typeArgNames) {
                        typeArgs.add(new DeclaredTypeName(typeArgName));
                    }
                }
                interfaceClass.setTypeArgs(typeArgs);
                interfaces.add(interfaceClass);
            }
        }
    }
}
 
源代码5 项目: openjdk-jdk8u-backup   文件: WebServiceVisitor.java
private boolean isStateful(TypeElement classElement) {
    try {
        // We don't want dependency on rt-ha module as its not integrated in JDK
        return classElement.getAnnotation((Class<? extends Annotation>) Class.forName("com.sun.xml.internal.ws.developer.Stateful")) != null;
    } catch (ClassNotFoundException e) {
        //ignore
    }
    return false;
}
 
源代码6 项目: openjdk-8-source   文件: WebServiceVisitor.java
protected void preProcessWebService(WebService webService, TypeElement element) {
    processedMethods = new HashSet<String>();
    seiContext = context.getSeiContext(element);
    String targetNamespace = null;
    if (webService != null)
        targetNamespace = webService.targetNamespace();
    PackageElement packageElement = builder.getProcessingEnvironment().getElementUtils().getPackageOf(element);
    if (targetNamespace == null || targetNamespace.length() == 0) {
        String packageName = packageElement.getQualifiedName().toString();
        if (packageName == null || packageName.length() == 0) {
            builder.processError(WebserviceapMessages.WEBSERVICEAP_NO_PACKAGE_CLASS_MUST_HAVE_TARGETNAMESPACE(
                    element.getQualifiedName()), element);
        }
        targetNamespace = RuntimeModeler.getNamespace(packageName);
    }
    seiContext.setNamespaceUri(targetNamespace);
    if (serviceImplName == null)
        serviceImplName = seiContext.getSeiImplName();
    if (serviceImplName != null) {
        seiContext.setSeiImplName(serviceImplName);
        context.addSeiContext(serviceImplName, seiContext);
    }
    portName = ClassNameInfo.getName(element.getSimpleName().toString().replace('$', '_'));
    packageName = packageElement.getQualifiedName();
    portName = webService != null && webService.name() != null && webService.name().length() > 0 ?
            webService.name() : portName;
    serviceName = ClassNameInfo.getName(element.getQualifiedName().toString()) + WebServiceConstants.SERVICE.getValue();
    serviceName = webService != null && webService.serviceName() != null && webService.serviceName().length() > 0 ?
            webService.serviceName() : serviceName;
    wsdlNamespace = seiContext.getNamespaceUri();
    typeNamespace = wsdlNamespace;

    SOAPBinding soapBinding = element.getAnnotation(SOAPBinding.class);
    if (soapBinding != null) {
        pushedSoapBinding = pushSoapBinding(soapBinding, element, element);
    } else if (element.equals(typeElement)) {
        pushedSoapBinding = pushSoapBinding(new MySoapBinding(), element, element);
    }
}
 
源代码7 项目: RetroFacebook   文件: RetroFacebookProcessor.java
private boolean ancestorIsRetroFacebook(TypeElement type) {
  while (true) {
    TypeMirror parentMirror = type.getSuperclass();
    if (parentMirror.getKind() == TypeKind.NONE) {
      return false;
    }
    Types typeUtils = processingEnv.getTypeUtils();
    TypeElement parentElement = (TypeElement) typeUtils.asElement(parentMirror);
    if (parentElement.getAnnotation(RetroFacebook.class) != null) {
      return true;
    }
    type = parentElement;
  }
}
 
@Override
public BeanInfo visitType(TypeElement element, Void aVoid) {
    //check element type
    if (!VALIDATED_CLASS_NAME.equals(getQualifiedName(element)))
        checkElementType(element, VALIDATED_CLASS_NAME);
    TypeMirror typeMirror = null;
    BeanInfo beanInfo = new BeanInfo();
    //get annotated Element info.
    String annotatedElementPackage = getPackageName(element);
    beanInfo.holderName = getSimpleName(element);
    beanInfo.holderPackage = annotatedElementPackage;
    //get annotation info
    try {
        DataBean dataBean = element.getAnnotation(DataBean.class);
        beanInfo.dataBeanName = dataBean.beanName();
        beanInfo.dataBeanPackage = annotatedElementPackage + ".databean";
        beanInfo.layoutId = dataBean.layout();
        //Get type of Data,may throw exception
        dataBean.data();
    } catch (MirroredTypeException mte) {
        typeMirror = mte.getTypeMirror();
    }
    if (typeMirror != null) {
        if (typeMirror.getKind() == TypeKind.DECLARED) {
            DeclaredType declaredType = (DeclaredType) typeMirror;
            TypeElement dataBeanElement = (TypeElement) declaredType.asElement();
            beanInfo.dataPackage = getPackageName(dataBeanElement);
            beanInfo.dataName = getSimpleName(dataBeanElement);
        }
    }
    //log
    logger.log(Diagnostic.Kind.NOTE,
            beanInfo.toString());
    return beanInfo;
}
 
源代码9 项目: openjdk-jdk9   文件: WebServiceVisitor.java
protected void checkForInvalidSeiAnnotation(TypeElement element, Class annotationClass) {
    Object annotation = element.getAnnotation(annotationClass);
    if (annotation != null) {
        builder.processError(WebserviceapMessages.WEBSERVICEAP_INVALID_SEI_ANNOTATION(
                annotationClass.getName(), element.getQualifiedName()), element);
    }
}
 
源代码10 项目: java   文件: OperatorProcessor.java
private void collectOpMethods(
    Multimap<String, MethodSpec> groupedMethods, TypeElement opClass, TypeElement annotation) {
  boolean opClassDeprecated = opClass.getAnnotation(Deprecated.class) != null;
  AnnotationMirror operatorAnnot = getAnnotationMirror(opClass, annotation.getQualifiedName());
  if (operatorAnnot == null) {
    throw new IllegalArgumentException(
        "Annotation "
            + annotation.getSimpleName()
            + " not present on element "
            + opClass.getSimpleName());
  }
  String opGroup = getAnnotationElementValueAsString("group", operatorAnnot);
  String opName = getAnnotationElementValueAsString("name", operatorAnnot);
  if (Strings.isNullOrEmpty(opName)) {
    opName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, ClassName.get(opClass).simpleName());
  }
  // Build an endpoint for each method annotated with @Endpoint, which takes in parameter a scope
  // and, optionally, a list of arguments
  for (ExecutableElement opMethod : ElementFilter.methodsIn(opClass.getEnclosedElements())) {
    AnnotationMirror endpointAnnot =
        getAnnotationMirror(opMethod, elements.getName(T_ENDPOINT.toString()));
    if (endpointAnnot != null) {
      if (!opMethod.getModifiers().containsAll(Arrays.asList(Modifier.STATIC, Modifier.PUBLIC))) {
        throw new IllegalArgumentException(
            "Endpoint " + opMethod + " of class " + opClass + " must be static and public");
      }
      if (opMethod.getParameters().isEmpty() ||
          !((TypeElement)types.asElement(opMethod.getParameters().get(0).asType())).getQualifiedName()
              .equals(elements.getName(T_SCOPE.toString()))) {
        throw new IllegalArgumentException(
            "Endpoint " + opMethod + " of class " + opClass + " must take an instance of " + T_SCOPE
                + " as its first parameter");
      }
      String endpointGroup = getAnnotationElementValueAsString("group", endpointAnnot);
      if (endpointGroup.isEmpty()) {
        endpointGroup = opGroup;
      }
      String endpointName = getAnnotationElementValueAsString("name", endpointAnnot);
      if (endpointName.isEmpty()) {
        endpointName = opName;
      }
      boolean describeByClass =
          getAnnotationElementValueAsBoolean("describeByClass", endpointAnnot, false);
      boolean deprecated = opMethod.getAnnotation(Deprecated.class) != null || opClassDeprecated;
      MethodSpec method = buildOpMethod(endpointName, opClass, opMethod, describeByClass, deprecated);
      groupedMethods.put(endpointGroup, method);
    }
  }
}
 
源代码11 项目: openjdk-8   文件: WebServiceWrapperGenerator.java
protected boolean isWSDLException(Collection<MemberInfo> members, TypeElement thrownDecl) {
    WebFault webFault = thrownDecl.getAnnotation(WebFault.class);
    return webFault != null && members.size() == 2 && getFaultInfoMember(members) != null;
}
 
源代码12 项目: hottub   文件: WebServiceWrapperGenerator.java
protected boolean isWSDLException(Collection<MemberInfo> members, TypeElement thrownDecl) {
    WebFault webFault = thrownDecl.getAnnotation(WebFault.class);
    return webFault != null && members.size() == 2 && getFaultInfoMember(members) != null;
}
 
源代码13 项目: openjdk-jdk9   文件: InlineAnnotationReaderImpl.java
public boolean hasClassAnnotation(TypeElement clazz, Class<? extends Annotation> annotationType) {
    return clazz.getAnnotation(annotationType)!=null;
}
 
源代码14 项目: domino-jackson   文件: SerializerBuilder.java
private JsonInclude getJsonInclude(DeclaredType enclosingType) {
    TypeElement enclosingElement = ((TypeElement) enclosingType.asElement());
    return enclosingElement.getAnnotation(JsonInclude.class);
}
 
源代码15 项目: ig-json-parser   文件: JsonAnnotationProcessor.java
/**
 * This processes a single field annotated with {@link JsonField}. It locates the enclosing class
 * and then gathers data on the declared type of the field.
 */
private void processFieldAnnotation(Element element) {
  TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();

  // Verify common generated code restrictions.
  if (!isFieldAnnotationValid(JsonField.class, element)) {
    return;
  }

  TypeMirror type = element.asType();

  JsonParserClassData injector = mState.mClassElementToInjectorMap.get(enclosingElement);

  TypeData data = injector.getOrCreateRecord(element.getSimpleName().toString());

  JsonField annotation = element.getAnnotation(JsonField.class);

  data.setFieldName(annotation.fieldName());
  data.setAlternateFieldNames(annotation.alternateFieldNames());
  data.setMapping(annotation.mapping());
  data.setValueExtractFormatter(VALUE_EXTRACT.forString(annotation.valueExtractFormatter()));
  data.setAssignmentFormatter(FIELD_ASSIGNMENT.forString(annotation.fieldAssignmentFormatter()));
  data.setSerializeCodeFormatter(
      FIELD_CODE_SERIALIZATION.forString(annotation.serializeCodeFormatter()));
  TypeUtils.CollectionType collectionType = mTypeUtils.getCollectionType(type);
  data.setCollectionType(collectionType);

  if (collectionType != TypeUtils.CollectionType.NOT_A_COLLECTION) {
    // inspect the inner type.
    type = mTypeUtils.getCollectionParameterizedType(type);
  }

  data.setParseType(mTypeUtils.getParseType(type, JsonType.class));

  boolean skipEnumValidationCheck = setJsonAdapterIfApplicable(type, injector, data, annotation);

  if (data.getParseType() == TypeUtils.ParseType.PARSABLE_OBJECT) {
    TypeMirror erasedType = mTypes.erasure(type);
    DeclaredType declaredType = (DeclaredType) erasedType;
    TypeElement typeElement = (TypeElement) declaredType.asElement();

    String packageName = mTypeUtils.getPackageName(mElements, typeElement);

    data.setPackageName(packageName);
    data.setParsableType(mTypeUtils.getClassName(typeElement, packageName));
    data.setParsableTypeParserClass(
        mTypeUtils.getPrefixForGeneratedClass(typeElement, packageName));

    JsonType typeAnnotation = typeElement.getAnnotation(JsonType.class);
    // Use the parsable object's value extract formatter if existing one is empty
    data.setValueExtractFormatter(
        data.getValueExtractFormatter()
            .orIfEmpty(VALUE_EXTRACT.forString(typeAnnotation.valueExtractFormatter())));

    CodeFormatter.Factory serializeCodeType =
        typeElement.getKind() == INTERFACE
            ? CodeFormatter.CLASS_CODE_SERIALIZATION
            : CodeFormatter.INTERFACE_CODE_SERIALIZATION;
    data.setSerializeCodeFormatter(
        data.getSerializeCodeFormatter()
            .orIfEmpty(serializeCodeType.forString(typeAnnotation.serializeCodeFormatter())));

    data.setIsInterface(typeElement.getKind() == INTERFACE);
    data.setFormatterImports(typeAnnotation.typeFormatterImports());
  } else if (data.getParseType() == TypeUtils.ParseType.ENUM_OBJECT) {
    // verify that we have value extract and serializer formatters.
    if (!skipEnumValidationCheck
        && (StringUtil.isNullOrEmpty(annotation.valueExtractFormatter())
            || (injector.generateSerializer()
                && StringUtil.isNullOrEmpty(annotation.serializeCodeFormatter())))) {
      error(
          element,
          "%s: Annotate the enum with @%s (see annotation docs for details). "
              + "If that is undesirable you must have a value extract formatter, "
              + "and a serialize code formatter if serialization generation is enabled",
          enclosingElement,
          JsonAdapter.class.getSimpleName());
    }
    data.setEnumType(type.toString());
  }
}
 
源代码16 项目: openjdk-jdk8u   文件: WebServiceWrapperGenerator.java
protected boolean isWSDLException(Collection<MemberInfo> members, TypeElement thrownDecl) {
    WebFault webFault = thrownDecl.getAnnotation(WebFault.class);
    return webFault != null && members.size() == 2 && getFaultInfoMember(members) != null;
}
 
源代码17 项目: ig-json-parser   文件: JsonAnnotationProcessor.java
/**
 * This processes a single class that is annotated with {@link JsonType}. It verifies that the
 * class is public and creates an {@link ProcessorClassData} for it.
 */
private void processClassAnnotation(Element element) {
  boolean abstractClass = false;
  TypeElement typeElement = (TypeElement) element;

  // The annotation should be validated for an interface, but no code should be generated.
  JsonType annotation = element.getAnnotation(JsonType.class);
  if (element.getKind() == INTERFACE) {
    return;
  }

  boolean isKotlin = false;
  try {
    Class<? extends Annotation> metaDataClass =
        Class.forName("kotlin.Metadata").asSubclass(Annotation.class);
    isKotlin = element.getAnnotation(metaDataClass) != null;
  } catch (ClassNotFoundException e) {
    // not kotlin
  }

  // Verify containing class visibility is not private.
  if (element.getModifiers().contains(PRIVATE)) {
    error(
        element,
        "@%s %s may not be applied to private classes. (%s.%s)",
        JsonType.class.getSimpleName(),
        typeElement.getQualifiedName(),
        element.getSimpleName());
    return;
  }
  if (element.getModifiers().contains(ABSTRACT)) {
    abstractClass = true;
  }

  JsonParserClassData injector = mState.mClassElementToInjectorMap.get(typeElement);
  if (injector == null) {

    String parentGeneratedClassName = null;

    if (!mOmitSomeMethodBodies) {
      // Superclass info is only needed if we're generating method bodies.
      TypeMirror superclass = typeElement.getSuperclass();
      // walk up the superclass hierarchy until we find another class we know about.
      while (superclass.getKind() != TypeKind.NONE) {
        TypeElement superclassElement = (TypeElement) mTypes.asElement(superclass);

        if (superclassElement.getAnnotation(JsonType.class) != null) {
          String superclassPackageName = mTypeUtils.getPackageName(mElements, superclassElement);
          parentGeneratedClassName =
              superclassPackageName
                  + "."
                  + mTypeUtils.getPrefixForGeneratedClass(
                      superclassElement, superclassPackageName)
                  + JsonAnnotationProcessorConstants.HELPER_CLASS_SUFFIX;

          break;
        }

        superclass = superclassElement.getSuperclass();
      }
    }

    boolean generateSerializer =
        annotation.generateSerializer() == JsonType.TriState.DEFAULT
            ? mGenerateSerializers
            : annotation.generateSerializer() == JsonType.TriState.YES;

    String packageName = mTypeUtils.getPackageName(mElements, typeElement);
    injector =
        new JsonParserClassData(
            packageName,
            typeElement.getQualifiedName().toString(),
            mTypeUtils.getClassName(typeElement, packageName),
            mTypeUtils.getPrefixForGeneratedClass(typeElement, packageName)
                + JsonAnnotationProcessorConstants.HELPER_CLASS_SUFFIX,
            new ProcessorClassData.AnnotationRecordFactory<String, TypeData>() {

              @Override
              public TypeData createAnnotationRecord(String key) {
                return new TypeData();
              }
            },
            abstractClass,
            generateSerializer,
            mOmitSomeMethodBodies,
            parentGeneratedClassName,
            annotation,
            isKotlin);
    mState.mClassElementToInjectorMap.put(typeElement, injector);
  }
}
 
源代码18 项目: openjdk-8   文件: WebServiceWrapperGenerator.java
private boolean generateExceptionBean(TypeElement thrownDecl, String beanPackage) {
    if (!builder.isServiceException(thrownDecl.asType()))
        return false;

    String exceptionName = ClassNameInfo.getName(thrownDecl.getQualifiedName().toString());
    if (processedExceptions.contains(exceptionName))
        return false;
    processedExceptions.add(exceptionName);
    WebFault webFault = thrownDecl.getAnnotation(WebFault.class);
    String className = beanPackage+ exceptionName + BEAN.getValue();

    Collection<MemberInfo> members = ap_generator.collectExceptionBeanMembers(thrownDecl);
    boolean isWSDLException = isWSDLException(members, thrownDecl);
    String namespace = typeNamespace;
    String name = exceptionName;
    FaultInfo faultInfo;
    if (isWSDLException) {
        TypeMirror beanType =  getFaultInfoMember(members).getParamType();
        faultInfo = new FaultInfo(TypeMonikerFactory.getTypeMoniker(beanType), true);
        namespace = webFault.targetNamespace().length()>0 ?
                           webFault.targetNamespace() : namespace;
        name = webFault.name().length()>0 ?
                      webFault.name() : name;
        faultInfo.setElementName(new QName(namespace, name));
        seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);
        return false;
    }
    if (webFault != null) {
        namespace = webFault.targetNamespace().length()>0 ?
                    webFault.targetNamespace() : namespace;
        name = webFault.name().length()>0 ?
               webFault.name() : name;
        className = webFault.faultBean().length()>0 ?
                    webFault.faultBean() : className;

    }
    JDefinedClass cls = getCMClass(className, CLASS);
    faultInfo = new FaultInfo(className, false);

    if (duplicateName(className)) {
        builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_EXCEPTION_BEAN_NAME_NOT_UNIQUE(
                typeElement.getQualifiedName(), thrownDecl.getQualifiedName()));
    }

    boolean canOverWriteBean = builder.canOverWriteClass(className);
    if (!canOverWriteBean) {
        builder.log("Class " + className + " exists. Not overwriting.");
        seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);
        return false;
    }
    if (seiContext.getExceptionBeanName(thrownDecl.getQualifiedName()) != null)
        return false;

    //write class comment - JAXWS warning
    JDocComment comment = cls.javadoc();
    for (String doc : GeneratorBase.getJAXWSClassComment(ToolVersion.VERSION.MAJOR_VERSION)) {
        comment.add(doc);
    }

    // XmlElement Declarations
    writeXmlElementDeclaration(cls, name, namespace);

    // XmlType Declaration
    //members = sortMembers(members);
    XmlType xmlType = thrownDecl.getAnnotation(XmlType.class);
    String xmlTypeName = (xmlType != null && !xmlType.name().equals("##default")) ? xmlType.name() : exceptionName;
    String xmlTypeNamespace = (xmlType != null && !xmlType.namespace().equals("##default")) ? xmlType.namespace() : typeNamespace;
    writeXmlTypeDeclaration(cls, xmlTypeName, xmlTypeNamespace, members);

    writeMembers(cls, members);

    seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);
    return true;
}
 
源代码19 项目: kripton   文件: M2MEntity.java
/**
 * Works with @BindDaoMany2Many and @BindDao to extract entity name.
 * @param schema 
 *
 * @param daoElement the dao element
 * @return the m 2 M entity
 */
public static M2MEntity extractEntityManagedByDAO(TypeElement daoElement) {
	ClassName entity1 = null;
	ClassName entity2 = null;
	String prefixId = null;
	String tableName = null;
	String entityName = null;
	PackageElement pkg = null;
	String packageName = null;
	boolean needToCreate = true;
	boolean generatedMethods=true;
	boolean immutable=true;
	
	
	if (daoElement.getAnnotation(BindDaoMany2Many.class) != null) {
		entity1 = TypeUtility.className(AnnotationUtility.extractAsClassName(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.ENTITY_1));
		entity2 = TypeUtility.className(AnnotationUtility.extractAsClassName(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.ENTITY_2));
		prefixId = AnnotationUtility.extractAsString(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.ID_NAME);
		tableName = AnnotationUtility.extractAsString(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.TABLE_NAME);
		tableName = AnnotationUtility.extractAsString(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.TABLE_NAME);
		immutable = AnnotationUtility.extractAsBoolean(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.IMMUTABLE);
		
		generatedMethods=AnnotationUtility.extractAsBoolean(daoElement, BindDaoMany2Many.class, AnnotationAttributeType.METHODS);
		
		entityName = entity1.simpleName() + entity2.simpleName();
		pkg = BaseProcessor.elementUtils.getPackageOf(daoElement);
		packageName = pkg.isUnnamed() ? null : pkg.getQualifiedName().toString();
	}

	if (daoElement.getAnnotation(BindDao.class) != null) {
		// we have @BindDao
		String derived = AnnotationUtility.extractAsClassName(daoElement, BindDao.class, AnnotationAttributeType.VALUE);
		ClassName clazz = TypeUtility.className(derived);

		packageName = clazz.packageName();
		entityName = clazz.simpleName();

		String tableTemp = AnnotationUtility.extractAsClassName(daoElement, BindDao.class, AnnotationAttributeType.TABLE_NAME);
		if (StringUtils.hasText(tableTemp)) {
			tableName = tableTemp;
		}

		needToCreate = false;
	}

	M2MEntity entity = new M2MEntity(daoElement, packageName, entityName, TypeUtility.className(daoElement.asType().toString()), entity1, entity2, prefixId, tableName, needToCreate, generatedMethods, immutable);

	return entity;
}
 
public boolean hasClassAnnotation(TypeElement clazz, Class<? extends Annotation> annotationType) {
    return clazz.getAnnotation(annotationType)!=null;
}