android: remove module type, use java module + android facet instead

This commit is contained in:
Eugene Kudelevsky
2012-01-12 16:08:42 +04:00
parent ecdd093524
commit 91c75b1324
7 changed files with 112 additions and 178 deletions
+2 -2
View File
@@ -116,8 +116,7 @@
<facetType implementation="org.jetbrains.android.facet.AndroidFacetType"/>
<framework.detector implementation="org.jetbrains.android.facet.AndroidFrameworkDetector"/>
<fileTemplateGroup implementation="org.jetbrains.android.AndroidFileTemplateProvider"/>
<moduleType id="ANDROID_MODULE" implementationClass="org.jetbrains.android.newProject.AndroidModuleType" classpathProvider="true"/>
<moduleConfigurationEditorProvider implementation="org.jetbrains.android.newProject.AndroidModuleConfigurationEditorProvider"/>
<moduleBuilder builderClass="org.jetbrains.android.newProject.AndroidModuleBuilder"/>
<compiler implementation="org.jetbrains.android.compiler.AndroidIncludingCompiler"/>
<compiler implementation="org.jetbrains.android.compiler.AndroidRenderscriptCompiler"/>
@@ -151,6 +150,7 @@
<findUsagesHandlerFactory implementation="org.jetbrains.android.AndroidFindUsagesHandlerFactory"/>
<xml.schemaProvider implementation="org.jetbrains.android.AndroidXmlSchemaProvider"/>
<project.converterProvider implementation="org.jetbrains.android.converter.AndroidModuleConverterProvider"/>
<project.converterProvider implementation="org.jetbrains.android.converter.AndroidModuleToJavaModuleConverterProvider"/>
<annotator language="XML" implementationClass="org.jetbrains.android.AndroidColorAnnotator" order="first"/>
<xml.elementDescriptorProvider implementation="org.jetbrains.android.dom.AndroidDomElementDescriptorProvider" order="first"/>
@@ -0,0 +1,40 @@
package org.jetbrains.android.converter;
import com.intellij.conversion.*;
import org.jetbrains.annotations.NotNull;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidModuleToJavaModuleConverterProvider extends ConverterProvider {
public AndroidModuleToJavaModuleConverterProvider() {
super("android-module-to-java-module");
}
@NotNull
@Override
public String getConversionDescription() {
return "Android modules will be converted to Java modules with Android facet";
}
@NotNull
@Override
public ProjectConverter createConverter(@NotNull ConversionContext context) {
return new ProjectConverter() {
@Override
public ConversionProcessor<ModuleSettings> createModuleFileConverter() {
return new ConversionProcessor<ModuleSettings>() {
@Override
public boolean isConversionNeeded(ModuleSettings moduleSettings) {
return "ANDROID_MODULE".equals(moduleSettings.getModuleType());
}
@Override
public void process(ModuleSettings moduleSettings) throws CannotConvertException {
moduleSettings.setModuleType("JAVA_MODULE");
}
};
}
};
}
}
@@ -20,7 +20,6 @@ import com.intellij.facet.FacetType;
import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import org.jetbrains.android.newProject.AndroidModuleType;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -52,7 +51,7 @@ public class AndroidFacetType extends FacetType<AndroidFacet, AndroidFacetConfig
}
public boolean isSuitableModuleType(ModuleType moduleType) {
return moduleType instanceof JavaModuleType || moduleType instanceof AndroidModuleType;
return moduleType instanceof JavaModuleType;
}
public Icon getIcon() {
@@ -1,7 +1,6 @@
package org.jetbrains.android.importDependencies;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.StdModuleTypes;
@@ -11,7 +10,6 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.android.newProject.AndroidModuleType;
import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidUtils;
@@ -25,17 +25,21 @@ import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.GeneralCommandLine;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
import com.intellij.ide.util.projectWizard.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Computable;
@@ -57,14 +61,18 @@ import org.jetbrains.android.run.TargetSelectionMode;
import org.jetbrains.android.run.testing.AndroidTestRunConfiguration;
import org.jetbrains.android.run.testing.AndroidTestRunConfigurationType;
import org.jetbrains.android.sdk.AndroidPlatform;
import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import static com.android.sdklib.SdkConstants.FN_ANDROID_MANIFEST_XML;
@@ -574,7 +582,7 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
}
public ModuleType getModuleType() {
return AndroidModuleType.getInstance();
return StdModuleTypes.JAVA;
}
public void setTestedModule(Module module) {
@@ -588,4 +596,63 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
public void setPreferredAvd(String preferredAvd) {
myPreferredAvd = preferredAvd;
}
@Override
public ModuleWizardStep[] createWizardSteps(WizardContext wizardContext, ModulesProvider modulesProvider) {
List<ModuleWizardStep> steps = new ArrayList<ModuleWizardStep>();
ProjectWizardStepFactory factory = ProjectWizardStepFactory.getInstance();
steps.add(factory.createSourcePathsStep(wizardContext, this, null, "reference.dialogs.new.project.fromScratch.source"));
if (!hasAppropriateJdk()) {
steps.add(new ProjectJdkForModuleStep(wizardContext, JavaSdk.getInstance()) {
@Override
public void updateDataModel() {
// do nothing
}
@Override
public boolean validate() {
for (Object o : getAllJdks()) {
if (o instanceof Sdk) {
Sdk sdk = (Sdk)o;
if (AndroidSdkUtils.isApplicableJdk(sdk)) {
return true;
}
}
}
Messages.showErrorDialog(AndroidBundle.message("no.jdk.error"), CommonBundle.getErrorTitle());
return false;
}
});
}
steps.add(new AndroidModuleWizardStep(this, wizardContext));
return steps.toArray(new ModuleWizardStep[steps.size()]);
}
public Icon getBigIcon() {
return AndroidUtils.ANDROID_ICON_24;
}
public String getDescription() {
return AndroidBundle.message("android.module.type.description");
}
public String getPresentableName() {
return AndroidBundle.message("android.module.type.name");
}
@Override
public String getBuilderId() {
return getClass().getName();
}
private static boolean hasAppropriateJdk() {
for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
if (AndroidSdkUtils.isApplicableJdk(sdk)) {
return true;
}
}
return false;
}
}
@@ -1,50 +0,0 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.android.newProject;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider;
import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState;
import com.intellij.openapi.roots.ui.configuration.DefaultModuleConfigurationEditorFactory;
import com.intellij.openapi.module.ModuleConfigurationEditor;
import com.intellij.openapi.module.Module;
import java.util.List;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* User: Eugene.Kudelevsky
* Date: Jun 27, 2009
* Time: 6:34:42 PM
* To change this template use File | Settings | File Templates.
*/
public class AndroidModuleConfigurationEditorProvider implements ModuleConfigurationEditorProvider {
public ModuleConfigurationEditor[] createEditors(ModuleConfigurationState state) {
final Module module = state.getRootModel().getModule();
if (ModuleType.get(module) != AndroidModuleType.getInstance()) {
return ModuleConfigurationEditor.EMPTY;
}
final DefaultModuleConfigurationEditorFactory editorFactory = DefaultModuleConfigurationEditorFactory.getInstance();
List<ModuleConfigurationEditor> editors = new ArrayList<ModuleConfigurationEditor>();
editors.add(editorFactory.createModuleContentRootsEditor(state));
editors.add(editorFactory.createOutputEditor(state));
editors.add(editorFactory.createClasspathEditor(state));
return editors.toArray(new ModuleConfigurationEditor[editors.size()]);
}
}
@@ -1,120 +0,0 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.android.newProject;
import com.intellij.CommonBundle;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.ProjectJdkForModuleStep;
import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.ModuleTypeManager;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.ui.Messages;
import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidUtils;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Eugene.Kudelevsky
* Date: Jun 26, 2009
* Time: 7:30:12 PM
* To change this template use File | Settings | File Templates.
*/
public class AndroidModuleType extends ModuleType<AndroidModuleBuilder> {
public static final String MODULE_TYPE_ID = "ANDROID_MODULE";
public AndroidModuleType() {
super(MODULE_TYPE_ID);
}
public static AndroidModuleType getInstance() {
return (AndroidModuleType)ModuleTypeManager.getInstance().findByID(MODULE_TYPE_ID);
}
public AndroidModuleBuilder createModuleBuilder() {
return new AndroidModuleBuilder();
}
@Override
public ModuleWizardStep[] createWizardSteps(final WizardContext wizardContext,
final AndroidModuleBuilder moduleBuilder,
ModulesProvider modulesProvider) {
List<ModuleWizardStep> steps = new ArrayList<ModuleWizardStep>();
ProjectWizardStepFactory factory = ProjectWizardStepFactory.getInstance();
steps.add(factory.createSourcePathsStep(wizardContext, moduleBuilder, null, "reference.dialogs.new.project.fromScratch.source"));
if (!hasAppropriateJdk()) {
steps.add(new ProjectJdkForModuleStep(wizardContext, JavaSdk.getInstance()) {
@Override
public void updateDataModel() {
// do nothing
}
@Override
public boolean validate() {
for (Object o : getAllJdks()) {
if (o instanceof Sdk) {
Sdk sdk = (Sdk)o;
if (AndroidSdkUtils.isApplicableJdk(sdk)) {
return true;
}
}
}
Messages.showErrorDialog(AndroidBundle.message("no.jdk.error"), CommonBundle.getErrorTitle());
return false;
}
});
}
steps.add(new AndroidModuleWizardStep(moduleBuilder, wizardContext));
return steps.toArray(new ModuleWizardStep[steps.size()]);
}
private static boolean hasAppropriateJdk() {
for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
if (AndroidSdkUtils.isApplicableJdk(sdk)) {
return true;
}
}
return false;
}
public String getName() {
return AndroidBundle.message("android.module.type.name");
}
public String getDescription() {
return AndroidBundle.message("android.module.type.description");
}
public Icon getBigIcon() {
return AndroidUtils.ANDROID_ICON_24;
}
public Icon getNodeIcon(boolean isOpened) {
return AndroidUtils.ANDROID_ICON;
}
}