Java 类com.intellij.psi.PsiAnnotationMemberValue 实例源码

项目:intellij-ce-playground    文件:AnnotationInvocationHandler.java   
/**
 * Implementation of dynamicProxy.toString()
 */
private String toStringImpl() {
  StringBuilder result = new StringBuilder(128);
  result.append('@');
  result.append(type.getName());
  result.append('(');
  boolean firstMember = true;
  PsiNameValuePair[] attributes = myAnnotation.getParameterList().getAttributes();
  for (PsiNameValuePair e : attributes) {
    if (firstMember) {
      firstMember = false;
    }
    else {
      result.append(", ");
    }

    result.append(e.getName());
    result.append('=');
    PsiAnnotationMemberValue value = e.getValue();
    result.append(value == null ? "null" : value.getText());
  }
  result.append(')');
  return result.toString();
}
项目:intellij-ce-playground    文件:DelegatesToAnnotationChecker.java   
@Override
public boolean checkArgumentList(@NotNull AnnotationHolder holder, @NotNull GrAnnotation annotation) {
  if (!GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO.equals(annotation.getQualifiedName())) return false;

  final PsiAnnotationMemberValue valueAttribute = annotation.findAttributeValue("value");

  if (valueAttribute == null) {
    final PsiAnnotationOwner owner = annotation.getOwner();
    if (owner instanceof GrModifierList) {
      final PsiElement parent1 = ((GrModifierList)owner).getParent();
      if (parent1 instanceof GrParameter) {
        final PsiElement parent = parent1.getParent();
        if (parent instanceof GrParameterList) {
          for (GrParameter parameter : ((GrParameterList)parent).getParameters()) {
            if (parameter.getModifierList().findAnnotation(GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO_TARGET) != null) {
              return true;
            }
          }
        }
      }
    }
  }

  return false;
}
项目:google-cloud-intellij    文件:ApiNamespaceInspection.java   
private void addOwnerDomainAttribute(
    @NotNull final Project project, final PsiAnnotation annotation) {
  new WriteCommandAction(project, annotation.getContainingFile()) {
    @Override
    protected void run(final Result result) throws Throwable {
      // @A(ownerDomain = "your-company.com")
      PsiAnnotationMemberValue newMemberValue =
          JavaPsiFacade.getInstance(project)
              .getElementFactory()
              .createAnnotationFromText(
                  "@A("
                      + API_NAMESPACE_DOMAIN_ATTRIBUTE
                      + " = \""
                      + SUGGESTED_DOMAIN_ATTRIBUTE
                      + "\")",
                  null)
              .findDeclaredAttributeValue(API_NAMESPACE_DOMAIN_ATTRIBUTE);

      annotation.setDeclaredAttributeValue(API_NAMESPACE_DOMAIN_ATTRIBUTE, newMemberValue);
    }
  }.execute();
}
项目:google-cloud-intellij    文件:ApiNamespaceInspection.java   
private void addOwnerNameAttribute(
    @NotNull final Project project, final PsiAnnotation annotation) {
  new WriteCommandAction(project, annotation.getContainingFile()) {
    @Override
    protected void run(final Result result) throws Throwable {
      // @A(ownerName = "YourCo")
      PsiAnnotationMemberValue newMemberValue =
          JavaPsiFacade.getInstance(project)
              .getElementFactory()
              .createAnnotationFromText(
                  "@A("
                      + API_NAMESPACE_NAME_ATTRIBUTE
                      + " = \""
                      + SUGGESTED_OWNER_ATTRIBUTE
                      + "\")",
                  null)
              .findDeclaredAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE);

      annotation.setDeclaredAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE, newMemberValue);
    }
  }.execute();
}
项目:google-cloud-intellij    文件:RestSignatureInspection.java   
private String getAttributeFromAnnotation(
    PsiAnnotation annotation, String annotationType, final String attribute)
    throws InvalidAnnotationException, MissingAttributeException {

  String annotationQualifiedName = annotation.getQualifiedName();
  if (annotationQualifiedName == null) {
    throw new InvalidAnnotationException(annotation, annotationType);
  }

  if (annotationQualifiedName.equals(annotationType)) {
    PsiAnnotationMemberValue annotationMemberValue = annotation.findAttributeValue(attribute);
    if (annotationMemberValue == null) {
      throw new MissingAttributeException(annotation, attribute);
    }

    String httpMethodWithQuotes = annotationMemberValue.getText();
    return httpMethodWithQuotes.substring(1, httpMethodWithQuotes.length() - 1);
  } else {
    throw new InvalidAnnotationException(annotation, annotationType);
  }
}
项目:google-cloud-intellij    文件:RestSignatureInspectionTest.java   
private void initializePsiMethod(String methodName, String httpMethodValue, String pathValue) {
  PsiAnnotationMemberValue mockAnnotationMemberValue1 = mock(PsiAnnotationMemberValue.class);
  when(mockAnnotationMemberValue1.getText()).thenReturn(httpMethodValue);

  PsiAnnotationMemberValue mockAnnotationMemberValue2 = mock(PsiAnnotationMemberValue.class);
  when(mockAnnotationMemberValue2.getText()).thenReturn(pathValue);

  PsiAnnotation mockAnnotation = mock(PsiAnnotation.class);
  when(mockAnnotation.getQualifiedName())
      .thenReturn(GctConstants.APP_ENGINE_ANNOTATION_API_METHOD);
  when(mockAnnotation.findAttributeValue("httpMethod")).thenReturn(mockAnnotationMemberValue1);
  when(mockAnnotation.findAttributeValue("path")).thenReturn(mockAnnotationMemberValue2);
  PsiAnnotation[] mockAnnotationsArray = {mockAnnotation};

  PsiModifierList mockModifierList = mock(PsiModifierList.class);
  when(mockModifierList.getAnnotations()).thenReturn(mockAnnotationsArray);

  mockPsiMethod = mock(PsiMethod.class);
  when(mockPsiMethod.getModifierList()).thenReturn(mockModifierList);
  when(mockPsiMethod.getName()).thenReturn(methodName);
  when(mockPsiMethod.getContainingClass()).thenReturn(mockPsiClass);

  PsiParameterList mockParameterList = mock(PsiParameterList.class);
  when(mockParameterList.getParameters()).thenReturn(new PsiParameter[0]);
  when(mockPsiMethod.getParameterList()).thenReturn(mockParameterList);
}
项目:google-cloud-intellij    文件:RestSignatureInspectionTest.java   
private void initializePsiClass(String apiResource, String apiClassResource) {
  PsiAnnotationMemberValue mockAnnotationMemberValue1 = mock(PsiAnnotationMemberValue.class);
  when(mockAnnotationMemberValue1.getText()).thenReturn(apiResource);

  PsiAnnotationMemberValue mockAnnotationMemberValue2 = mock(PsiAnnotationMemberValue.class);
  when(mockAnnotationMemberValue2.getText()).thenReturn(apiClassResource);

  // Mock @Api(resource = "")
  PsiAnnotation mockAnnotation1 = mock(PsiAnnotation.class);
  when(mockAnnotation1.getQualifiedName()).thenReturn(GctConstants.APP_ENGINE_ANNOTATION_API);
  when(mockAnnotation1.findAttributeValue("resource")).thenReturn(mockAnnotationMemberValue1);

  // Mock @ApiClass(resource = "")
  PsiAnnotation mockAnnotation2 = mock(PsiAnnotation.class);
  when(mockAnnotation2.getQualifiedName())
      .thenReturn(GctConstants.APP_ENGINE_ANNOTATION_API_CLASS);
  when(mockAnnotation2.findAttributeValue("resource")).thenReturn(mockAnnotationMemberValue2);

  PsiAnnotation[] mockAnnotationsArray = {mockAnnotation1, mockAnnotation2};

  PsiModifierList mockModifierList = mock(PsiModifierList.class);
  when(mockModifierList.getAnnotations()).thenReturn(mockAnnotationsArray);

  mockPsiClass = mock(PsiClass.class);
  when(mockPsiClass.getModifierList()).thenReturn(mockModifierList);
}
项目:tools-idea    文件:DelegatesToAnnotationChecker.java   
@Override
public boolean checkArgumentList(@NotNull AnnotationHolder holder, @NotNull GrAnnotation annotation) {
  if (!GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO.equals(annotation.getQualifiedName())) return false;

  final PsiAnnotationMemberValue valueAttribute = annotation.findAttributeValue("value");

  if (valueAttribute == null) {
    final PsiAnnotationOwner owner = annotation.getOwner();
    if (owner instanceof GrModifierList) {
      final PsiElement parent1 = ((GrModifierList)owner).getParent();
      if (parent1 instanceof GrParameter) {
        final PsiElement parent = parent1.getParent();
        if (parent instanceof GrParameterList) {
          for (GrParameter parameter : ((GrParameterList)parent).getParameters()) {
            if (parameter.getModifierList().findAnnotation(GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO_TARGET) != null) {
              return true;
            }
          }
        }
      }
    }
  }

  return false;
}
项目:errai-intellij-idea-plugin    文件:Util.java   
public static String getAttributeValue(PsiAnnotation annotation, String attributeName, DefaultPolicy policy) {
  final PsiAnnotationMemberValue value = getAnnotationMemberValue(annotation, attributeName);
  if (value != null) {
    if (value instanceof PsiClassObjectAccessExpression) {
      final PsiType type = ((PsiClassObjectAccessExpression) value).getType();
      if (type == null) {
        return null;
      }
      return type.getCanonicalText();
    }
    else {
      final String text = value.getText();
      return text.substring(1, text.length() - 1);
    }
  }

  if (policy == DefaultPolicy.OWNER_IDENTIFIER_NAME) {
    return PsiUtil.getName(getImmediateOwnerElement(annotation));
  }
  else {
    return null;
  }
}
项目:dagger-intellij-plugin    文件:Decider.java   
@Override public boolean shouldShow(UsageTarget target, Usage usage) {
  PsiElement element = ((UsageInfo2UsageAdapter) usage).getElement();
  PsiMethod psimethod = PsiConsultantImpl.findMethod(element);

  PsiAnnotationMemberValue attribValue = PsiConsultantImpl
      .findTypeAttributeOfProvidesAnnotation(psimethod);

  // Is it a @Provides method?
  return psimethod != null
      // Ensure it has an @Provides.
      && PsiConsultantImpl.hasAnnotation(psimethod, CLASS_PROVIDES)
      // Check for Qualifier annotations.
      && PsiConsultantImpl.hasQuailifierAnnotations(psimethod, qualifierAnnotations)
      // Right return type.
      && PsiConsultantImpl.getReturnClassFromMethod(psimethod, false)
      .getName()
      .equals(target.getName())
      // Right type parameters.
      && PsiConsultantImpl.hasTypeParameters(psimethod, typeParameters)
      // @Provides(type=SET)
      && attribValue != null
      && attribValue.textMatches(SET_TYPE);
}
项目:consulo-java    文件:PsiMemberParameterizedLocation.java   
public static Location getParameterizedLocation(PsiClass psiClass, String paramSetName, String parameterizedClassName)
{
    final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(psiClass, Collections.singleton(JUnitUtil.RUN_WITH));
    if(annotation != null)
    {
        final PsiAnnotationMemberValue attributeValue = annotation.findAttributeValue("value");
        if(attributeValue instanceof PsiClassObjectAccessExpression)
        {
            final PsiTypeElement operand = ((PsiClassObjectAccessExpression) attributeValue).getOperand();
            if(InheritanceUtil.isInheritor(operand.getType(), parameterizedClassName))
            {
                return new PsiMemberParameterizedLocation(psiClass.getProject(), psiClass, null, paramSetName);
            }
        }
    }
    return null;
}
项目:consulo-java    文件:NullableNotNullManagerImpl.java   
@NotNull
private static Nullness extractNullityFromWhenValue(PsiAnnotation nonNull)
{
    PsiAnnotationMemberValue when = nonNull.findAttributeValue("when");
    if(when instanceof PsiReferenceExpression)
    {
        String refName = ((PsiReferenceExpression) when).getReferenceName();
        if("ALWAYS".equals(refName))
        {
            return Nullness.NOT_NULL;
        }
        if("MAYBE".equals(refName) || "NEVER".equals(refName))
        {
            return Nullness.NULLABLE;
        }
    }
    return Nullness.UNKNOWN;
}
项目:manifold-ij    文件:ManGotoDeclarationHandler.java   
private static PsiElement findTargetFeature( PsiAnnotation psiAnnotation, ManifoldPsiClass facade )
  {
    PsiAnnotationMemberValue value = psiAnnotation.findAttributeValue( SourcePosition.FEATURE );
    String featureName = StringUtil.unquoteString( value.getText() );
//    value = psiAnnotation.findAttributeValue( SourcePosition.TYPE );
//    if( value != null )
//    {
//      String ownersType = StringUtil.unquoteString( value.getText() );
//      if( ownersType != null )
//      {
//        PsiElement target = findIndirectTarget( ownersType, featureName, facade.getRawFile().getProject() );
//        if( target != null )
//        {
//          return target;
//        }
//      }
//    }

    int iOffset = Integer.parseInt( psiAnnotation.findAttributeValue( SourcePosition.OFFSET ).getText() );
    int iLength = Integer.parseInt( psiAnnotation.findAttributeValue( SourcePosition.LENGTH ).getText() );

    List<PsiFile> sourceFiles = facade.getRawFiles();
    if( iOffset >= 0 )
    {
      //PsiElement target = sourceFile.findElementAt( iOffset );
      //## todo: handle multiple files
      return new FakeTargetElement( sourceFiles.get( 0 ), iOffset, iLength >= 0 ? iLength : 1, featureName );
    }
    return facade;
  }
