package com.intellij.lang.javascript.validation.fixes; import com.intellij.ide.util.PlatformPackageUtil; import com.intellij.lang.LanguageNamesValidation; import com.intellij.lang.javascript.JSBundle; import com.intellij.lang.javascript.JavascriptLanguage; import com.intellij.lang.javascript.refactoring.ui.JSReferenceEditor; import com.intellij.lang.javascript.refactoring.util.JSRefactoringUtil; import com.intellij.lang.refactoring.NamesValidator; import com.intellij.openapi.module.Module; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.RefactoringBundle; import com.intellij.util.ThreeState; import javax.swing.*; public class ChoosePackageDialog extends DialogWrapper{ private static final String DESTINATION_PACKAGE_RECENT_KEY = "ChoosePackageDialog.DESTINATION_PACKAGE_RECENT_KEY"; private JPanel myMainPanel; private JSReferenceEditor myPackageCombo; private final Module myModule; private final String myPackageNameInitial; private final PsiFile myContextFile; private PsiDirectory myTargetDirectory; protected ChoosePackageDialog(final Module module, final String title, final String packageNameInitial, final PsiFile contextFile) { super(module.getProject()); myModule = module; myPackageNameInitial = packageNameInitial; myContextFile = contextFile; setTitle(title); init(); } public JComponent getPreferredFocusedComponent() { return myPackageCombo.getChildComponent(); } protected JComponent createCenterPanel() { return myMainPanel; } protected void doOKAction() { final NamesValidator namesValidator = LanguageNamesValidation.INSTANCE.forLanguage(JavascriptLanguage.INSTANCE); final String packageName = getPackageName(); for (final String s : StringUtil.split(packageName, ".")) { if (!namesValidator.isIdentifier(s, null)) { setErrorText(JSBundle.message("invalid.package", packageName), myPackageCombo); return; } } myPackageCombo.updateRecents(); myTargetDirectory = JSRefactoringUtil.chooseOrCreateDirectoryForClass(myModule.getProject(), myModule, getPackageScope(), packageName, null, myContextFile.getParent(), ThreeState.UNSURE); if (myTargetDirectory != null) { super.doOKAction(); } } private GlobalSearchScope getPackageScope() { return PlatformPackageUtil.adjustScope(myContextFile.getParent(), GlobalSearchScope.moduleWithDependenciesScope(myModule), false, true); } private void createUIComponents() { myPackageCombo = JSReferenceEditor.forPackageName(myPackageNameInitial, myModule.getProject(), DESTINATION_PACKAGE_RECENT_KEY, getPackageScope(), RefactoringBundle.message("choose.destination.package")); } public String getPackageName() { return myPackageCombo.getText().trim(); } public PsiDirectory getTargetDirectory() { return myTargetDirectory; } }