facet detectors migrated to FileContent based filters

This commit is contained in:
nik
2010-11-19 11:02:22 +03:00
parent 0ac2d5e5ba
commit 34de624112
11 changed files with 182 additions and 164 deletions
@@ -198,7 +198,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp
FileContent fileContent,
final FacetDetectorWrapper<?, ?, ?, ?> detector,
List<FacetInfo2<Module>> facets) {
if (!myDetectionInProgress && detector.getFileContentFilter().accept(fileContent)) {
if (!myDetectionInProgress && detector.getFileContentPattern().accepts(fileContent)) {
try {
myDetectionInProgress = true;
FacetInfo2<Module> facet = detector.detectFacet(virtualFile, myPsiManager);
@@ -349,7 +349,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp
myType = type;
}
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentFilter fileContentFilter,
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myHasDetectors = true;
@@ -359,7 +359,7 @@ public class FacetAutodetectingManagerImpl extends FacetAutodetectingManager imp
facetDetector, selector));
}
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentFilter fileContentFilter,
public <U extends FacetConfiguration> void register(@NotNull final FileType fileType, @NotNull final FileContentPattern fileContentFilter,
@NotNull final Condition<PsiFile> psiFileFilter, @NotNull final FacetDetector<PsiFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myHasDetectors = true;
@@ -37,10 +37,10 @@ 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 FileContentFilter fileContentFilter,
final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
final FacetDetector<PsiFile, C> facetDetector,
Condition<PsiFile> psiFileFilter, final UnderlyingFacetSelector<VirtualFile, U> selector) {
super(projectFacetSet, facetType, autodetectionFilter, fileContentFilter, facetDetector, selector);
super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector);
myPsiFileFilter = psiFileFilter;
}
@@ -34,10 +34,10 @@ 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 FileContentFilter fileContentFilter,
final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
super(projectFacetSet, facetType, autodetectionFilter, fileContentFilter, facetDetector, selector);
super(projectFacetSet, facetType, autodetectionFilter, fileContentPattern, facetDetector, selector);
}
@Nullable
@@ -21,17 +21,13 @@ import com.intellij.facet.autodetecting.FacetDetector;
import com.intellij.facet.autodetecting.UnderlyingFacetSelector;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileFilter;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public interface FacetDetectorForWizardRegistry<C extends FacetConfiguration> {
void register(@NotNull final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector);
<U extends FacetConfiguration> void register(final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter,
<U extends FacetConfiguration> void register(final FileType fileType, @NotNull final FileContentPattern fileContentPattern,
final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector);
}
@@ -16,34 +16,24 @@
package com.intellij.facet.impl.autodetecting;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetConfiguration;
import com.intellij.facet.FacetModel;
import com.intellij.facet.FacetType;
import com.intellij.facet.autodetecting.DetectedFacetPresentation;
import com.intellij.facet.autodetecting.FacetDetector;
import com.intellij.facet.autodetecting.FacetDetectorRegistry;
import com.intellij.facet.autodetecting.UnderlyingFacetSelector;
import com.intellij.ide.caches.FileContent;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.patterns.*;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.VirtualFilePattern;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.cache.impl.CacheUtil;
import com.intellij.util.text.CharSequenceReader;
import com.intellij.util.xml.NanoXmlUtil;
import com.intellij.util.xml.XmlFileHeader;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Collection;
/**
* @author nik
*/
@@ -62,67 +52,34 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
}
public void registerUniversalDetectorByRootTag(@NotNull final String rootTag, @NotNull final FacetDetector<VirtualFile, C> detector) {
registerUniversalDetector(StdFileTypes.XML, new VirtualFileFilter() {
@Override
public boolean accept(VirtualFile file) {
try {
return rootTag.equals(NanoXmlUtil.parseHeaderWithException(file).getRootTagLocalName());
}
catch (IOException e) {
return false;
}
}
}, new FileContentFilter() {
@Override
public boolean accept(FileContent fileContent) {
try {
return rootTag.equals(parseHeaderWithException(fileContent).getRootTagLocalName());
}
catch (IOException e) {
return false;
}
}
}, detector);
}
@NotNull
private static XmlFileHeader parseHeaderWithException(FileContent fileContent) throws IOException {
final CharSequence contentText = CacheUtil.getContentText(fileContent);
//noinspection IOResourceOpenedButNotSafelyClosed
return NanoXmlUtil.parseHeaderWithException(new CharSequenceReader(contentText));
registerUniversalDetector(StdFileTypes.XML, FileContentPattern.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) {
VirtualFilePattern fileNamePattern = PlatformPatterns.virtualFile().withName(StandardPatterns.string().equalTo(fileName));
VirtualFilePattern wizardPattern = fileNamePattern.xmlWithRootTag(StandardPatterns.string().equalTo(rootTag));
if (underlyingFacetSelector != null) {
registerUniversalSubFacetDetector(StdFileTypes.XML, wizardPattern, detector, underlyingFacetSelector);
}
else {
registerUniversalDetector(StdFileTypes.XML, wizardPattern, detector);
}
registerUniversalDetector(StdFileTypes.XML, FileContentPattern.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, virtualFileFilter, facetDetector);
myForWizardDelegate.register(fileType, FileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
}
}
public void registerDetectorForWizard(@NotNull final FileType fileType, @NotNull final VirtualFilePattern virtualFilePattern,
@NotNull final FacetDetector<VirtualFile, C> facetDetector) {
registerDetectorForWizard(fileType, new MyPatternFilter(virtualFilePattern), facetDetector);
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, null);
}
}
public <U extends FacetConfiguration> void registerSubFacetDetectorForWizard(@NotNull final FileType fileType, @NotNull final VirtualFilePattern virtualFilePattern,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
@NotNull final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, new MyPatternFilter(virtualFilePattern), facetDetector, underlyingFacetSelector);
myForWizardDelegate.register(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
}
}
@@ -133,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, new MyFileContentFilter(virtualFileFilter), psiFileFilter, facetDetector, selector);
myOnTheFlyDelegate.register(fileType, FileContentPattern.byFilter(virtualFileFilter), psiFileFilter, facetDetector, selector);
}
}
@@ -168,26 +125,25 @@ 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, virtualFileFilter, new MyFileContentFilter(virtualFileFilter), facetDetector);
registerUniversalDetector(fileType, FileContentPattern.byFilter(virtualFileFilter), facetDetector, null);
}
private void registerUniversalDetector(@NotNull final FileType fileType, @NotNull VirtualFileFilter virtualFileFilter, @NotNull final FileContentFilter fileContentFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector) {
public <U extends FacetConfiguration> void registerUniversalDetector(@NotNull final FileType fileType,
@NotNull final FileContentPattern fileContentFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
if (myForWizardDelegate != null) {
myForWizardDelegate.register(fileType, virtualFileFilter, facetDetector);
myForWizardDelegate.register(fileType, fileContentFilter, facetDetector, underlyingFacetSelector);
}
if (myOnTheFlyDelegate != null) {
myOnTheFlyDelegate.register(fileType, fileContentFilter, facetDetector, null);
myOnTheFlyDelegate.register(fileType, fileContentFilter, facetDetector, underlyingFacetSelector);
}
}
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) {
registerSubFacetDetectorForWizard(fileType, virtualFilePattern, facetDetector, underlyingFacetSelector);
if (myOnTheFlyDelegate != null) {
myOnTheFlyDelegate.register(fileType, new MyFileContentFilter(new MyPatternFilter(virtualFilePattern)), facetDetector, underlyingFacetSelector);
}
registerUniversalDetector(fileType, FileContentPattern.byFilePattern(virtualFilePattern), facetDetector, underlyingFacetSelector);
}
private static class MyPatternFilter implements VirtualFileFilter {
@@ -202,23 +158,6 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
}
}
public static <C extends FacetConfiguration> FacetDetector<PsiFile, C> convertDetector(final FacetDetector<VirtualFile, C> detector) {
return new FacetDetector<PsiFile, C>(detector.getId() + "-psi") {
public C detectFacet(final PsiFile source, final Collection<C> existentFacetConfigurations) {
VirtualFile virtualFile = source.getVirtualFile();
return virtualFile != null ? detector.detectFacet(virtualFile, existentFacetConfigurations) : null;
}
public void beforeFacetAdded(@NotNull final Facet facet, final FacetModel facetModel, @NotNull final ModifiableRootModel modifiableRootModel) {
detector.beforeFacetAdded(facet, facetModel, modifiableRootModel);
}
public void afterFacetAdded(@NotNull final Facet facet) {
detector.afterFacetAdded(facet);
}
};
}
@NotNull
public static <C extends FacetConfiguration> DetectedFacetPresentation getDetectedFacetPresentation(@NotNull FacetType<?,C> facetType) {
FacetDetectorRegistryEx<C> registry = new FacetDetectorRegistryEx<C>(null, null);
@@ -226,17 +165,4 @@ public class FacetDetectorRegistryEx<C extends FacetConfiguration> implements Fa
DetectedFacetPresentation presentation = registry.myPresentation;
return presentation != null ? presentation : DefaultDetectedFacetPresentation.INSTANCE;
}
private static class MyFileContentFilter implements FileContentFilter {
private final VirtualFileFilter myVirtualFileFilter;
public MyFileContentFilter(VirtualFileFilter virtualFileFilter) {
myVirtualFileFilter = virtualFileFilter;
}
@Override
public boolean accept(FileContent fileContent) {
return myVirtualFileFilter.accept(fileContent.getVirtualFile());
}
}
}
@@ -40,25 +40,25 @@ 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 FileContentFilter myFileContentFilter;
private final FileContentPattern 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 FileContentFilter fileContentFilter,
protected FacetDetectorWrapper(ProjectFacetInfoSet projectFacetSet, FacetType<F, C> facetType, final AutodetectionFilter autodetectionFilter, final FileContentPattern fileContentPattern,
final FacetDetector<S, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> selector) {
myDetectedFacetSet = projectFacetSet;
myFacetType = facetType;
myAutodetectionFilter = autodetectionFilter;
myFileContentFilter = fileContentFilter;
myFileContentPattern = fileContentPattern;
myFacetDetector = facetDetector;
myUnderlyingFacetSelector = selector;
}
public FileContentFilter getFileContentFilter() {
return myFileContentFilter;
public FileContentPattern getFileContentPattern() {
return myFileContentPattern;
}
public FacetType<?, C> getFacetType() {
@@ -30,11 +30,11 @@ import org.jetbrains.annotations.NotNull;
*/
public interface FacetOnTheFlyDetectorRegistry<C extends FacetConfiguration> {
<U extends FacetConfiguration>
void register(@NotNull FileType fileType, @NotNull FileContentFilter virtualFileFilter,
void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern,
@NotNull FacetDetector<VirtualFile, C> detector, UnderlyingFacetSelector<VirtualFile, U> selector);
<U extends FacetConfiguration>
void register(@NotNull FileType fileType, @NotNull FileContentFilter virtualFileFilter,
void register(@NotNull FileType fileType, @NotNull FileContentPattern fileContentPattern,
@NotNull Condition<PsiFile> psiFileFilter, @NotNull FacetDetector<PsiFile, C> detector,
UnderlyingFacetSelector<VirtualFile, U> selector);
}
@@ -1,25 +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 com.intellij.facet.impl.autodetecting;
import com.intellij.ide.caches.FileContent;
/**
* @author nik
*/
public interface FileContentFilter {
boolean accept(FileContent fileContent);
}
@@ -0,0 +1,125 @@
/*
* 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 com.intellij.facet.impl.autodetecting;
import com.intellij.ide.caches.FileContent;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.patterns.*;
import com.intellij.psi.impl.cache.impl.CacheUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.util.text.CharSequenceReader;
import com.intellij.util.xml.NanoXmlUtil;
import com.intellij.util.xml.XmlFileHeader;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
/**
* @author nik
*/
public class FileContentPattern extends ObjectPattern<FileContent, FileContentPattern> {
public FileContentPattern() {
super(FileContent.class);
}
public static FileContentPattern fileContent() {
return new FileContentPattern();
}
public FileContentPattern withName(@NotNull final String name) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
return name.equals(fileContent.getVirtualFile().getName());
}
});
}
public FileContentPattern withName(final StringPattern namePattern) {
return with(new PatternCondition<FileContent>("withName") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
return namePattern.accepts(fileContent.getVirtualFile().getName());
}
});
}
public FileContentPattern inDirectory(final @NotNull String name) {
return with(new PatternCondition<FileContent>("inDirectory") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
return name.equals(fileContent.getVirtualFile().getParent().getName());
}
});
}
public FileContentPattern xmlWithRootTag(@NotNull final String rootTag) {
return with(new PatternCondition<FileContent>("withRootTag") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
try {
return rootTag.equals(parseHeaderWithException(fileContent).getRootTagLocalName());
}
catch (IOException e) {
return false;
}
}
});
}
public FileContentPattern xmlWithRootTagNamespace(final String namespace) {
return xmlWithRootTagNamespace(StandardPatterns.string().equalTo(namespace));
}
public FileContentPattern xmlWithRootTagNamespace(final ElementPattern<String> namespacePattern) {
return with(new PatternCondition<FileContent>("xmlWithRootTagNamespace") {
public boolean accepts(@NotNull final FileContent fileContent, final ProcessingContext context) {
try {
String rootTagNamespace = parseHeaderWithException(fileContent).getRootTagNamespace();
return rootTagNamespace != null && namespacePattern.getCondition().accepts(rootTagNamespace, context);
}
catch (IOException e) {
return false;
}
}
});
}
public static FileContentPattern byFilter(@NotNull final VirtualFileFilter filter) {
return fileContent().with(new PatternCondition<FileContent>("withFileFilter") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
return filter.accept(fileContent.getVirtualFile());
}
});
}
public static FileContentPattern byFilePattern(@NotNull final VirtualFilePattern pattern) {
return fileContent().with(new PatternCondition<FileContent>("withFilePattern") {
@Override
public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
return pattern.accepts(fileContent.getVirtualFile());
}
});
}
@NotNull
private static XmlFileHeader parseHeaderWithException(FileContent fileContent) throws IOException {
final CharSequence contentText = CacheUtil.getContentText(fileContent);
//noinspection IOResourceOpenedButNotSafelyClosed
return NanoXmlUtil.parseHeaderWithException(new CharSequenceReader(contentText));
}
}
@@ -21,15 +21,16 @@ 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.ide.caches.FileContent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.openapi.module.ModuleType;
import org.jetbrains.annotations.NotNull;
import java.io.File;
@@ -107,8 +108,9 @@ public class FacetDetectionProcessor {
Collection<MyFacetDetectorWrapper> detectors = detectorsMap.get(fileType);
if (detectors == null) return;
final FileContent content = new FileContent(file);
for (MyFacetDetectorWrapper detector : detectors) {
detector.detectFacet(file);
detector.detectFacet(content);
}
}
@@ -127,16 +129,16 @@ public class FacetDetectionProcessor {
private class MyFacetDetectorWrapper<C extends FacetConfiguration, U extends FacetConfiguration> {
private final FacetType<?, C> myFacetType;
private final FileType myFileType;
private final VirtualFileFilter myVirtualFileFilter;
private final FileContentPattern myFileContentPattern;
private final FacetDetector<VirtualFile, C> myDetector;
private final UnderlyingFacetSelector<VirtualFile, U> myUnderlyingFacetSelector;
public MyFacetDetectorWrapper(final FacetType<?, C> facetType, final FileType fileType, final VirtualFileFilter virtualFileFilter, final FacetDetector<VirtualFile, C> detector,
public MyFacetDetectorWrapper(final FacetType<?, C> facetType, final FileType fileType, final FileContentPattern fileContentFilter, final FacetDetector<VirtualFile, C> detector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
myUnderlyingFacetSelector = underlyingFacetSelector;
myFacetType = facetType;
myFileType = fileType;
myVirtualFileFilter = virtualFileFilter;
myFileContentPattern = fileContentFilter;
myDetector = detector;
}
@@ -148,8 +150,9 @@ public class FacetDetectionProcessor {
return myFacetType;
}
public void detectFacet(VirtualFile file) {
if (!myVirtualFileFilter.accept(file)) return;
public void detectFacet(final FileContent fileContent) {
if (!myFileContentPattern.accepts(fileContent)) return;
final VirtualFile file = fileContent.getVirtualFile();
FacetInfo underlyingFacet = null;
if (myUnderlyingFacetSelector != null) {
@@ -222,11 +225,17 @@ public class FacetDetectionProcessor {
myLevel=level;
}
public void register(@NotNull final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter,
@NotNull final FacetDetector<VirtualFile, C> facetDetector) {
LOG.assertTrue(myFacetType.getUnderlyingFacetType() == null, "This method must not be used for sub-facets");
getDetectorsMap().put(fileType, new MyFacetDetectorWrapper<C, FacetConfiguration>(myFacetType, fileType, virtualFileFilter,
facetDetector, null));
public <U extends FacetConfiguration> void register(final FileType fileType, @NotNull final FileContentPattern 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");
}
else {
LOG.assertTrue(underlyingFacetSelector == null, "UnderlyingFacetSelector must not be specified for " + myFacetType.getPresentableName() + " detector");
}
MyFacetDetectorWrapper<C, U> detector = new MyFacetDetectorWrapper<C, U>(myFacetType, fileType, fileContentPattern,
facetDetector, underlyingFacetSelector);
getDetectorsMap().put(fileType, detector);
}
private MultiValuesMap<FileType, MyFacetDetectorWrapper> getDetectorsMap() {
@@ -235,14 +244,6 @@ public class FacetDetectionProcessor {
}
return myDetectors.get(myLevel);
}
public <U extends FacetConfiguration> void register(final FileType fileType, @NotNull final VirtualFileFilter virtualFileFilter, final FacetDetector<VirtualFile, C> facetDetector,
final UnderlyingFacetSelector<VirtualFile, U> underlyingFacetSelector) {
LOG.assertTrue(myFacetType.getUnderlyingFacetType() != null, "This method can be used only for sub-facets");
MyFacetDetectorWrapper<C, U> detector = new MyFacetDetectorWrapper<C, U>(myFacetType, fileType, virtualFileFilter,
facetDetector, underlyingFacetSelector);
getDetectorsMap() .put(fileType, detector);
}
}
//todo[nik] use DetectedFacetInfo instead
@@ -22,6 +22,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.facetsTree.DetectedFacetsTreeComponent;
import com.intellij.facet.impl.ui.FacetDetectionProcessor;
import com.intellij.ide.util.newProjectWizard.ProjectFromSourcesBuilder;
@@ -36,7 +37,6 @@ import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.ui.ScrollPaneFactory;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -146,14 +146,9 @@ public abstract class FacetDetectionStep extends AbstractStepWithProgress<Map<Mo
final Ref<Boolean> hasDetector = Ref.create(false);
//noinspection unchecked
facetType.registerDetectors(new FacetDetectorRegistryEx(new FacetDetectorForWizardRegistry() {
public void register(@NotNull FileType fileType,
@NotNull VirtualFileFilter virtualFileFilter,
@NotNull FacetDetector facetDetector) {
hasDetector.set(true);
}
public void register(FileType fileType,
@NotNull VirtualFileFilter virtualFileFilter,
@NotNull FileContentPattern fileContentPattern,
FacetDetector facetDetector,
UnderlyingFacetSelector underlyingFacetSelector) {
hasDetector.set(true);