项目:polygene-java    文件:SideEffectsAnnotationDeclaredCorrectlyInspection.java   
private RemoveAnnotationValueFix( @NotNull PsiAnnotationMemberValue annotationValueToRemove,
                                  @NotNull PsiJavaCodeReferenceElement sideEffectClassReference )
{
    super( message( "side.effects.annotation.declared.correctly.fix.remove.class.reference",
                    sideEffectClassReference.getQualifiedName() ) );
    this.annotationValueToRemove = annotationValueToRemove;
}
项目:polygene-java    文件:ConcernsAnnotationDeclaredCorrectlyInspection.java   
public RemoveInvalidConcernClassReferenceFix( @NotNull PsiAnnotationMemberValue annotationValueToRemove,
                                              @NotNull PsiJavaCodeReferenceElement concernClassReference )
{
    super( message( "concerns.annotation.declared.correctly.fix.remove.concern.class.reference",
                    concernClassReference.getQualifiedName() ) );
    this.concernClassAnnotationValue = annotationValueToRemove;
}
项目:polygene-java    文件:MixinImplementsMixinType.java   
private ProblemDescriptor createProblemDescriptor( @NotNull InspectionManager manager,
                                                   @NotNull PsiAnnotationMemberValue mixinAnnotationValue,
                                                   @NotNull PsiJavaCodeReferenceElement mixinClassReference,
                                                   @NotNull String message )
{
    RemoveInvalidMixinClassReferenceFix fix = new RemoveInvalidMixinClassReferenceFix(
        mixinAnnotationValue, mixinClassReference
    );
    return manager.createProblemDescriptor( mixinAnnotationValue, message, fix, GENERIC_ERROR_OR_WARNING );
}
项目:google-cloud-intellij    文件:MethodNameInspection.java   
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
  return new EndpointPsiElementVisitor() {
    @Override
    public void visitAnnotation(PsiAnnotation annotation) {
      if (!EndpointUtilities.isEndpointClass(annotation)) {
        return;
      }

      if (!GctConstants.APP_ENGINE_ANNOTATION_API_METHOD.equals(annotation.getQualifiedName())) {
        return;
      }

      PsiAnnotationMemberValue memberValue = annotation.findAttributeValue(API_NAME_ATTRIBUTE);
      if (memberValue == null) {
        return;
      }

      String nameValueWithQuotes = memberValue.getText();
      String nameValue = EndpointUtilities.removeBeginningAndEndingQuotes(nameValueWithQuotes);
      if (nameValue.isEmpty()) {
        return;
      }

      if (!API_NAME_PATTERN
          .matcher(EndpointUtilities.collapseSequenceOfDots(nameValue))
          .matches()) {
        holder.registerProblem(
            memberValue,
            "Invalid method name: letters, digits, underscores and dots are acceptable "
                + "characters. Leading and trailing dots are prohibited.",
            new MyQuickFix());
      }
    }
  };
}
项目:google-cloud-intellij    文件:EndpointPsiElementVisitor.java   
/**
 * Returns true if the class containing <code>psiElement</code> has a transformer specified by
 * using the @ApiTransformer annotation on a class or by using the transformer attribute of the
 *
 * @return True if the class containing <code>psiElement</code> has a transformer and false
 *     otherwise. @Api annotation. Returns false otherwise.
 */
