Unverified Commit a75ea73e authored by Vladimir Krivosheev's avatar Vladimir Krivosheev
Browse files

avoid expensive isSchemaFile()

parent ba991f47
Showing with 18 additions and 14 deletions
+18 -14
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.json; package com.intellij.json;
import com.intellij.json.psi.*; import com.intellij.json.psi.*;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.util.ObjectUtils; import com.intellij.util.ObjectUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
...@@ -82,4 +86,9 @@ public class JsonUtil { ...@@ -82,4 +86,9 @@ public class JsonUtil {
} }
return -1; return -1;
} }
public static boolean isJsonFile(@NotNull VirtualFile file) {
FileType type = file.getFileType();
return type instanceof LanguageFileType && ((LanguageFileType)type).getLanguage() instanceof JsonLanguage;
}
} }
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.ide; package com.jetbrains.jsonSchema.ide;
import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.ModificationTracker;
...@@ -27,7 +26,7 @@ public interface JsonSchemaService { ...@@ -27,7 +26,7 @@ public interface JsonSchemaService {
static boolean isSchemaFile(@NotNull PsiFile psiFile) { static boolean isSchemaFile(@NotNull PsiFile psiFile) {
final VirtualFile file = psiFile.getViewProvider().getVirtualFile(); final VirtualFile file = psiFile.getViewProvider().getVirtualFile();
JsonSchemaService service = Impl.get(psiFile.getProject()); JsonSchemaService service = Impl.get(psiFile.getProject());
return service.isApplicableToFile(file) && service.isSchemaFile(file); return service.isSchemaFile(file) && service.isApplicableToFile(file);
} }
boolean isSchemaFile(@NotNull VirtualFile file); boolean isSchemaFile(@NotNull VirtualFile file);
......
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.impl; package com.jetbrains.jsonSchema.impl;
import com.intellij.json.JsonLanguage; import com.intellij.json.JsonUtil;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.jetbrains.jsonSchema.extension.JsonSchemaEnabler; import com.jetbrains.jsonSchema.extension.JsonSchemaEnabler;
public class JsonSchemaInJsonFilesEnabler implements JsonSchemaEnabler { public class JsonSchemaInJsonFilesEnabler implements JsonSchemaEnabler {
@Override @Override
public boolean isEnabledForFile(VirtualFile file) { public boolean isEnabledForFile(VirtualFile file) {
FileType type = file.getFileType(); return JsonUtil.isJsonFile(file);
return type instanceof LanguageFileType && ((LanguageFileType)type).getLanguage() instanceof JsonLanguage;
} }
} }
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
package com.jetbrains.jsonSchema.impl; package com.jetbrains.jsonSchema.impl;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.json.JsonUtil;
import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
...@@ -258,9 +259,9 @@ public class JsonSchemaServiceImpl implements JsonSchemaService { ...@@ -258,9 +259,9 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
@Override @Override
public boolean isSchemaFile(@NotNull VirtualFile file) { public boolean isSchemaFile(@NotNull VirtualFile file) {
return isMappedSchema(file) return JsonUtil.isJsonFile(file) && (isMappedSchema(file)
|| isSchemaByProvider(file) || isSchemaByProvider(file)
|| hasSchemaSchema(file); || hasSchemaSchema(file));
} }
public boolean isMappedSchema(@NotNull VirtualFile file) { public boolean isMappedSchema(@NotNull VirtualFile file) {
......
...@@ -178,10 +178,8 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup { ...@@ -178,10 +178,8 @@ class JsonSchemaStatusWidget extends EditorBasedStatusBarPopup {
}); });
} }
private boolean isValidSchemaFile(VirtualFile schemaFile) { private boolean isValidSchemaFile(@Nullable VirtualFile schemaFile) {
if (schemaFile == null || !myService.isApplicableToFile(schemaFile) || !myService.isSchemaFile(schemaFile)) return false; return schemaFile != null && myService.isSchemaFile(schemaFile) && myService.isApplicableToFile(schemaFile);
FileType type = schemaFile.getFileType();
return type instanceof LanguageFileType && ((LanguageFileType)type).getLanguage() instanceof JsonLanguage;
} }
@Nullable @Nullable
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment