new framework detection: migrating facet detectors

This commit is contained in:
nik
2011-08-08 13:18:54 +04:00
parent f27a333212
commit f4be3f2a23
14 changed files with 157 additions and 111 deletions
@@ -311,7 +311,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp
myType = type;
}
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter,
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final OldFileContentPattern fileContentFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myHasDetectors = true;
@@ -321,7 +321,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp
facetDetector, selector));
}
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter,
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final OldFileContentPattern fileContentFilter,
@NotNull final Condition<PsiFile> psiFileFilter, @NotNull final FacetDetector<PsiFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myHasDetectors = true;
@@ -37,7 +37,7 @@ public class FacetByPsiFileDetectorWrapper<C extends FacetConfiguration, F exten
private final Condition<PsiFile> myPsiFileFilter;
public FacetByPsiFileDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType<F, C> facetType,
final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern,
final FacetDetector<PsiFile, C> facetDetector,
Condition<PsiFile> psiFileFilter, final UnderlyingFacetSelector<VirtualFile, U> selector) {
super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector);
@@ -34,7 +34,7 @@ import org.jetbrains.annotations.Nullable;
*/
public class FacetByVirtualFileDetectorWrapper<C extends FacetConfiguration, F extends Facet<C>, U extends FacetConfiguration> extends FacetDetectorWrapper<VirtualFile, C, F, U> {
public FacetByVirtualFileDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType<F, C> facetType,
final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern,
final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector);
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
* @author nik
*/
public interface FacetDetectorForWizardRegistry<C extends FacetConfiguration> {
<U extends FacetConfiguration> void register(final FileType fileType, @NotNull final FileContentPattern fileContentPattern,
<U extends FacetConfiguration> void register(final FileType fileType, @NotNull final OldFileContentPattern fileContentPattern,
final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector);
}
@@ -52,26 +52,26 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
}
public void registerUniversalDetectorByRootTag(@NotNull final String rootTag, @NotNull final FacetDetector<VirtualFile, C> detector) {
registerUniversalDetector(StdFileTypes.XML, FileContentPattern.fileContent().xmlWithRootTag(rootTag), detector, null);
registerUniversalDetector(StdFileTypes.XML, OldFileContentPattern.fileContent().xmlWithRootTag(rootTag), detector, null);
}
public <U extends FacetConfiguration> void registerUniversalDetectorByFileNameAndRootTag(@NotNull @NonNls String fileName,
@NotNull @NonNls String rootTag,
@NotNull final FacetDetector<VirtualFile, C> detector,
@Nullable UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
registerUniversalDetector(StdFileTypes.XML, FileContentPattern.fileContent().withName(fileName).xmlWithRootTag(rootTag), detector, underlyingFacetSelector);
registerUniversalDetector(StdFileTypes.XML, OldFileContentPattern.fileContent().withName(fileName).xmlWithRootTag(rootTag), detector, underlyingFacetSelector);
}
public void registerDetectorForWizard(@NotNull final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter, @NotNull final FacetDetector<VirtualFile, C> facetDetector) {
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, FileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
myForWizardDelegate.register(fileType, OldFileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
}
}
public void registerDetectorForWizard(@NotNull final FileType fileType, @NotNull final VirtualFilePattern virtualFilePattern,
@NotNull final FacetDetector<VirtualFile, C> facetDetector) {
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, null);
myForWizardDelegate.register(fileType, OldFileContentPattern.byFilePattern(virtualFilePattern), facetDetector, null);
}
}
@@ -79,7 +79,7 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
@NotNull final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
myForWizardDelegate.register(fileType, OldFileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
}
}
@@ -90,7 +90,7 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
@NotNull final FacetDetector<PsiFile, C> facetDetector,
@Nullable UnderlyingFacetSelector<VirtualFile, U> selector) {
if (myOnTheFlyDelegate != null) {
myOnTheFlyDelegate.register(fileType, FileContentPattern.byFilter(virtualFileFilter), psiFileFilter, facetDetector, selector);
myOnTheFlyDelegate.register(fileType, OldFileContentPattern.byFilter(virtualFileFilter), psiFileFilter, facetDetector, selector);
}
}
@@ -125,11 +125,11 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
}
public void registerUniversalDetector(@NotNull final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter, @NotNull final FacetDetector<VirtualFile, C> facetDetector) {
registerUniversalDetector(fileType, FileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
registerUniversalDetector(fileType, OldFileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
}
public <U extends FacetConfiguration> void registerUniversalDetector(@NotNull final FileType fileType,
@NotNull final FileContentPattern fileContentFilter,
@NotNull final OldFileContentPattern fileContentFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
if (myForWizardDelegate != null) {
@@ -143,7 +143,7 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
public <U extends FacetConfiguration> void registerUniversalSubFacetDetector(@NotNull final FileType fileType, @NotNull final VirtualFilePattern virtualFilePattern,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
registerUniversalDetector(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
registerUniversalDetector(fileType, OldFileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
}
private static class MyPatternFilter implements VirtualFileFilter {
@@ -40,13 +40,13 @@ import java.util.Map;
public abstract class FacetDetectorWrapper<S, C extends FacetConfiguration, F extends Facet<C>, U extends FacetConfiguration> {
private static final Logger LOG = Logger.getInstance("#com.intellij.facet.impl.autodetecting.FacetDetectorWrapper");
private final AutodetectionFilter myAutodetectionFilter;
private final FileContentPattern myFileContentPattern;
private final OldFileContentPattern myFileContentPattern;
private final FacetDetector<S,C> myFacetDetector;
private final UnderlyingFacetSelector<VirtualFile, U> myUnderlyingFacetSelector;
private final ProjectFacetInfoSet myDetectedFacetSet;
private final FacetType<F,C> myFacetType;
protected FacetDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType<F, C> facetType, final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
protected FacetDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType<F, C> facetType, final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern,
final FacetDetector<S, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myDetectedFacetSet = projectFacetSet;
@@ -57,7 +57,7 @@ public abstract class FacetDetectorWrapper<S, C extends FacetConfiguration, F ex
myUnderlyingFacetSelector = selector;
}
public FileContentPattern getFileContentPattern() {
public OldFileContentPattern getFileContentPattern() {
return myFileContentPattern;
}
@@ -30,11 +30,11 @@ import org.jetbrains.annotations.NotNull;
*/
public interface FacetOnTheFlyDetectorRegistry<C extends FacetConfiguration> {
<U extends FacetConfiguration>
void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern,
void register(@NotNull FileType fileType, @NotNull OldFileContentPattern fileContentPattern,
@NotNull FacetDetector<VirtualFile, C> detector, UnderlyingFacetSelector<VirtualFile, U> selector);
<U extends FacetConfiguration>
void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern,
void register(@NotNull FileType fileType, @NotNull OldFileContentPattern fileContentPattern,
@NotNull Condition<PsiFile> psiFileFilter, @NotNull FacetDetector<PsiFile, C> detector,
UnderlyingFacetSelector<VirtualFile, U> selector);
}
@@ -30,16 +30,16 @@ import java.io.IOException;
/**
* @author nik
*/
public class FileContentPattern extends ObjectPattern<FileContent, FileContentPattern> {
public FileContentPattern() {
public class OldFileContentPattern extends ObjectPattern<FileContent, OldFileContentPattern> {
public OldFileContentPattern() {
super(FileContent.class);
}
public static FileContentPattern fileContent() {
return new FileContentPattern();
public static OldFileContentPattern fileContent() {
return new OldFileContentPattern();
}
public FileContentPattern withName(@NotNull final String name) {
public OldFileContentPattern withName(@NotNull final String name) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -48,7 +48,7 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public FileContentPattern withName(final StringPattern namePattern) {
public OldFileContentPattern withName(final StringPattern namePattern) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -57,7 +57,7 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public FileContentPattern inDirectory(final @NotNull String name) {
public OldFileContentPattern inDirectory(final @NotNull String name) {
return with(new PatternCondition<FileContent>("inDirectory") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -66,7 +66,7 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public FileContentPattern xmlWithRootTag(@NotNull final String rootTag) {
public OldFileContentPattern xmlWithRootTag(@NotNull final String rootTag) {
return with(new PatternCondition<FileContent>("withRootTag") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -80,11 +80,11 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public FileContentPattern xmlWithRootTagNamespace(final String namespace) {
public OldFileContentPattern xmlWithRootTagNamespace(final String namespace) {
return xmlWithRootTagNamespace(StandardPatterns.string().equalTo(namespace));
}
public FileContentPattern xmlWithRootTagNamespace(final ElementPattern<String> namespacePattern) {
public OldFileContentPattern xmlWithRootTagNamespace(final ElementPattern<String> namespacePattern) {
return with(new PatternCondition<FileContent>("xmlWithRootTagNamespace") {
public boolean accepts(@NotNull final FileContent fileContent, final ProcessingContext context) {
try {
@@ -98,7 +98,7 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public static FileContentPattern byFilter(@NotNull final VirtualFileFilter filter) {
public static OldFileContentPattern byFilter(@NotNull final VirtualFileFilter filter) {
return fileContent().with(new PatternCondition<FileContent>("withFileFilter") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -107,7 +107,7 @@ public class FileContentPattern extends ObjectPattern<FileContent, FileContentPa
});
}
public static FileContentPattern byFilePattern(@NotNull final VirtualFilePattern pattern) {
public static OldFileContentPattern byFilePattern(@NotNull final VirtualFilePattern pattern) {
return fileContent().with(new PatternCondition<FileContent>("withFilePattern") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -21,7 +21,7 @@ import com.intellij.facet.autodetecting.FacetDetector;
import com.intellij.facet.autodetecting.UnderlyingFacetSelector;
import com.intellij.facet.impl.autodetecting.FacetDetectorForWizardRegistry;
import com.intellij.facet.impl.autodetecting.FacetDetectorRegistryEx;
import com.intellij.facet.impl.autodetecting.FileContentPattern;
import com.intellij.facet.impl.autodetecting.OldFileContentPattern;
import com.intellij.ide.caches.FileContent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
@@ -129,11 +129,11 @@ public class FacetDetectionProcessor {
private class MyFacetDetectorWrapper<C extends FacetConfiguration, U extends FacetConfiguration> {
private final FacetType<?, C> myFacetType;
private final FileType myFileType;
private final FileContentPattern myFileContentPattern;
private final OldFileContentPattern myFileContentPattern;
private final FacetDetector<VirtualFile, C> myDetector;
private final UnderlyingFacetSelector<VirtualFile, U> myUnderlyingFacetSelector;
public MyFacetDetectorWrapper(final FacetType<?, C> facetType, final FileType fileType, final FileContentPattern fileContentFilter, final FacetDetector<VirtualFile, C> detector,
public MyFacetDetectorWrapper(final FacetType<?, C> facetType, final FileType fileType, final OldFileContentPattern fileContentFilter, final FacetDetector<VirtualFile, C> detector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
myUnderlyingFacetSelector = underlyingFacetSelector;
myFacetType = facetType;
@@ -225,7 +225,7 @@ public class FacetDetectionProcessor {
myLevel=level;
}
public <U extends FacetConfiguration> void register(final FileType fileType, @NotNull final FileContentPattern fileContentPattern, final FacetDetector<VirtualFile, C> facetDetector,
public <U extends FacetConfiguration> void register(final FileType fileType, @NotNull final OldFileContentPattern fileContentPattern, final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
if (myFacetType.getUnderlyingFacetType() != null) {
LOG.assertTrue(underlyingFacetSelector != null, "UnderlyingFacetSelector must be specified for " + myFacetType.getPresentableName() + " detector");
@@ -19,11 +19,15 @@ import com.intellij.facet.Facet;
import com.intellij.facet.FacetConfiguration;
import com.intellij.facet.FacetType;
import com.intellij.framework.FrameworkType;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -38,8 +42,19 @@ public abstract class FacetBasedFrameworkDetector<F extends Facet, C extends Fac
public abstract FacetType<F, C> getFacetType();
@NotNull
public abstract List<Pair<C,Collection<VirtualFile>>> createConfigurations(@NotNull Collection<VirtualFile> files,
@NotNull Collection<C> existentFacetConfigurations);
public List<Pair<C,Collection<VirtualFile>>> createConfigurations(@NotNull Collection<VirtualFile> files,
@NotNull Collection<C> existentFacetConfigurations) {
final C configuration = createConfiguration(files);
if (configuration != null) {
return Collections.singletonList(Pair.create(configuration, files));
}
return Collections.emptyList();
}
@Nullable
protected C createConfiguration(Collection<VirtualFile> files) {
return getFacetType().createDefaultConfiguration();
}
public void setupFacet(@NotNull F facet) {
}
@@ -58,4 +73,10 @@ public abstract class FacetBasedFrameworkDetector<F extends Facet, C extends Fac
public boolean isSuitableUnderlyingFacetConfiguration(FacetConfiguration underlying, C configuration, Set<VirtualFile> files) {
return true;
}
@NotNull
@Override
public FileType getFileType() {
return StdFileTypes.XML;
}
}
@@ -28,17 +28,16 @@ import java.io.IOException;
/**
* @author nik
*/
//todo[nik] remove old FileContentPattern and rename this class
public class NewFileContentPattern extends ObjectPattern<FileContent, NewFileContentPattern> {
private NewFileContentPattern() {
public class FileContentPattern extends ObjectPattern<FileContent, FileContentPattern> {
private FileContentPattern() {
super(FileContent.class);
}
public static NewFileContentPattern fileContent() {
return new NewFileContentPattern();
public static FileContentPattern fileContent() {
return new FileContentPattern();
}
public NewFileContentPattern withName(@NotNull final String name) {
public FileContentPattern withName(@NotNull final String name) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -47,7 +46,7 @@ public class NewFileContentPattern extends ObjectPattern<FileContent, NewFileCon
});
}
public NewFileContentPattern withName(final StringPattern namePattern) {
public FileContentPattern withName(final StringPattern namePattern) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -56,7 +55,7 @@ public class NewFileContentPattern extends ObjectPattern<FileContent, NewFileCon
});
}
public NewFileContentPattern inDirectory(final @NotNull String name) {
public FileContentPattern inDirectory(final @NotNull String name) {
return with(new PatternCondition<FileContent>("inDirectory") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -65,7 +64,7 @@ public class NewFileContentPattern extends ObjectPattern<FileContent, NewFileCon
});
}
public NewFileContentPattern xmlWithRootTag(@NotNull final String rootTag) {
public FileContentPattern xmlWithRootTag(@NotNull final String rootTag) {
return with(new PatternCondition<FileContent>("withRootTag") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
@@ -79,11 +78,11 @@ public class NewFileContentPattern extends ObjectPattern<FileContent, NewFileCon
});
}
public NewFileContentPattern xmlWithRootTagNamespace(final String namespace) {
public FileContentPattern xmlWithRootTagNamespace(final String namespace) {
return xmlWithRootTagNamespace(StandardPatterns.string().equalTo(namespace));
}
public NewFileContentPattern xmlWithRootTagNamespace(final ElementPattern<String> namespacePattern) {
public FileContentPattern xmlWithRootTagNamespace(final ElementPattern<String> namespacePattern) {
return with(new PatternCondition<FileContent>("xmlWithRootTagNamespace") {
public boolean accepts(@NotNull final FileContent fileContent, final ProcessingContext context) {
try {
+1
View File
@@ -108,6 +108,7 @@
<configurationType implementation="org.jetbrains.android.run.testing.AndroidTestRunConfigurationType"/>
<programRunner implementation="org.jetbrains.android.run.AndroidDebugRunner"/>
<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"/>
@@ -15,30 +15,17 @@
*/
package org.jetbrains.android.facet;
import com.android.sdklib.SdkConstants;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetType;
import com.intellij.facet.autodetecting.FacetDetector;
import com.intellij.facet.autodetecting.FacetDetectorRegistry;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileFilter;
import org.jetbrains.android.dom.manifest.Manifest;
import org.jetbrains.android.importDependencies.ImportDependenciesUtil;
import org.jetbrains.android.newProject.AndroidModuleType;
import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Collection;
/**
* @author yole
@@ -68,56 +55,6 @@ public class AndroidFacetType extends FacetType<AndroidFacet, AndroidFacetConfig
return moduleType instanceof JavaModuleType || moduleType instanceof AndroidModuleType;
}
public void registerDetectors(FacetDetectorRegistry<AndroidFacetConfiguration> detectorRegistry) {
FacetDetector<VirtualFile, AndroidFacetConfiguration> detector = new FacetDetector<VirtualFile, AndroidFacetConfiguration>() {
public AndroidFacetConfiguration detectFacet(VirtualFile source, Collection<AndroidFacetConfiguration> existentFacetConfigurations) {
if (!existentFacetConfigurations.isEmpty()) {
return existentFacetConfigurations.iterator().next();
}
return createDefaultConfiguration();
}
@Override
public void afterFacetAdded(@NotNull final Facet facet) {
if (facet instanceof AndroidFacet) {
final Module module = facet.getModule();
final Project project = module.getProject();
ImportDependenciesUtil.importDependencies(module, true);
StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
public void run() {
final Module module = facet.getModule();
AndroidSdkUtils.setupAndroidPlatformInNeccessary(module);
final AndroidFacet androidFacet = (AndroidFacet)facet;
final String androidLibraryPropValue = AndroidUtils
.getPropertyValue(module, SdkConstants.FN_DEFAULT_PROPERTIES, AndroidUtils.ANDROID_LIBRARY_PROPERTY);
if (androidLibraryPropValue != null && androidLibraryPropValue.equals("true")) {
androidFacet.getConfiguration().LIBRARY_PROJECT = true;
}
Manifest manifest = androidFacet.getManifest();
if (manifest != null) {
if (AndroidUtils.getDefaultActivityName(manifest) != null) {
AndroidUtils.addRunConfiguration(project, androidFacet, null, true);
}
}
ApplicationManager.getApplication().saveAll();
}
});
}
}
};
VirtualFileFilter androidManifestFilter = new VirtualFileFilter() {
public boolean accept(VirtualFile file) {
return file.getName().equals(SdkConstants.FN_ANDROID_MANIFEST_XML);
}
};
detectorRegistry.registerUniversalDetector(StdFileTypes.XML, androidManifestFilter, detector);
}
public Icon getIcon() {
return AndroidUtils.ANDROID_ICON;
}
@@ -0,0 +1,88 @@
/*
* Copyright 2000-2011 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.facet;
import com.android.sdklib.SdkConstants;
import com.intellij.facet.FacetType;
import com.intellij.framework.detection.FacetBasedFrameworkDetector;
import com.intellij.framework.detection.FileContentPattern;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.patterns.ElementPattern;
import com.intellij.util.indexing.FileContent;
import org.jetbrains.android.dom.manifest.Manifest;
import org.jetbrains.android.importDependencies.ImportDependenciesUtil;
import org.jetbrains.android.sdk.AndroidSdkUtils;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public class AndroidFrameworkDetector extends FacetBasedFrameworkDetector<AndroidFacet, AndroidFacetConfiguration> {
public AndroidFrameworkDetector() {
super("android");
}
@Override
public void setupFacet(@NotNull final AndroidFacet facet) {
final Module module = facet.getModule();
final Project project = module.getProject();
ImportDependenciesUtil.importDependencies(module, true);
StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
public void run() {
final Module module = facet.getModule();
AndroidSdkUtils.setupAndroidPlatformInNeccessary(module);
final String androidLibraryPropValue = AndroidUtils
.getPropertyValue(module, SdkConstants.FN_DEFAULT_PROPERTIES, AndroidUtils.ANDROID_LIBRARY_PROPERTY);
if (androidLibraryPropValue != null && androidLibraryPropValue.equals("true")) {
facet.getConfiguration().LIBRARY_PROJECT = true;
}
Manifest manifest = facet.getManifest();
if (manifest != null) {
if (AndroidUtils.getDefaultActivityName(manifest) != null) {
AndroidUtils.addRunConfiguration(project, facet, null, true);
}
}
ApplicationManager.getApplication().saveAll();
}
});
}
@Override
public FacetType<AndroidFacet, AndroidFacetConfiguration> getFacetType() {
return AndroidFacet.getFacetType();
}
@NotNull
@Override
public FileType getFileType() {
return AndroidFrameworkDetector.super.getFileType();
}
@NotNull
@Override
public ElementPattern<FileContent> createSuitableFilePattern() {
return FileContentPattern.fileContent().withName(SdkConstants.FN_ANDROID_MANIFEST_XML);
}
}