public boolean hasTransformer(PsiElement psiElement) {
  PsiClass psiClass = PsiUtils.findClass(psiElement);
  if (psiClass == null) {
    return false;
  }

  PsiModifierList modifierList = psiClass.getModifierList();
  if (modifierList == null) {
    return false;
  }

  // Check if class has @ApiTransformer to specify a transformer
  PsiAnnotation apiTransformerAnnotation =
      modifierList.findAnnotation(GctConstants.APP_ENGINE_ANNOTATION_API_TRANSFORMER);
  if (apiTransformerAnnotation != null) {
    return true;
  }

  // Check if class utilizes the transformer attribute of the @Api annotation
  // to specify its transformer
  PsiAnnotation apiAnnotation =
      modifierList.findAnnotation(GctConstants.APP_ENGINE_ANNOTATION_API);
  if (apiAnnotation != null) {
    PsiAnnotationMemberValue transformerMember =
        apiAnnotation.findAttributeValue(API_TRANSFORMER_ATTRIBUTE);
    if (transformerMember != null && !transformerMember.getText().equals("{}")) {
      return true;
    }
  }

  return false;
}
项目:google-cloud-intellij    文件:EndpointPsiElementVisitor.java   
/**
 * Returns the value for @Named if it exists for <code>psiParameter</code> or null if it does not
 * exist.
 *
 * @param psiParameter The parameter whose @Named value is to be returned.
 * @return The @Named value if it exists for <code>psiParameter</code> or null if it does not
 *     exist.
 */
