当前位置: 首页>>代码示例>>Java>>正文


Java PsiUtil.typeParametersIterable方法代码示例

本文整理汇总了Java中com.intellij.psi.util.PsiUtil.typeParametersIterable方法的典型用法代码示例。如果您正苦于以下问题:Java PsiUtil.typeParametersIterable方法的具体用法?Java PsiUtil.typeParametersIterable怎么用?Java PsiUtil.typeParametersIterable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在com.intellij.psi.util.PsiUtil的用法示例。


在下文中一共展示了PsiUtil.typeParametersIterable方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: calcType

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
protected PsiClassType calcType() {
  final PsiElement classElement = myClass.getElement();
  if (!(classElement instanceof PsiClass)) return null;
  Map<PsiTypeParameter, PsiType> resurrected = new HashMap<PsiTypeParameter, PsiType>();
  final Set<Map.Entry<SmartPsiElementPointer, SmartTypePointer>> set = myMap.entrySet();
  for (Map.Entry<SmartPsiElementPointer, SmartTypePointer> entry : set) {
    PsiElement element = entry.getKey().getElement();
    if (element instanceof PsiTypeParameter) {
      SmartTypePointer typePointer = entry.getValue();
      resurrected.put((PsiTypeParameter)element, typePointer == null ? null : typePointer.getType());
    }
  }
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable((PsiClass)classElement)) {
    if (!resurrected.containsKey(typeParameter)) {
      resurrected.put(typeParameter, null);
    }
  }
  final PsiSubstitutor resurrectedSubstitutor = PsiSubstitutorImpl.createSubstitutor(resurrected);
  return new PsiImmediateClassType((PsiClass)classElement, resurrectedSubstitutor);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:SmartTypePointerManagerImpl.java

示例2: visitClassType

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
public SmartTypePointer visitClassType(PsiClassType classType) {
  final PsiClassType.ClassResolveResult resolveResult = classType.resolveGenerics();
  final PsiClass aClass = resolveResult.getElement();
  if (aClass == null) {
    return createClassReferenceTypePointer(classType);
  }
  if (classType instanceof PsiClassReferenceType) {
    classType = ((PsiClassReferenceType)classType).createImmediateCopy();
  }
  final PsiSubstitutor substitutor = resolveResult.getSubstitutor();
  final HashMap<SmartPsiElementPointer, SmartTypePointer> map = new HashMap<SmartPsiElementPointer, SmartTypePointer>();
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(aClass)) {
    final PsiType substitutionResult = substitutor.substitute(typeParameter);
    if (substitutionResult != null) {
      final SmartPsiElementPointer pointer = myPsiPointerManager.createSmartPsiElementPointer(typeParameter);
      map.put(pointer, substitutionResult.accept(this));
    }
  }
  return new ClassTypePointer(classType, myPsiPointerManager.createSmartPsiElementPointer(aClass), map);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:SmartTypePointerManagerImpl.java

示例3: getType

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@NotNull
@Override
public PsiType getType(PsiElement context, PsiManager manager) throws IncorrectOperationException {
  JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject());
  PsiElementFactory factory = facade.getElementFactory();

  PsiClass aClass = facade.getResolveHelper().resolveReferencedClass(myClassQName, context);
  if (aClass == null) {
    return factory.createTypeFromText(myClassQName, context);
  }

  Map<PsiTypeParameter, PsiType> substitutionMap = ContainerUtil.newHashMap();
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(aClass)) {
    Type substitute = mySubstitutor.get(typeParameter.getName());
    substitutionMap.put(typeParameter, substitute != null ? substitute.getType(context, manager) : null);
  }
  return factory.createType(aClass, factory.createSubstitutor(substitutionMap), null, myAnnotations);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:19,代码来源:CanonicalTypes.java

示例4: visitClassType

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Override
public Type visitClassType(PsiClassType type) {
  PsiClassType.ClassResolveResult resolveResult = type.resolveGenerics();
  PsiClass aClass = resolveResult.getElement();
  if (aClass instanceof PsiAnonymousClass) {
    return visitClassType(((PsiAnonymousClass)aClass).getBaseClassType());
  }
  else if (aClass == null) {
    return new UnresolvedType(type);
  }
  else {
    Map<String, Type> substitutionMap = ContainerUtil.newHashMap();
    PsiSubstitutor substitutor = resolveResult.getSubstitutor();
    for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(aClass)) {
      PsiType substitute = substitutor.substitute(typeParameter);
      substitutionMap.put(typeParameter.getName(), substitute != null ? substitute.accept(this) : null);
    }
    String qualifiedName = ObjectUtils.notNull(aClass.getQualifiedName(), aClass.getName());
    return new ClassType(type, qualifiedName, substitutionMap);
  }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:22,代码来源:CanonicalTypes.java

