From 4d9f2ecae0d6c1ec6792295fd9435d4eabc2af01 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Tue, 10 Jul 2012 19:03:45 +0400 Subject: [PATCH] migrate fields for classes and packages to EditorTextFieldWithBrowseButton --- .../run/AndroidClassVisibilityChecker.java | 52 +++++++++++++++++++ .../android/run/ApplicationRunParameters.form | 14 ++--- .../android/run/ApplicationRunParameters.java | 15 +++++- .../run/testing/TestRunParameters.form | 6 +-- .../run/testing/TestRunParameters.java | 28 +++++++--- 5 files changed, 96 insertions(+), 19 deletions(-) create mode 100644 plugins/android/src/org/jetbrains/android/run/AndroidClassVisibilityChecker.java diff --git a/plugins/android/src/org/jetbrains/android/run/AndroidClassVisibilityChecker.java b/plugins/android/src/org/jetbrains/android/run/AndroidClassVisibilityChecker.java new file mode 100644 index 000000000000..b082b1df41e1 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/run/AndroidClassVisibilityChecker.java @@ -0,0 +1,52 @@ +package org.jetbrains.android.run; + +import com.intellij.execution.ui.ConfigurationModuleSelector; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; + +/** + * @author Eugene.Kudelevsky + */ +public class AndroidClassVisibilityChecker implements JavaCodeFragment.VisibilityChecker { + private final Project myProject; + private final ConfigurationModuleSelector myModuleSelector; + private final String myBaseClassName; + + public AndroidClassVisibilityChecker(@NotNull Project project, + @NotNull ConfigurationModuleSelector moduleSelector, + @NotNull String baseClassName) { + myProject = project; + myModuleSelector = moduleSelector; + myBaseClassName = baseClassName; + } + + + @Override + public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) { + if (!(declaration instanceof PsiClass)) { + return Visibility.NOT_VISIBLE; + } + + final Module module = myModuleSelector.getModule(); + if (module == null) { + return Visibility.NOT_VISIBLE; + } + + final PsiFile file = declaration.getContainingFile(); + final VirtualFile vFile = file != null ? file.getVirtualFile() : null; + if (vFile == null) { + return Visibility.NOT_VISIBLE; + } + + final JavaPsiFacade facade = JavaPsiFacade.getInstance(myProject); + final PsiClass baseClass = facade.findClass(myBaseClassName, module.getModuleWithDependenciesAndLibrariesScope(true)); + if (baseClass == null || + !((PsiClass)declaration).isInheritor(baseClass, true)) { + return Visibility.NOT_VISIBLE; + } + return Visibility.VISIBLE; + } +} diff --git a/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.form b/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.form index 8ff907f89602..eb13d3a589f8 100644 --- a/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.form +++ b/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.form @@ -8,12 +8,6 @@ - - - - - - @@ -24,7 +18,7 @@ - + @@ -46,6 +40,12 @@ + + + + + + diff --git a/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.java b/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.java index 2daeed5fcbb9..1787a5d0cd9c 100644 --- a/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.java +++ b/plugins/android/src/org/jetbrains/android/run/ApplicationRunParameters.java @@ -23,10 +23,10 @@ import com.intellij.ide.util.TreeClassChooserFactory; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.search.ProjectScope; +import com.intellij.ui.EditorTextFieldWithBrowseButton; import org.jetbrains.android.util.AndroidBundle; import org.jetbrains.android.util.AndroidUtils; @@ -43,14 +43,19 @@ import java.awt.event.ActionListener; * To change this template use File | Settings | File Templates. */ class ApplicationRunParameters implements ConfigurationSpecificEditor { - private TextFieldWithBrowseButton myActivityField; + private EditorTextFieldWithBrowseButton myActivityField; private JRadioButton myLaunchDefaultButton; private JRadioButton myLaunchCustomButton; private JPanel myPanel; private JRadioButton myDoNothingButton; private JCheckBox myDeployAndInstallCheckBox; + private final Project myProject; + private final ConfigurationModuleSelector myModuleSelector; ApplicationRunParameters(final Project project, final ConfigurationModuleSelector moduleSelector) { + myProject = project; + myModuleSelector = moduleSelector; + myActivityField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (!project.isInitialized()) { @@ -130,4 +135,10 @@ class ApplicationRunParameters implements ConfigurationSpecificEditor - + @@ -77,7 +77,7 @@ - + @@ -97,7 +97,7 @@ - + diff --git a/plugins/android/src/org/jetbrains/android/run/testing/TestRunParameters.java b/plugins/android/src/org/jetbrains/android/run/testing/TestRunParameters.java index f444085fef63..d9d3cfc7dc06 100644 --- a/plugins/android/src/org/jetbrains/android/run/testing/TestRunParameters.java +++ b/plugins/android/src/org/jetbrains/android/run/testing/TestRunParameters.java @@ -24,14 +24,17 @@ import com.intellij.execution.ui.ConfigurationModuleSelector; import com.intellij.ide.util.PackageChooserDialog; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.ComponentWithBrowseButton; import com.intellij.openapi.ui.LabeledComponent; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; +import com.intellij.ui.EditorTextFieldWithBrowseButton; import com.intellij.ui.components.JBLabel; import org.jetbrains.android.run.AndroidClassBrowser; +import org.jetbrains.android.run.AndroidClassVisibilityChecker; import org.jetbrains.android.run.ConfigurationSpecificEditor; import org.jetbrains.android.util.AndroidBundle; import org.jetbrains.android.util.AndroidUtils; @@ -57,11 +60,11 @@ class TestRunParameters implements ConfigurationSpecificEditor myPackageComponent; - private LabeledComponent myClassComponent; + private LabeledComponent myPackageComponent; + private LabeledComponent myClassComponent; private LabeledComponent myMethodComponent; private JPanel myPanel; - private LabeledComponent myRunnerComponent; + private LabeledComponent myRunnerComponent; private JBLabel myLabelTest; private final JRadioButton[] myTestingType2RadioButton = new JRadioButton[4]; @@ -72,13 +75,23 @@ class TestRunParameters implements ConfigurationSpecificEditor labeledComponent, BrowseModuleValueActionListener browser) { + private static void bind(final LabeledComponent> labeledComponent, + BrowseModuleValueActionListener browser) { browser.setField(labeledComponent.getComponent()); }