Ejemplo n.º 1
0
 /**
  * @see
  *     com.intellij.psi.util.TypeConversionUtil#typeParameterErasure(com.intellij.psi.PsiTypeParameter)
  */
 @Nullable
 private static JavaType typeParameterErasure(
     @NotNull JavaTypeParameter typeParameter,
     @NotNull HashSet<JavaTypeParameter> visited,
     @NotNull JavaTypeSubstitutor substitutor) {
   Collection<JavaClassifierType> upperBounds = typeParameter.getUpperBounds();
   if (!upperBounds.isEmpty()) {
     JavaClassifier classifier = upperBounds.iterator().next().getClassifier();
     if (classifier instanceof JavaTypeParameter && !visited.contains(classifier)) {
       JavaTypeParameter typeParameterBound = (JavaTypeParameter) classifier;
       visited.add(typeParameterBound);
       JavaType substitutedType = substitutor.substitute(typeParameterBound);
       if (substitutedType != null) {
         return erasure(substitutedType);
       }
       return typeParameterErasure(typeParameterBound, visited, substitutor);
     } else if (classifier instanceof JavaClass) {
       return ((JavaClass) classifier).getDefaultType();
     }
   }
   return typeParameter.getTypeProvider().createJavaLangObjectType();
 }