package com.lightd.ideap.maven.execution; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.ide.highlighter.JavaFileType; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.lightd.ideap.maven.MvnBundle; import java.util.Collection; public abstract class JavaElementConfigurationProducer extends MavenModuleConfigurationProducer { protected PsiClass psiClass; protected PsiPackage psiPackage; @Override protected boolean initContext(ConfigurationContext context) { psiClass = null; psiPackage = null; if (super.initContext(context) && mavenProject!= null) { psiClass = getPsiClass(); if (psiClass == null) { psiPackage = getPsiPackage(context.getDataContext()); } return true; } return false; } @Override protected String generateName() { return psiClass.getName(); } private PsiClass getPsiClass() { if (psiFile != null && JavaFileType.INSTANCE.equals(psiFile.getFileType())) { PsiJavaFile psiJavaFile = (PsiJavaFile) psiFile.getContainingFile(); String name = getJavaClassName(psiJavaFile.getPackageName(), psiJavaFile.getName()); Project project = psiFile.getProject(); return JavaPsiFacade.getInstance(project).findClass(name, GlobalSearchScope.projectScope(project)); } return null; } private PsiPackage getPsiPackage(DataContext dataContext) { PsiElement psiElement = CommonDataKeys.PSI_ELEMENT.getData(dataContext); if (psiElement instanceof PsiDirectory) { return JavaDirectoryService.getInstance().getPackage((PsiDirectory) psiElement); } return null; } protected final String findByPrefix(Collection<String> collection, String prefix) { for (String parameter : collection) { if (parameter.startsWith(prefix)) { return parameter; } } return ""; } protected String getJavaClassName(String packageName, String className) { String name = MvnBundle.message("java.class.name", packageName, className); if (name.startsWith(".")) name = name.substring(1); if (name.endsWith(".java")) { name = name.substring(0, name.length() - 5); } return name; } }