@Nullable
public PsiAnnotationMemberValue getNamedAnnotationValue(PsiParameter psiParameter) {
  PsiModifierList modifierList = psiParameter.getModifierList();
  if (modifierList == null) {
    return null;
  }

  PsiAnnotation annotation = modifierList.findAnnotation("javax.inject.Named");
  if (annotation == null) {
    annotation = modifierList.findAnnotation(GctConstants.APP_ENGINE_ANNOTATION_NAMED);
    if (annotation == null) {
      return null;
    }
  }

  PsiNameValuePair[] nameValuePairs = annotation.getParameterList().getAttributes();
  if (nameValuePairs.length != 1) {
    return null;
  }

  if (nameValuePairs[0] == null) {
    return null;
  }

  return nameValuePairs[0].getValue();
}
项目:google-cloud-intellij    文件:ApiNamespaceInspection.java   
private void addOwnerDomainAndNameAttributes(
    @NotNull final Project project, final PsiAnnotation annotation) {
  new WriteCommandAction(project, annotation.getContainingFile()) {
    @Override
    protected void run(final Result result) throws Throwable {
      // @A(ownerName = "YourCo", ownerDomain = "your-company.com")
      String annotationString =
          "@A("
              + API_NAMESPACE_NAME_ATTRIBUTE
              + " = \""
              + SUGGESTED_OWNER_ATTRIBUTE
              + "\", "
              + API_NAMESPACE_DOMAIN_ATTRIBUTE
              + " = \""
              + "your-company.com"
              + "\")";
      PsiAnnotation newAnnotation =
          JavaPsiFacade.getInstance(project)
              .getElementFactory()
              .createAnnotationFromText(annotationString, null);
      PsiAnnotationMemberValue newDomainMemberValue =
          newAnnotation.findDeclaredAttributeValue(API_NAMESPACE_DOMAIN_ATTRIBUTE);
      PsiAnnotationMemberValue newNameMemberValue =
          newAnnotation.findDeclaredAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE);

      annotation.setDeclaredAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE, newNameMemberValue);
      annotation.setDeclaredAttributeValue(
          API_NAMESPACE_DOMAIN_ATTRIBUTE, newDomainMemberValue);
    }
  }.execute();
}
项目:google-cloud-intellij    文件:RestSignatureInspection.java   
/**
 * Returns "/{}" for every parameter with a valid @Named annotation in {@code method} that does
 * not have @Nullable/@Default.
 */
