package com.star.easydoc.service.variable.impl;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import com.intellij.openapi.components.ServiceManager;
import com.intellij.psi.PsiClassType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.star.easydoc.service.TranslatorService;
import com.star.easydoc.service.variable.VariableGenerator;

/**
 * @author <a href="mailto:[email protected]">wangchao</a>
 * @version 1.0.0
 * @since 2019-12-07 23:18:00
 */
public class ThrowsVariableGenerator implements VariableGenerator {
    private TranslatorService translatorService = ServiceManager.getService(TranslatorService.class);

    @Override
    public String generate(PsiElement element) {
        if (!(element instanceof PsiMethod)) {
            return "";
        }
        List<String> exceptionNameList = Arrays.stream(((PsiMethod)element).getThrowsList().getReferencedTypes())
            .map(PsiClassType::getName).collect(Collectors.toList());
        if (exceptionNameList.isEmpty()) {
            return "";
        }
        return exceptionNameList.stream()
            .map(name -> "@throws " + name + " " + translatorService.translate(name))
            .collect(Collectors.joining("\n"));
    }
}