示例5: hasNonTrivialParameters

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
/**
 * Checks if the class type has any parameters which are not unbounded wildcards (and not extends-wildcard with the same bound as corresponding type parameter bound)
 * and do not have substituted arguments.
 *
 * @return true if the class type has nontrivial non-substituted parameters, false otherwise
 */
public boolean hasNonTrivialParameters() {
  final ClassResolveResult resolveResult = resolveGenerics();
  PsiClass aClass = resolveResult.getElement();
  if (aClass == null) return false;
  for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(aClass)) {
    PsiType type = resolveResult.getSubstitutor().substitute(parameter);
    if (type != null) {
      if (!(type instanceof PsiWildcardType)) {
        return true;
      }
      final PsiType bound = ((PsiWildcardType)type).getBound();
      if (bound != null) {
        if (((PsiWildcardType)type).isExtends()) {
          final PsiClass superClass = parameter.getSuperClass();
          if (superClass != null && PsiUtil.resolveClassInType(bound) == superClass) {
            continue;
          }
        }
        return true;
      }
    }
  }
  return false;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:31,代码来源:PsiClassType.java

示例6: calculateReplacementMap

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Nullable
private static Map<PsiTypeParameter, PsiTypeParameter> calculateReplacementMap(final PsiSubstitutor substitutor,
                                                                        final PsiClass targetClass,
                                                                        final PsiElement containingElement) {
  final HashMap<PsiTypeParameter, PsiTypeParameter> result = new HashMap<PsiTypeParameter, PsiTypeParameter>();
  for (PsiTypeParameter classTypeParameter : PsiUtil.typeParametersIterable(targetClass)) {
    final PsiType substitution = substitutor.substitute(classTypeParameter);
    if (!(substitution instanceof PsiClassType)) return null;
    final PsiClass aClass = ((PsiClassType)substitution).resolve();
    if (!(aClass instanceof PsiTypeParameter)) return null;
    final PsiTypeParameter methodTypeParameter = (PsiTypeParameter)aClass;
    if (methodTypeParameter.getOwner() != containingElement) return null;
    if (result.keySet().contains(methodTypeParameter)) return null;
    result.put(methodTypeParameter, classTypeParameter);
  }
  return result;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:18,代码来源:ConvertToInstanceMethodProcessor.java

示例7: createRawSubstitutor

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@NotNull
@Override
public PsiSubstitutor createRawSubstitutor(@NotNull final PsiTypeParameterListOwner owner) {
  Map<PsiTypeParameter, PsiType> substitutorMap = null;
  for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(owner)) {
    if (substitutorMap == null) substitutorMap = new HashMap<PsiTypeParameter, PsiType>();
    substitutorMap.put(parameter, null);
  }
  return PsiSubstitutorImpl.createSubstitutor(substitutorMap);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:11,代码来源:PsiElementFactoryImpl.java

示例8: advancedResolveImpl

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
private JavaResolveResult advancedResolveImpl(@NotNull PsiFile containingFile) {
  PsiTypeElement[] typeElements = myRefParameterList == null ? PsiTypeElement.EMPTY_ARRAY : myRefParameterList.getTypeParameterElements();
  PsiElement resolve = resolveElement(containingFile);
  if (resolve == null) return null;
  if (resolve instanceof PsiClass) {
    Map<PsiTypeParameter, PsiType> substitutionMap = new HashMap<PsiTypeParameter, PsiType>();
    int index = 0;
    for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable((PsiClass)resolve)) {
      if (index >= typeElements.length) {
        PsiTypeParameterListOwner parameterOwner = parameter.getOwner();
        if (parameterOwner == resolve) {
          substitutionMap.put(parameter, null);
        }
        else if (parameterOwner instanceof PsiClass) {
          PsiElement containingClass = myParent;
          while ((containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class, true)) != null) {
            PsiSubstitutor superClassSubstitutor =
              TypeConversionUtil.getClassSubstitutor((PsiClass)parameterOwner, (PsiClass)containingClass, PsiSubstitutor.EMPTY);
            if (superClassSubstitutor != null) {
              substitutionMap.put(parameter, superClassSubstitutor.substitute(parameter));
              break;
            }
          }
        }
      }
      else {
        substitutionMap.put(parameter, typeElements[index].getType());
      }
      index++;
    }
    collectOuterClassTypeArgs((PsiClass)resolve, myCanonicalText, substitutionMap);
    return new CandidateInfo(resolve, PsiSubstitutorImpl.createSubstitutor(substitutionMap));
  }
  else {
    return new CandidateInfo(resolve, PsiSubstitutor.EMPTY);
  }
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:38,代码来源:ClsJavaCodeReferenceElementImpl.java

