From f4be3f2a23e12d7948d3c81a51e17a1d9f85e46f Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 5 Aug 2011 11:34:34 +0400 Subject: [PATCH] new framework detection: migrating facet detectors --- .../FacetAutodetectingManagerImpl.java | 4 +- .../FacetByPsiFileDetectorWrapper.java | 2 +- .../FacetByVirtualFileDetectorWrapper.java | 2 +- .../FacetDetectorForWizardRegistry.java | 2 +- .../FacetDetectorRegistryEx.java | 18 ++-- .../autodetecting/FacetDetectorWrapper.java | 6 +- .../FacetOnTheFlyDetectorRegistry.java | 4 +- ...attern.java => OldFileContentPattern.java} | 24 ++--- .../impl/ui/FacetDetectionProcessor.java | 8 +- .../FacetBasedFrameworkDetector.java | 25 +++++- ...ntPattern.java => FileContentPattern.java} | 21 +++-- plugins/android/src/META-INF/plugin.xml | 1 + .../android/facet/AndroidFacetType.java | 63 ------------- .../facet/AndroidFrameworkDetector.java | 88 +++++++++++++++++++ 14 files changed, 157 insertions(+), 111 deletions(-) rename java/idea-ui/src/com/intellij/facet/impl/autodetecting/{FileContentPattern.java => OldFileContentPattern.java} (81%) rename platform/lang-impl/src/com/intellij/framework/detection/{NewFileContentPattern.java => FileContentPattern.java} (80%) create mode 100644 plugins/android/src/org/jetbrains/android/facet/AndroidFrameworkDetector.java diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetAutodetectingManagerImpl.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetAutodetectingManagerImpl.java index 0a1b40c27e89..f92f7e5b8492 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetAutodetectingManagerImpl.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetAutodetectingManagerImpl.java @@ -311,7 +311,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp myType = type; } - public void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter, + public void register(@NotNull final FileType fileType, @NotNull final OldFileContentPattern fileContentFilter, @NotNull final FacetDetector facetDetector, final UnderlyingFacetSelector selector) { myHasDetectors = true; @@ -321,7 +321,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp facetDetector, selector)); } - public void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter, + public void register(@NotNull final FileType fileType, @NotNull final OldFileContentPattern fileContentFilter, @NotNull final Condition psiFileFilter, @NotNull final FacetDetector facetDetector, final UnderlyingFacetSelector selector) { myHasDetectors = true; diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByPsiFileDetectorWrapper.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByPsiFileDetectorWrapper.java index 30b1116171cd..f40274fe128b 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByPsiFileDetectorWrapper.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByPsiFileDetectorWrapper.java @@ -37,7 +37,7 @@ public class FacetByPsiFileDetectorWrapper myPsiFileFilter; public FacetByPsiFileDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType facetType, - final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern, + final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern, final FacetDetector facetDetector, Condition psiFileFilter, final UnderlyingFacetSelector selector) { super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector); diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByVirtualFileDetectorWrapper.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByVirtualFileDetectorWrapper.java index f7fd2f7b83ad..f73c0be75f5d 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByVirtualFileDetectorWrapper.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetByVirtualFileDetectorWrapper.java @@ -34,7 +34,7 @@ import org.jetbrains.annotations.Nullable; */ public class FacetByVirtualFileDetectorWrapper, U extends FacetConfiguration> extends FacetDetectorWrapper { public FacetByVirtualFileDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType facetType, - final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern, + final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern, final FacetDetector facetDetector, final UnderlyingFacetSelector selector) { super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector); diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorForWizardRegistry.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorForWizardRegistry.java index d7da474f795f..f003acf34734 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorForWizardRegistry.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorForWizardRegistry.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull; * @author nik */ public interface FacetDetectorForWizardRegistry { - void register(final FileType fileType, @NotNull final FileContentPattern fileContentPattern, + void register(final FileType fileType, @NotNull final OldFileContentPattern fileContentPattern, final FacetDetector facetDetector, final UnderlyingFacetSelector underlyingFacetSelector); } diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorRegistryEx.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorRegistryEx.java index f60bc0958ec6..ac513ef16012 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorRegistryEx.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorRegistryEx.java @@ -52,26 +52,26 @@ public class FacetDetectorRegistryEx implements Fa } public void registerUniversalDetectorByRootTag(@NotNull final String rootTag, @NotNull final FacetDetector detector) { - registerUniversalDetector(StdFileTypes.XML, FileContentPattern.fileContent().xmlWithRootTag(rootTag), detector, null); + registerUniversalDetector(StdFileTypes.XML, OldFileContentPattern.fileContent().xmlWithRootTag(rootTag), detector, null); } public void registerUniversalDetectorByFileNameAndRootTag(@NotNull @NonNls String fileName, @NotNull @NonNls String rootTag, @NotNull final FacetDetector detector, @Nullable UnderlyingFacetSelector 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 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 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 implements Fa @NotNull final FacetDetector facetDetector, @NotNull final UnderlyingFacetSelector 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 implements Fa @NotNull final FacetDetector facetDetector, @Nullable UnderlyingFacetSelector 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 implements Fa } public void registerUniversalDetector(@NotNull final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter, @NotNull final FacetDetector facetDetector) { - registerUniversalDetector(fileType, FileContentPattern.byFilter(virtualFileFilter), facetDetector, null); + registerUniversalDetector(fileType, OldFileContentPattern.byFilter(virtualFileFilter), facetDetector, null); } public void registerUniversalDetector(@NotNull final FileType fileType, - @NotNull final FileContentPattern fileContentFilter, + @NotNull final OldFileContentPattern fileContentFilter, @NotNull final FacetDetector facetDetector, final UnderlyingFacetSelector underlyingFacetSelector) { if (myForWizardDelegate != null) { @@ -143,7 +143,7 @@ public class FacetDetectorRegistryEx implements Fa public void registerUniversalSubFacetDetector(@NotNull final FileType fileType, @NotNull final VirtualFilePattern virtualFilePattern, @NotNull final FacetDetector facetDetector, final UnderlyingFacetSelector underlyingFacetSelector) { - registerUniversalDetector(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector); + registerUniversalDetector(fileType, OldFileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector); } private static class MyPatternFilter implements VirtualFileFilter { diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorWrapper.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorWrapper.java index 9e5df83b05b5..c0408f54466f 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorWrapper.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FacetDetectorWrapper.java @@ -40,13 +40,13 @@ import java.util.Map; public abstract class FacetDetectorWrapper, 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 myFacetDetector; private final UnderlyingFacetSelector myUnderlyingFacetSelector; private final ProjectFacetInfoSet myDetectedFacetSet; private final FacetType myFacetType; - protected FacetDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType facetType, final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern, + protected FacetDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType facetType, final AutodetectionFilter autodetectionFilter, final OldFileContentPattern fileContentPattern, final FacetDetector facetDetector, final UnderlyingFacetSelector selector) { myDetectedFacetSet = projectFacetSet; @@ -57,7 +57,7 @@ public abstract class FacetDetectorWrapper { - void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern, + void register(@NotNull FileType fileType, @NotNull OldFileContentPattern fileContentPattern, @NotNull FacetDetector detector, UnderlyingFacetSelector selector); - void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern, + void register(@NotNull FileType fileType, @NotNull OldFileContentPattern fileContentPattern, @NotNull Condition psiFileFilter, @NotNull FacetDetector detector, UnderlyingFacetSelector selector); } diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FileContentPattern.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/OldFileContentPattern.java similarity index 81% rename from java/idea-ui/src/com/intellij/facet/impl/autodetecting/FileContentPattern.java rename to java/idea-ui/src/com/intellij/facet/impl/autodetecting/OldFileContentPattern.java index 25931e87c1e7..86f333ee3364 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/FileContentPattern.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/OldFileContentPattern.java @@ -30,16 +30,16 @@ import java.io.IOException; /** * @author nik */ -public class FileContentPattern extends ObjectPattern { - public FileContentPattern() { +public class OldFileContentPattern extends ObjectPattern { + 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("withName") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -48,7 +48,7 @@ public class FileContentPattern extends ObjectPattern("withName") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -57,7 +57,7 @@ public class FileContentPattern extends ObjectPattern("inDirectory") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -66,7 +66,7 @@ public class FileContentPattern extends ObjectPattern("withRootTag") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -80,11 +80,11 @@ public class FileContentPattern extends ObjectPattern namespacePattern) { + public OldFileContentPattern xmlWithRootTagNamespace(final ElementPattern namespacePattern) { return with(new PatternCondition("xmlWithRootTagNamespace") { public boolean accepts(@NotNull final FileContent fileContent, final ProcessingContext context) { try { @@ -98,7 +98,7 @@ public class FileContentPattern extends ObjectPattern("withFileFilter") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -107,7 +107,7 @@ public class FileContentPattern extends ObjectPattern("withFilePattern") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetDetectionProcessor.java b/java/idea-ui/src/com/intellij/facet/impl/ui/FacetDetectionProcessor.java index b54fefd8e352..7aa4ee7efa86 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetDetectionProcessor.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/FacetDetectionProcessor.java @@ -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 { private final FacetType myFacetType; private final FileType myFileType; - private final FileContentPattern myFileContentPattern; + private final OldFileContentPattern myFileContentPattern; private final FacetDetector myDetector; private final UnderlyingFacetSelector myUnderlyingFacetSelector; - public MyFacetDetectorWrapper(final FacetType facetType, final FileType fileType, final FileContentPattern fileContentFilter, final FacetDetector detector, + public MyFacetDetectorWrapper(final FacetType facetType, final FileType fileType, final OldFileContentPattern fileContentFilter, final FacetDetector detector, final UnderlyingFacetSelector underlyingFacetSelector) { myUnderlyingFacetSelector = underlyingFacetSelector; myFacetType = facetType; @@ -225,7 +225,7 @@ public class FacetDetectionProcessor { myLevel=level; } - public void register(final FileType fileType, @NotNull final FileContentPattern fileContentPattern, final FacetDetector facetDetector, + public void register(final FileType fileType, @NotNull final OldFileContentPattern fileContentPattern, final FacetDetector facetDetector, final UnderlyingFacetSelector underlyingFacetSelector) { if (myFacetType.getUnderlyingFacetType() != null) { LOG.assertTrue(underlyingFacetSelector != null, "UnderlyingFacetSelector must be specified for " + myFacetType.getPresentableName() + " detector"); diff --git a/platform/lang-impl/src/com/intellij/framework/detection/FacetBasedFrameworkDetector.java b/platform/lang-impl/src/com/intellij/framework/detection/FacetBasedFrameworkDetector.java index 3384b05e39ab..83c4ac7a5ddb 100644 --- a/platform/lang-impl/src/com/intellij/framework/detection/FacetBasedFrameworkDetector.java +++ b/platform/lang-impl/src/com/intellij/framework/detection/FacetBasedFrameworkDetector.java @@ -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 getFacetType(); @NotNull - public abstract List>> createConfigurations(@NotNull Collection files, - @NotNull Collection existentFacetConfigurations); + public List>> createConfigurations(@NotNull Collection files, + @NotNull Collection existentFacetConfigurations) { + final C configuration = createConfiguration(files); + if (configuration != null) { + return Collections.singletonList(Pair.create(configuration, files)); + } + return Collections.emptyList(); + } + + @Nullable + protected C createConfiguration(Collection files) { + return getFacetType().createDefaultConfiguration(); + } public void setupFacet(@NotNull F facet) { } @@ -58,4 +73,10 @@ public abstract class FacetBasedFrameworkDetector files) { return true; } + + @NotNull + @Override + public FileType getFileType() { + return StdFileTypes.XML; + } } diff --git a/platform/lang-impl/src/com/intellij/framework/detection/NewFileContentPattern.java b/platform/lang-impl/src/com/intellij/framework/detection/FileContentPattern.java similarity index 80% rename from platform/lang-impl/src/com/intellij/framework/detection/NewFileContentPattern.java rename to platform/lang-impl/src/com/intellij/framework/detection/FileContentPattern.java index e20a459874d7..3294373f1803 100644 --- a/platform/lang-impl/src/com/intellij/framework/detection/NewFileContentPattern.java +++ b/platform/lang-impl/src/com/intellij/framework/detection/FileContentPattern.java @@ -28,17 +28,16 @@ import java.io.IOException; /** * @author nik */ -//todo[nik] remove old FileContentPattern and rename this class -public class NewFileContentPattern extends ObjectPattern { - private NewFileContentPattern() { +public class FileContentPattern extends ObjectPattern { + 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("withName") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -47,7 +46,7 @@ public class NewFileContentPattern extends ObjectPattern("withName") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -56,7 +55,7 @@ public class NewFileContentPattern extends ObjectPattern("inDirectory") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -65,7 +64,7 @@ public class NewFileContentPattern extends ObjectPattern("withRootTag") { @Override public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) { @@ -79,11 +78,11 @@ public class NewFileContentPattern extends ObjectPattern namespacePattern) { + public FileContentPattern xmlWithRootTagNamespace(final ElementPattern namespacePattern) { return with(new PatternCondition("xmlWithRootTagNamespace") { public boolean accepts(@NotNull final FileContent fileContent, final ProcessingContext context) { try { diff --git a/plugins/android/src/META-INF/plugin.xml b/plugins/android/src/META-INF/plugin.xml index 4d59289158ef..052bd52cd725 100644 --- a/plugins/android/src/META-INF/plugin.xml +++ b/plugins/android/src/META-INF/plugin.xml @@ -108,6 +108,7 @@ + diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidFacetType.java b/plugins/android/src/org/jetbrains/android/facet/AndroidFacetType.java index b14ae78870c8..b364d859e1b7 100644 --- a/plugins/android/src/org/jetbrains/android/facet/AndroidFacetType.java +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidFacetType.java @@ -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 detectorRegistry) { - FacetDetector detector = new FacetDetector() { - public AndroidFacetConfiguration detectFacet(VirtualFile source, Collection 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; } diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidFrameworkDetector.java b/plugins/android/src/org/jetbrains/android/facet/AndroidFrameworkDetector.java new file mode 100644 index 000000000000..58bd3afe5318 --- /dev/null +++ b/plugins/android/src/org/jetbrains/android/facet/AndroidFrameworkDetector.java @@ -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 { + 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 getFacetType() { + return AndroidFacet.getFacetType(); + } + + @NotNull + @Override + public FileType getFileType() { + return AndroidFrameworkDetector.super.getFileType(); + } + + @NotNull + @Override + public ElementPattern createSuitableFilePattern() { + return FileContentPattern.fileContent().withName(SdkConstants.FN_ANDROID_MANIFEST_XML); + } +}