mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
facet detectors migrated to FileContent based filters
This commit is contained in:
+3
-3
@@ -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;
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-5
@@ -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);
|
||||
}
|
||||
|
||||
+18
-92
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user