示例9: composeSubstitutors

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@NotNull
private static PsiSubstitutor composeSubstitutors(PsiSubstitutor outer, PsiSubstitutor inner, PsiClass onClass) {
  PsiSubstitutor answer = PsiSubstitutor.EMPTY;
  Map<PsiTypeParameter, PsiType> outerMap = outer.getSubstitutionMap();
  Map<PsiTypeParameter, PsiType> innerMap = inner.getSubstitutionMap();
  for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(onClass)) {
    if (outerMap.containsKey(parameter) || innerMap.containsKey(parameter)) {
      answer = answer.put(parameter, outer.substitute(inner.substitute(parameter)));
    }
  }
  return answer;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:13,代码来源:JavaClassSupersImpl.java

示例10: hasParameters

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
/**
 * Checks if the class type has any parameters with no substituted arguments.
 *
 * @return true if the class type has non-substituted parameters, false otherwise
 */
public boolean hasParameters() {
  final ClassResolveResult resolveResult = resolveGenerics();
  PsiClass aClass = resolveResult.getElement();
  if (aClass == null) return false;
  boolean hasParams = false;
  for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(aClass)) {
    if (resolveResult.getSubstitutor().substitute(parameter) == null) return false;
    hasParams = true;
  }
  return hasParams;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:17,代码来源:PsiClassType.java