private String getPathParameter(PsiMethod method) {
  StringBuilder path = new StringBuilder();
  EndpointPsiElementVisitor elementVisitor = new EndpointPsiElementVisitor();
  List<String> annotions =
      Arrays.asList(
          GctConstants.APP_ENGINE_ANNOTATION_NULLABLE,
          "javax.annotation.Nullable",
          GctConstants.APP_ENGINE_ANNOTATION_DEFAULT_VALUE);

  for (PsiParameter param : method.getParameterList().getParameters()) {
    // Check for @Nullable/@Default
    PsiModifierList modifierList = param.getModifierList();
    if (modifierList == null) {
      continue;
    }

    if (AnnotationUtil.isAnnotated(param, annotions)) {
      continue;
    }

    PsiAnnotationMemberValue namedValue = elementVisitor.getNamedAnnotationValue(param);
    if (namedValue != null) {
      path.append("/{}");
    }
  }

  return path.toString();
}
项目:google-cloud-intellij    文件:FullMethodNameInspection.java   
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
  PsiElement element = descriptor.getPsiElement();
  if (!(element instanceof PsiAnnotation)) {
    return;
  }

  PsiAnnotation annotation = (PsiAnnotation) element;
  if (!GctConstants.APP_ENGINE_ANNOTATION_API_METHOD.equals(annotation.getQualifiedName())) {
    return;
  }

  PsiAnnotationMemberValue apiMethodNameAttribute =
      annotation.findAttributeValue(API_METHOD_NAME_ATTRIBUTE);
  if (apiMethodNameAttribute == null) {
    return;
  }

  // Get name
  String nameValueWithQuotes = apiMethodNameAttribute.getText();
  String nameValue = EndpointUtilities.removeBeginningAndEndingQuotes(nameValueWithQuotes);

  // @A(name = "someName")
  PsiAnnotationMemberValue newMemberValue =
      JavaPsiFacade.getInstance(project)
          .getElementFactory()
          .createAnnotationFromText(
              "@A(" + API_METHOD_NAME_ATTRIBUTE + " = \"" + nameValue + "_1\")", null)
          .findDeclaredAttributeValue(API_METHOD_NAME_ATTRIBUTE);

  apiMethodNameAttribute.replace(newMemberValue);
}
项目:tools-idea    文件:GrAnnotationUtil.java   
@Nullable
public static String inferStringAttribute(@NotNull PsiAnnotation annotation, @NotNull String attributeName) {
  final PsiAnnotationMemberValue targetValue = annotation.findAttributeValue(attributeName);
  if (targetValue instanceof PsiLiteral) {
    final Object value = ((PsiLiteral)targetValue).getValue();
    if (value instanceof String) return (String)value;
  }
  return null;
}
项目:tools-idea    文件:GrAnnotationUtil.java   
@Nullable
public static Integer inferIntegerAttribute(@NotNull PsiAnnotation annotation, @NotNull String attributeName) {
  final PsiAnnotationMemberValue targetValue = annotation.findAttributeValue(attributeName);
  if (targetValue instanceof PsiLiteral) {
    final Object value = ((PsiLiteral)targetValue).getValue();
    if (value instanceof Integer) return (Integer)value;
  }
  return null;
}
项目:lombok-intellij-plugin    文件:PsiAnnotationUtil.java   
@Nullable
public static Boolean getDeclaredBooleanAnnotationValue(@NotNull PsiAnnotation psiAnnotation, @NotNull String parameter) {
  PsiAnnotationMemberValue attributeValue = psiAnnotation.findDeclaredAttributeValue(parameter);
  Object constValue = null;
  if (null != attributeValue) {
    final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(psiAnnotation.getProject());
    constValue = javaPsiFacade.getConstantEvaluationHelper().computeConstantExpression(attributeValue);
  }
  return constValue instanceof Boolean ? (Boolean) constValue : null;
}
项目:lombok-intellij-plugin    文件:LombokProcessorUtil.java   
@NotNull
public static Collection<String> getOnX(@NotNull PsiAnnotation psiAnnotation, @NotNull String parameterName) {
  PsiAnnotationMemberValue onXValue = psiAnnotation.findAttributeValue(parameterName);
  if (!(onXValue instanceof PsiAnnotation)) {
    return Collections.emptyList();
  }
  Collection<PsiAnnotation> annotations = PsiAnnotationUtil.getAnnotationValues((PsiAnnotation) onXValue, "value", PsiAnnotation.class);
  Collection<String> annotationStrings = new ArrayList<String>();
  for (PsiAnnotation annotation : annotations) {
    PsiAnnotationParameterList params = annotation.getParameterList();
    annotationStrings.add(PsiAnnotationSearchUtil.getSimpleNameOf(annotation) + params.getText());
  }
  return annotationStrings;
}
项目:errai-intellij-idea-plugin    文件:Util.java   
public static PsiAnnotationMemberValue getAnnotationMemberValue(PsiAnnotation annotation, String attributeName) {
  final PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes();
  for (PsiNameValuePair attribute : attributes) {
    if (attributeName.equals(attribute.getName())) {
      final PsiAnnotationMemberValue value = attribute.getValue();
      if (value != null) {
        return value;
      }
      break;
    }
  }
  return null;
}
项目:dagger-intellij-plugin    文件:PsiConsultantImpl.java   
public static PsiAnnotationMemberValue findTypeAttributeOfProvidesAnnotation(
    PsiElement element ) {
  PsiAnnotation annotation = findAnnotation(element, CLASS_PROVIDES);
  if (annotation != null) {
    return annotation.findAttributeValue(ATTRIBUTE_TYPE);
  }
  return null;
}
项目:dagger-intellij-plugin    文件:PsiConsultantImpl.java   
/**
 * Return the appropriate return class for a given method element.
 *
 * @param psiMethod the method to get the return class from.
 * @param expandType set this to true if return types annotated with @Provides(type=?)
 * should be expanded to the appropriate collection type.
 * @return the appropriate return class for the provided method element.
 */
