PsiClass (@NotNull Project project, @NotNull PsiClass fromClass) { final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); PsiClass resultClass = elementFactory.createClass(StringUtil.defaultIfEmpty(fromClass.getName(), "UnknownClassName")); copyModifiers(fromClass.getModifierList(), resultClass.getModifierList()); copyAnnotations(fromClass.getModifierList(), resultClass.getModifierList()); rebuildTypeParameter(fromClass, resultClass); // rebuild extends part final PsiReferenceList extendsList = fromClass.getExtendsList(); final PsiReferenceList resultExtendsList = resultClass.getExtendsList(); if (null != extendsList && null != resultExtendsList) { Stream.of(extendsList.getReferencedTypes()).map(elementFactory::createReferenceElementByType).forEach(resultExtendsList::add); } for (PsiField psiField : fromClass.getFields()) { resultClass.add(rebuildField(project, psiField)); } for (PsiMethod psiMethod : fromClass.getMethods()) { resultClass.add(rebuildMethod(project, psiMethod)); } return resultClass; }