示例11: getInheritorSubstitutorForNewExpression

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Nullable
private static PsiSubstitutor getInheritorSubstitutorForNewExpression(final PsiClass baseClass, final PsiClass inheritor,
                                                                     final PsiSubstitutor baseSubstitutor, final PsiElement context) {
  final Project project = baseClass.getProject();
  JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
  final PsiResolveHelper resolveHelper = facade.getResolveHelper();
  PsiSubstitutor superSubstitutor = TypeConversionUtil.getClassSubstitutor(baseClass, inheritor, PsiSubstitutor.EMPTY);
  if (superSubstitutor == null) return null;
  PsiSubstitutor inheritorSubstitutor = PsiSubstitutor.EMPTY;
  for (PsiTypeParameter inheritorParameter : PsiUtil.typeParametersIterable(inheritor)) {
    for (PsiTypeParameter baseParameter : PsiUtil.typeParametersIterable(baseClass)) {
      final PsiType substituted = superSubstitutor.substitute(baseParameter);
      PsiType arg = baseSubstitutor.substitute(baseParameter);
      if (arg instanceof PsiWildcardType) arg = ((PsiWildcardType)arg).getBound();
      PsiType substitution =
        resolveHelper.getSubstitutionForTypeParameter(inheritorParameter, substituted, arg, true, PsiUtil.getLanguageLevel(context));
      if (PsiType.NULL.equals(substitution)) continue;
      if (substitution == null) {
        return facade.getElementFactory().createRawSubstitutor(inheritor);
      }
      inheritorSubstitutor = inheritorSubstitutor.put(inheritorParameter, substitution);
      break;
    }
  }

  return inheritorSubstitutor;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:28,代码来源:ChangeNewOperatorTypeFix.java

示例12: inferSubstitutor

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Nullable
public static PsiSubstitutor inferSubstitutor(final PsiMethod method, final PsiMethodCallExpression callExpr, boolean forCompletion) {
  final PsiResolveHelper helper = JavaPsiFacade.getInstance(method.getProject()).getResolveHelper();
  final PsiParameter[] parameters = method.getParameterList().getParameters();
  PsiExpression[] args = callExpr.getArgumentList().getExpressions();
  PsiSubstitutor result = PsiSubstitutor.EMPTY;
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(method.getContainingClass())) {
    PsiType type = helper.inferTypeForMethodTypeParameter(typeParameter, parameters, args, PsiSubstitutor.EMPTY, callExpr.getParent(),
                                                          forCompletion ? CompletionParameterTypeInferencePolicy.INSTANCE : DefaultParameterTypeInferencePolicy.INSTANCE);
    if (PsiType.NULL.equals(type)) return null;
    result = result.put(typeParameter, type);
  }

  return result;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:16,代码来源:ExpectedTypeUtil.java

示例13: createFactoryMethod

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
private PsiMethod createFactoryMethod() throws IncorrectOperationException {
  final PsiClass containingClass = getConstructorContainingClass();
  PsiClassType type = myFactory.createType(containingClass, PsiSubstitutor.EMPTY);
  final PsiMethod factoryMethod = myFactory.createMethod(myFactoryName, type);
  if (myConstructor != null) {
    factoryMethod.getParameterList().replace(myConstructor.getParameterList());
    factoryMethod.getThrowsList().replace(myConstructor.getThrowsList());
  }

  Collection<String> names = new HashSet<String>();
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(myConstructor != null ? myConstructor : containingClass)) {
    if (!names.contains(typeParameter.getName())) { //Otherwise type parameter is hidden in the constructor
      names.add(typeParameter.getName());
      factoryMethod.getTypeParameterList().addAfter(typeParameter, null);
    }
  }

  PsiReturnStatement returnStatement =
    (PsiReturnStatement)myFactory.createStatementFromText("return new A();", null);
  PsiNewExpression newExpression = (PsiNewExpression)returnStatement.getReturnValue();
  PsiJavaCodeReferenceElement classRef = myFactory.createReferenceElementByType(type);
  newExpression.getClassReference().replace(classRef);
  final PsiExpressionList argumentList = newExpression.getArgumentList();

  PsiParameter[] params = factoryMethod.getParameterList().getParameters();

  for (PsiParameter parameter : params) {
    PsiExpression paramRef = myFactory.createExpressionFromText(parameter.getName(), null);
    argumentList.add(paramRef);
  }
  factoryMethod.getBody().add(returnStatement);

  PsiUtil.setModifierProperty(factoryMethod, getDefaultFactoryVisibility(), true);

  if (!myIsInner) {
    PsiUtil.setModifierProperty(factoryMethod, PsiModifier.STATIC, true);
  }

  return (PsiMethod)CodeStyleManager.getInstance(myProject).reformat(factoryMethod);
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:41,代码来源:ReplaceConstructorWithFactoryProcessor.java

示例14: findTypeParameterInDerived

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
@Nullable
public static PsiTypeParameter findTypeParameterInDerived(final PsiClass aClass, final String name) {
  for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(aClass)) {
    if (name.equals(typeParameter.getName())) return typeParameter;
  }

  return null;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:9,代码来源:ExtractSuperClassUtil.java

示例15: isRaw

import com.intellij.psi.util.PsiUtil; //导入方法依赖的package包/类
private static boolean isRaw(PsiType t, final Settings settings, final boolean upper) {
  if (t instanceof PsiClassType) {
    final PsiClassType.ClassResolveResult resolveResult = resolveType(t);

    if (resolveResult.getElement() == null) {
      return false;
    }

    if (PsiClassType.isRaw(resolveResult)) {
      return true;
    }

    final PsiSubstitutor subst = resolveResult.getSubstitutor();
    final PsiClass element = resolveResult.getElement();
    final PsiManager manager = element.getManager();

    if (settings.cookObjects() && upper &&
        t.equals(PsiType.getJavaLangObject(manager, GlobalSearchScope.allScope(manager.getProject())))) {
      return true;
    }

    for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(element)) {
      final PsiType actual = subst.substitute(parameter);
      if (isRaw(actual, settings, false)) return true;
    }

    return false;
  }
  else if (t instanceof PsiArrayType) {
    return !settings.preserveRawArrays() && isRaw(((PsiArrayType)t).getComponentType(), settings, upper);
  }

  return false;
}
 
开发者ID:jskierbi,项目名称:intellij-ce-playground,代码行数:35,代码来源:Util.java


注:本文中的com.intellij.psi.util.PsiUtil.typeParametersIterable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。