public static PsiClass getReturnClassFromMethod(PsiMethod psiMethod, boolean expandType) {
  if (psiMethod.isConstructor()) {
    return psiMethod.getContainingClass();
  }

  PsiClassType returnType = ((PsiClassType) psiMethod.getReturnType());
  if (returnType != null) {
    // Check if has @Provides annotation and specified type
    if (expandType) {
      PsiAnnotationMemberValue attribValue = findTypeAttributeOfProvidesAnnotation(psiMethod);
      if (attribValue != null) {
        if (attribValue.textMatches(SET_TYPE)) {
          String typeName = "java.util.Set<" + returnType.getCanonicalText() + ">";
          returnType =
              ((PsiClassType) PsiElementFactory.SERVICE.getInstance(psiMethod.getProject())
                  .createTypeFromText(typeName, psiMethod));
        } else if (attribValue.textMatches(MAP_TYPE)) {
          // TODO(radford): Supporting map will require fetching the key type and also validating
          // the qualifier for the provided key.
          //
          // String typeName = "java.util.Map<String, " + returnType.getCanonicalText() + ">";
          // returnType = ((PsiClassType) PsiElementFactory.SERVICE.getInstance(psiMethod.getProject())
          //    .createTypeFromText(typeName, psiMethod));
        }
      }
    }

    return returnType.resolve();
  }
  return null;
}
项目:dagger-intellij-plugin    文件:PsiConsultantImpl.java   
public static List<PsiType> getTypeParameters(PsiElement psiElement) {
  PsiClassType psiClassType = getPsiClassType(psiElement);
  if (psiClassType == null) {
    return new ArrayList<PsiType>();
  }

  // Check if @Provides(type=?) pattern (annotation with specified type).
  PsiAnnotationMemberValue attribValue = findTypeAttributeOfProvidesAnnotation(psiElement);
  if (attribValue != null) {
    if (attribValue.textMatches(SET_TYPE)) {
      // type = SET. Transform the type parameter to the element type.
      ArrayList<PsiType> result = new ArrayList<PsiType>();
      result.add(psiClassType);
      return result;
    } else if (attribValue.textMatches(MAP_TYPE)) {
      // TODO(radford): Need to figure out key type for maps.
      // type = SET or type = MAP. Transform the type parameter to the element type.
      //ArrayList<PsiType> result = new ArrayList<PsiType>();
      //result.add(psiKeyType):
      //result.add(psiClassType);
      //return result;
    }
  }

  if (PsiConsultantImpl.isLazyOrProvider(getClass(psiClassType))) {
    psiClassType = extractFirstTypeParameter(psiClassType);
  }

  Collection<PsiType> typeParameters =
      psiClassType.resolveGenerics().getSubstitutor().getSubstitutionMap().values();
  return new ArrayList<PsiType>(typeParameters);
}
项目:consulo-javaee    文件:JamAttributeElement.java   
@Nullable
public PsiAnnotationMemberValue getPsiElement() {
  if (myExactValue == null) {
    assert myAttributeLink != null;
    return myAttributeLink.findLinkedChild(myParent.getPsiElement());
  }
  return myExactValue;
}
项目:consulo-javaee    文件:JamClassAttributeElement.java   
public String getStringValue() {
  final PsiClass value = getValue();
  if (value != null) return value.getQualifiedName();
  final PsiAnnotationMemberValue psi = getPsiElement();
  if (psi == null) return null;

  final String text = psi.getText();
  if (text != null && text.endsWith(".class")) return text.substring(0, text.length() - ".class".length());
  return null;
}
项目:consulo-javaee    文件:JamAnnotationAttributeMeta.java   
@Nullable
private T getJam(PsiAnnotationMemberValue element) {
  if (element instanceof PsiAnnotation) {
    return JamService.getJamService(element.getProject()).getJamElement(myJamKey, element);
  }
  return null;
}
项目:consulo-java    文件:AnnotationInvocationHandler.java   
/**
 * Implementation of dynamicProxy.toString()
 */
