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 extends ComponentWithBrowseButton>> labeledComponent,
+ BrowseModuleValueActionListener browser) {
browser.setField(labeledComponent.getComponent());
}