From 67b8c5000855fdba571edee4d4ff0affa0d46c83 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Tue, 1 Dec 2020 16:57:32 +0300 Subject: [PATCH] New PsiFile-based JavaFileCodeStyleFacade and factory, deprecate old JavaCodeStyleSettingsFacade GitOrigin-RevId: 341fff7c6f3e13992f9349f9e04984578e1342d2 --- java/java-impl/src/META-INF/JavaPlugin.xml | 2 + .../JavaFileCodeStyleFacadeImpl.java | 56 +++++++++++++++++++ .../JavaCodeStyleSettingsFacade.java | 39 ++++++++++++- .../codeStyle/JavaFileCodeStyleFacade.java | 25 +++++++++ .../JavaFileCodeStyleFacadeFactory.java | 11 ++++ 5 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 java/java-impl/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeImpl.java create mode 100644 java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacade.java create mode 100644 java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeFactory.java diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml index 9cd4e70514d7..d3698a56113a 100644 --- a/java/java-impl/src/META-INF/JavaPlugin.xml +++ b/java/java-impl/src/META-INF/JavaPlugin.xml @@ -337,6 +337,8 @@ serviceImplementation="com.intellij.psi.impl.CommonReferenceProviderTypesImpl"/> + diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeImpl.java b/java/java-impl/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeImpl.java new file mode 100644 index 000000000000..013a3595a75d --- /dev/null +++ b/java/java-impl/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeImpl.java @@ -0,0 +1,56 @@ +// Copyright 2000-2020 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.psi.codeStyle; + +import com.intellij.application.options.CodeStyle; +import com.intellij.application.options.DefaultCodeStyleSettingsFacade; +import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +public class JavaFileCodeStyleFacadeImpl extends DefaultCodeStyleSettingsFacade implements JavaFileCodeStyleFacade { + + private final JavaCodeStyleSettings myJavaSettings; + + public JavaFileCodeStyleFacadeImpl(@NotNull CodeStyleSettings settings) { + super(settings, JavaFileType.INSTANCE); + myJavaSettings = settings.getCustomSettings(JavaCodeStyleSettings.class); + } + + @Override + public int getNamesCountToUseImportOnDemand() { + return myJavaSettings.getNamesCountToUseImportOnDemand(); + } + + @Override + public boolean isToImportOnDemand(String qualifiedName) { + return myJavaSettings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.contains(qualifiedName); + } + + @Override + public boolean useFQClassNames() { + return myJavaSettings.USE_FQ_CLASS_NAMES; + } + + @Override + public boolean isJavaDocLeadingAsterisksEnabled() { + return myJavaSettings.JD_LEADING_ASTERISKS_ARE_ENABLED; + } + + @Override + public boolean isGenerateFinalParameters() { + return myJavaSettings.GENERATE_FINAL_PARAMETERS; + } + + @Override + public boolean isGenerateFinalLocals() { + return myJavaSettings.GENERATE_FINAL_LOCALS; + } + + public static class Factory implements JavaFileCodeStyleFacadeFactory { + + @Override + public @NotNull JavaFileCodeStyleFacade createFacade(@NotNull PsiFile psiFile) { + return new JavaFileCodeStyleFacadeImpl(CodeStyle.getSettings(psiFile)); + } + } +} diff --git a/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaCodeStyleSettingsFacade.java b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaCodeStyleSettingsFacade.java index 54d22acd78e6..a9e5718c3d70 100644 --- a/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaCodeStyleSettingsFacade.java +++ b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaCodeStyleSettingsFacade.java @@ -17,26 +17,61 @@ package com.intellij.psi.codeStyle; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; /** - * @author yole + * @deprecated Use {@link JavaFileCodeStyleFacade} for per-file code-style-settings. Note: project settings + * may not be applicable to a particular file. */ +@Deprecated public abstract class JavaCodeStyleSettingsFacade { + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#getNamesCountToUseImportOnDemand()} + */ + @Deprecated public abstract int getNamesCountToUseImportOnDemand(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#isToImportOnDemand(String)} + */ + @Deprecated public abstract boolean isToImportInDemand(String qualifiedName); - + + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#useFQClassNames()} + */ + @Deprecated public abstract boolean useFQClassNames(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#isJavaDocLeadingAsterisksEnabled()} + */ + @Deprecated public abstract boolean isJavaDocLeadingAsterisksEnabled(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#getIndentSize()} + */ + @Deprecated public abstract int getIndentSize(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#isGenerateFinalParameters()} + */ + @Deprecated public abstract boolean isGenerateFinalParameters(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#isGenerateFinalLocals()} + */ + @Deprecated public abstract boolean isGenerateFinalLocals(); + /** + * @deprecated Use {@link JavaFileCodeStyleFacade#forContext(PsiFile)} instead. + */ + @Deprecated public static JavaCodeStyleSettingsFacade getInstance(Project project) { return ServiceManager.getService(project, JavaCodeStyleSettingsFacade.class); } diff --git a/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacade.java b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacade.java new file mode 100644 index 000000000000..1446606cebd5 --- /dev/null +++ b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacade.java @@ -0,0 +1,25 @@ +// Copyright 2000-2020 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.psi.codeStyle; + +import com.intellij.openapi.components.ServiceManager; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +public interface JavaFileCodeStyleFacade extends CodeStyleSettingsFacade { + int getNamesCountToUseImportOnDemand(); + + boolean isToImportOnDemand(String qualifiedName); + + boolean useFQClassNames(); + + boolean isJavaDocLeadingAsterisksEnabled(); + + boolean isGenerateFinalParameters(); + + boolean isGenerateFinalLocals(); + + static JavaFileCodeStyleFacade forContext(@NotNull PsiFile psiFile) { + JavaFileCodeStyleFacadeFactory factory = ServiceManager.getService(JavaFileCodeStyleFacadeFactory.class); + return factory.createFacade(psiFile); + } +} diff --git a/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeFactory.java b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeFactory.java new file mode 100644 index 000000000000..e29fc0c3071a --- /dev/null +++ b/java/java-psi-api/src/com/intellij/psi/codeStyle/JavaFileCodeStyleFacadeFactory.java @@ -0,0 +1,11 @@ +// Copyright 2000-2020 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.psi.codeStyle; + +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +public interface JavaFileCodeStyleFacadeFactory { + + @NotNull + JavaFileCodeStyleFacade createFacade(@NotNull PsiFile psiFile); +}