private String toStringImpl()
{
    StringBuilder result = new StringBuilder(128);
    result.append('@');
    result.append(type.getName());
    result.append('(');
    boolean firstMember = true;
    PsiNameValuePair[] attributes = myAnnotation.getParameterList().getAttributes();
    for(PsiNameValuePair e : attributes)
    {
        if(firstMember)
        {
            firstMember = false;
        }
        else
        {
            result.append(", ");
        }

        result.append(e.getName());
        result.append('=');
        PsiAnnotationMemberValue value = e.getValue();
        result.append(value == null ? "null" : value.getText());
    }
    result.append(')');
    return result.toString();
}
项目:data-mediator    文件:Util.java   
/** make sure the value is boolean. */
public static boolean getBooleanValue(PsiAnnotationMemberValue value){
     return Boolean.valueOf(value.getText());
}
项目:polygene-java    文件:MixinImplementsMixinType.java   
public RemoveInvalidMixinClassReferenceFix( @NotNull PsiAnnotationMemberValue mixinClassAnnotationValue,
                                            @NotNull PsiJavaCodeReferenceElement mixinClassReference )
{
    super( message( "mixin.implements.mixin.type.fix.remove.class.reference", mixinClassReference.getQualifiedName() ) );
    this.mixinClassAnnotationValue = mixinClassAnnotationValue;
}
项目:polygene-java    文件:MixinsAnnotationDeclaredOnMixinType.java   
public RemoveInvalidMixinClassReferenceFix( @NotNull PsiAnnotationMemberValue mixinsAnnotation )
{
    super( message( "mixins.annotation.declared.on.mixin.type.fix.remove.mixins.annotation" ) );
    this.mixinsAnnotation = mixinsAnnotation;
}
项目:google-cloud-intellij    文件:NamedResourceInspection.java   
/** Adds "_1" to the query name in an @Named annotation in <code>descriptor</code>. */
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
  PsiElement element = descriptor.getPsiElement();
  if (element == null) {
    return;
  }

  if (!(element instanceof PsiAnnotation)) {
    return;
  }

  PsiAnnotation annotation = (PsiAnnotation) element;
  if ((!"javax.inject.Named".equals(annotation.getQualifiedName()))
      && (!GctConstants.APP_ENGINE_ANNOTATION_NAMED.equals(annotation.getQualifiedName()))) {
    return;
  }

  // Get @Named value
  PsiNameValuePair[] nameValuePairs = annotation.getParameterList().getAttributes();
  if (nameValuePairs.length == 0) {
    return;
  }

  PsiAnnotationMemberValue memberValue = nameValuePairs[0].getValue();
  if (memberValue == null) {
    return;
  }

  // Create new annotation with  value equal to  @Named's value plus "_1"
  String newNamedValue =
      "@Named(\""
          + EndpointUtilities.removeBeginningAndEndingQuotes(memberValue.getText())
          + "_1\")";
  PsiAnnotation newAnnotation =
      JavaPsiFacade.getInstance(project)
          .getElementFactory()
          .createAnnotationFromText(newNamedValue, null);
  assert (newAnnotation.getParameterList().getAttributes().length == 1);

  // Update value of @Named
  memberValue.replace(newAnnotation.getParameterList().getAttributes()[0].getValue());
}
项目:google-cloud-intellij    文件:ApiNamespaceInspection.java   
@NotNull
@Override
public PsiElementVisitor buildVisitor(
    @NotNull final com.intellij.codeInspection.ProblemsHolder holder, boolean isOnTheFly) {
  return new EndpointPsiElementVisitor() {

    /**
     * Flags @ApiNamespace that have one or more attributes specified where both the OwnerName and
     * OwnerDomain attributes are not specified.
     */
    @Override
    public void visitAnnotation(PsiAnnotation annotation) {
      if (!EndpointUtilities.isEndpointClass(annotation)) {
        return;
      }

      if (!GctConstants.APP_ENGINE_ANNOTATION_API_NAMESPACE.equals(
          annotation.getQualifiedName())) {
        return;
      }

      PsiAnnotationMemberValue ownerDomainMember =
          annotation.findAttributeValue(API_NAMESPACE_DOMAIN_ATTRIBUTE);
      if (ownerDomainMember == null) {
        return;
      }
      String ownerDomainWithQuotes = ownerDomainMember.getText();

      PsiAnnotationMemberValue ownerNameMember =
          annotation.findAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE);
      if (ownerNameMember == null) {
        return;
      }
      String ownerNameWithQuotes = ownerNameMember.getText();

      String ownerDomain =
          EndpointUtilities.removeBeginningAndEndingQuotes(ownerDomainWithQuotes);
      String ownerName = EndpointUtilities.removeBeginningAndEndingQuotes(ownerNameWithQuotes);
      // Package Path has a default value of ""
      String packagePath =
          EndpointUtilities.removeBeginningAndEndingQuotes(
              annotation.findAttributeValue(API_NAMESPACE_PACKAGE_PATH_ATTRIBUTE).getText());

      boolean allUnspecified =
          ownerDomain.isEmpty() && ownerName.isEmpty() && packagePath.isEmpty();
      boolean ownerFullySpecified = !ownerDomain.isEmpty() && !ownerName.isEmpty();

      // Either everything must be fully unspecified or owner domain/name must both be specified.
      if (!allUnspecified && !ownerFullySpecified) {
        holder.registerProblem(
            annotation,
            "Invalid namespace configuration. If a namespace is set,"
                + " make sure to set an Owner Domain and Name. Package Path is optional.",
            new MyQuickFix());
      }
    }
  };
}
项目:google-cloud-intellij    文件:ApiNamespaceInspection.java   
/**
 * Provides a default value for OwnerName and OwnerDomain attributes in @ApiNamespace when they
 * are not provided.
 */
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
  PsiElement psiElement = descriptor.getPsiElement();
  if (psiElement == null) {
    return;
  }

  if (!(psiElement instanceof PsiAnnotation)) {
    return;
  }

  PsiAnnotation annotation = (PsiAnnotation) psiElement;
  if (!GctConstants.APP_ENGINE_ANNOTATION_API_NAMESPACE.equals(annotation.getQualifiedName())) {
    return;
  }

  PsiAnnotationMemberValue ownerDomainMember =
      annotation.findAttributeValue(API_NAMESPACE_DOMAIN_ATTRIBUTE);
  if (ownerDomainMember == null) {
    return;
  }
  String ownerDomainWithQuotes = ownerDomainMember.getText();

  PsiAnnotationMemberValue ownerNameMember =
      annotation.findAttributeValue(API_NAMESPACE_NAME_ATTRIBUTE);
  if (ownerNameMember == null) {
    return;
  }
  String ownerNameWithQuotes = ownerNameMember.getText();

  String ownerDomain = EndpointUtilities.removeBeginningAndEndingQuotes(ownerDomainWithQuotes);
  String ownerName = EndpointUtilities.removeBeginningAndEndingQuotes(ownerNameWithQuotes);

  if (ownerDomain.isEmpty() && ownerName.isEmpty()) {
    addOwnerDomainAndNameAttributes(project, annotation);
  } else if (ownerDomain.isEmpty() && !ownerName.isEmpty()) {
    addOwnerDomainAttribute(project, annotation);
  } else if (!ownerDomain.isEmpty() && ownerName.isEmpty()) {
    addOwnerNameAttribute(project, annotation);
  }
}