From f8173440b37a8c864d6d5c53b59e28263c6d630e Mon Sep 17 00:00:00 2001 From: Alexander Podkhalyuzin Date: Wed, 15 Nov 2017 15:55:11 +0300 Subject: [PATCH] Java plugin was extracted from Idea plugin to be more standalone. --- .../ide/JavaExcludedFileIconPatcher.java | 45 + .../compiler/JavaCompilerConfiguration.java | 35 + .../intellij/execution/JavaExecutionUtil.java | 5 - .../src/META-INF/JavaAnalysisPlugin.xml | 248 +++ .../codeInsight/daemon/QuickFixBundle.java | 0 java/java-impl/java-impl.iml | 1 - java/java-impl/src/META-INF/JavaPlugin.xml | 1110 +++++++++++ .../analysis/BaseClassesAnalysisAction.java | 193 -- .../com/intellij/ide/JavaFileIconPatcher.java | 16 - .../psi/impl/JavaPlatformModuleSystem.kt | 10 +- .../src/META-INF/JavaIndexingPlugin.xml | 84 + .../psi/JavaCompilerConfigurationProxy.java | 31 + .../src/META-INF/JavaPsiPlugin.xml | 125 ++ .../src/META-INF/LangExtensionPoints.xml | 2 - .../src/META-INF/InspectionGadgets.xml | 4 + .../CatchMayIgnoreException.html | 0 .../ComponentModuleRegistrationChecker.kt | 215 ++ .../inspections/PluginXmlDomInspection.java | 26 +- resources/src/META-INF/IdeaPlugin.xml | 1774 +---------------- resources/src/componentSets/Compiler.xml | 1 + resources/src/idea/RichPlatformPlugin.xml | 16 +- 21 files changed, 1965 insertions(+), 1976 deletions(-) create mode 100644 java/compiler/impl/src/com/intellij/ide/JavaExcludedFileIconPatcher.java create mode 100644 java/compiler/openapi/src/com/intellij/compiler/JavaCompilerConfiguration.java create mode 100644 java/java-analysis-impl/src/META-INF/JavaAnalysisPlugin.xml rename {platform/analysis-impl => java/java-analysis-impl}/src/com/intellij/codeInsight/daemon/QuickFixBundle.java (100%) create mode 100644 java/java-impl/src/META-INF/JavaPlugin.xml delete mode 100644 java/java-impl/src/com/intellij/analysis/BaseClassesAnalysisAction.java create mode 100644 java/java-indexing-impl/src/META-INF/JavaIndexingPlugin.xml create mode 100644 java/java-psi-api/src/com/intellij/psi/JavaCompilerConfigurationProxy.java create mode 100644 java/java-psi-impl/src/META-INF/JavaPsiPlugin.xml rename {resources-en => plugins/InspectionGadgets}/src/inspectionDescriptions/CatchMayIgnoreException.html (100%) create mode 100644 plugins/devkit/src/inspections/ComponentModuleRegistrationChecker.kt diff --git a/java/compiler/impl/src/com/intellij/ide/JavaExcludedFileIconPatcher.java b/java/compiler/impl/src/com/intellij/ide/JavaExcludedFileIconPatcher.java new file mode 100644 index 000000000000..117a069101ce --- /dev/null +++ b/java/compiler/impl/src/com/intellij/ide/JavaExcludedFileIconPatcher.java @@ -0,0 +1,45 @@ +/* + * Copyright 2000-2017 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.ide; + +import com.intellij.openapi.compiler.CompilerManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.LayeredIcon; +import com.intellij.util.PlatformIcons; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +/** + * @author Alefas + * @since 04/09/2017 + */ +public class JavaExcludedFileIconPatcher implements FileIconPatcher { + @Override + public Icon patchIcon(Icon baseIcon, VirtualFile file, int flags, @Nullable Project project) { + if (project == null) { + return baseIcon; + } + final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); + if (fileIndex.isInSource(file) && CompilerManager.getInstance(project).isExcludedFromCompilation(file)) { + return new LayeredIcon(baseIcon, PlatformIcons.EXCLUDED_FROM_COMPILE_ICON); + } + return baseIcon; + } +} diff --git a/java/compiler/openapi/src/com/intellij/compiler/JavaCompilerConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/JavaCompilerConfiguration.java new file mode 100644 index 000000000000..021921afb9ab --- /dev/null +++ b/java/compiler/openapi/src/com/intellij/compiler/JavaCompilerConfiguration.java @@ -0,0 +1,35 @@ +// Copyright 2000-2017 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.compiler; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.psi.JavaCompilerConfigurationProxy; + +import java.util.List; + +/** + * @author Alefas + */ +public class JavaCompilerConfiguration extends JavaCompilerConfigurationProxy { + @Override + public List getAdditionalOptionsImpl(Project project, Module module) { + return CompilerConfiguration.getInstance(project).getAdditionalOptions(module); + } + + @Override + public void setAdditionalOptionsImpl(Project project, Module module, List options) { + CompilerConfiguration.getInstance(project).setAdditionalOptions(module, options); + } +} diff --git a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java index 13dfd982713c..7682f137e9c1 100644 --- a/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java +++ b/java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java @@ -33,7 +33,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.ClassUtil; -import com.intellij.psi.util.PsiClassUtil; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -204,8 +203,4 @@ public class JavaExecutionUtil { public static void showExecutionErrorMessage(final ExecutionException e, final String title, final Project project) { ExecutionErrorDialog.show(e, title, project); } - - public static boolean isRunnableClass(final PsiClass aClass) { - return PsiClassUtil.isRunnableClass(aClass, true); - } } diff --git a/java/java-analysis-impl/src/META-INF/JavaAnalysisPlugin.xml b/java/java-analysis-impl/src/META-INF/JavaAnalysisPlugin.xml new file mode 100644 index 000000000000..e175e2c69192 --- /dev/null +++ b/java/java-analysis-impl/src/META-INF/JavaAnalysisPlugin.xml @@ -0,0 +1,248 @@ + + + + + com.intellij.codeInsight.daemon.impl.JavaSoftKeywordHighlightingPassFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/QuickFixBundle.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/QuickFixBundle.java similarity index 100% rename from platform/analysis-impl/src/com/intellij/codeInsight/daemon/QuickFixBundle.java rename to java/java-analysis-impl/src/com/intellij/codeInsight/daemon/QuickFixBundle.java diff --git a/java/java-impl/java-impl.iml b/java/java-impl/java-impl.iml index acfe451c0fb3..1e683a4600ba 100644 --- a/java/java-impl/java-impl.iml +++ b/java/java-impl/java-impl.iml @@ -24,7 +24,6 @@ - diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml new file mode 100644 index 000000000000..61fdeb0c48e1 --- /dev/null +++ b/java/java-impl/src/META-INF/JavaPlugin.xml @@ -0,0 +1,1110 @@ + + + + + + com.intellij.openapi.vfs.jrt.JrtFileSystem + com.intellij.openapi.vfs.impl.jrt.JrtFileSystemImpl + + + + com.intellij.util.xml.impl.JavaDomApplicationComponent + + + + + + com.intellij.psi.RefResolveService + com.intellij.psi.refResolve.RefResolveServiceImpl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + com.intellij.codeInsight.intention.impl.SplitIfAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.ExtractSetFromComparisonChainAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.SurroundAutoCloseableAction + Java/Try Statements + + + com.intellij.codeInsight.daemon.impl.quickfix.ConvertToStringLiteralAction + Java/Strings + + + com.intellij.codeInsight.intention.impl.InsertLiteralUnderscoresAction + Java/Numbers + + + com.intellij.codeInsight.intention.impl.RemoveLiteralUnderscoresAction + Java/Numbers + + + com.intellij.codeInsight.intention.impl.BreakStringOnLineBreaksIntentionAction + Java/Strings + + + com.intellij.codeInsight.intention.impl.ReplaceCastWithVariableAction + Java/Imports + + + com.intellij.codeInsight.intention.impl.ConvertRelativePathToAbsoluteIntentionAction + Other + + + com.intellij.codeInsight.intention.impl.SortContentAction + Other + + + com.intellij.codeInsight.intention.impl.ConvertAbsolutePathToRelativeIntentionAction + Other + + + com.intellij.codeInsight.intention.impl.AddJavadocIntention + Java/Declaration + + + com.intellij.codeInsight.intention.impl.ConvertColorRepresentationIntentionAction + Java/Declaration + + + com.intellij.codeInspection.actions.ReplaceImplementsWithStaticImportAction + Java/Declaration + + + com.intellij.codeInspection.actions.UnimplementInterfaceAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.ExpandStaticImportAction + Java/Imports + + + com.intellij.codeInsight.intention.impl.AddExplicitTypeArgumentsIntention + Java/Declaration + + + com.intellij.codeInsight.intention.impl.AddSingleMemberStaticImportAction + Java/Imports + + + com.intellij.codeInsight.intention.impl.AddOnDemandStaticImportAction + Java/Imports + + + com.intellij.codeInsight.intention.impl.ConvertToBasicLatinAction + Java/I18N + + + com.intellij.codeInsight.intention.impl.ConcatenationToMessageFormatAction + Java/I18N + + + com.intellij.codeInsight.intention.impl.SimplifyBooleanExpressionAction + Java/Boolean + + + com.intellij.codeInsight.intention.impl.EncapsulateFieldAction + Java/Refactorings + + + com.intellij.codeInsight.intention.impl.IntroduceVariableIntentionAction + Java/Refactorings + + + com.intellij.codeInsight.daemon.impl.quickfix.DefineParamsDefaultValueAction + Java/Declaration + + + com.intellij.codeInsight.daemon.impl.quickfix.AddRuntimeExceptionToThrowsAction + Java/Declaration + + + com.intellij.testIntegration.intention.MoveInitializerToSetUpMethodAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.MoveInitializerToConstructorAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.JoinDeclarationAndAssignmentAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.SplitDeclarationAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.CopyAbstractMethodImplementationAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.ImplementAbstractMethodAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.CreateSubclassAction + Java/Declaration + + + com.intellij.testIntegration.createTest.GenerateMissedTestsAction + Java/Declaration + + + com.intellij.testIntegration.createTest.CreateTestAction + Java/Declaration + + + com.intellij.codeInsight.daemon.impl.quickfix.CreateCastExpressionFromInstanceofAction + Java/Declaration + + + com.intellij.codeInsight.daemon.impl.quickfix.CreateLocalVarFromInstanceofAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.BindFieldsFromParametersAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.AssignFieldFromParameterAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.CreateFieldFromParameterAction + Java/Declaration + + + com.intellij.codeInsight.intention.impl.UnwrapElseBranchAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.ConvertCompareToToEqualsIntention + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.SwapIfStatementsIntentionAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.CreateSwitchIntention + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.DeannotateIntentionAction + Java/Annotations + + + com.intellij.codeInsight.daemon.impl.quickfix.IterateOverIterableIntention + Java/Control Flow + + + com.intellij.codeInsight.ToggleSourceInferredAnnotations + Java/Annotations + ToggleSourceInferredAnnotations + + + com.intellij.codeInsight.MakeAnnotationExternal + Java/Annotations + MakeAnnotationExternal + + + com.intellij.codeInsight.MakeExternalAnnotationExplicit + Java/Annotations + MakeExternalAnnotationExplicit + + + com.intellij.codeInsight.MakeInferredAnnotationExplicit + Java/Annotations + MakeInferredAnnotationExplicit + + + com.intellij.codeInspection.dataFlow.EditContractIntention + Java/Annotations + EditContractIntention + + + com.intellij.codeInsight.intention.impl.AddNullableAnnotationIntention + Java/Annotations + AddAnnotationFix + + + com.intellij.codeInsight.intention.impl.AddDeprecationAnnotationIntention + Java/Annotations + AddAnnotationFix + + + com.intellij.codeInsight.intention.impl.AddNotNullAnnotationIntention + Java/Annotations + AddAnnotationFix + + + com.intellij.codeInsight.intention.impl.ExtractIfConditionAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.UnrollLoopAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.InvertIfConditionAction + Java/Control Flow + + + com.intellij.codeInsight.intention.impl.ComposeFunctionChainAction + Java/Refactorings + + + com.intellij.codeInsight.intention.impl.ExtractChainedMapAction + Java/Streams + + + com.intellij.codeInsight.intention.impl.InlineStreamMapAction + Java/Streams + + + com.intellij.codeInsight.intention.impl.MergeFilterChainAction + Java/Streams + + + com.intellij.codeInsight.intention.impl.SplitFilterAction + Java/Streams + + + \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/analysis/BaseClassesAnalysisAction.java b/java/java-impl/src/com/intellij/analysis/BaseClassesAnalysisAction.java deleted file mode 100644 index 72ebdd055504..000000000000 --- a/java/java-impl/src/com/intellij/analysis/BaseClassesAnalysisAction.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2000-2017 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.analysis; - -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.compiler.CompileContext; -import com.intellij.openapi.compiler.CompileScope; -import com.intellij.openapi.compiler.CompileStatusNotification; -import com.intellij.openapi.compiler.CompilerManager; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.vfs.VfsUtilCore; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFileSystemItem; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -/** - * @author mike - */ -public abstract class BaseClassesAnalysisAction extends BaseAnalysisAction { - protected BaseClassesAnalysisAction(String title, String analysisNoon) { - super(title, analysisNoon); - } - - protected abstract void analyzeClasses(@NotNull Project project, @NotNull AnalysisScope scope, @NotNull ProgressIndicator indicator); - - @Override - protected void analyze(@NotNull final Project project, @NotNull final AnalysisScope scope) { - FileDocumentManager.getInstance().saveAllDocuments(); - - ProgressManager.getInstance().run(new Task.Backgroundable(project, AnalysisScopeBundle.message("analyzing.project"), true) { - @Override - public void run(@NotNull final ProgressIndicator indicator) { - indicator.setIndeterminate(true); - indicator.setText(AnalysisScopeBundle.message("checking.class.files")); - - if (project.isDisposed()) { - return; - } - final Set modules = getScopeModules(scope); - final CompilerManager compilerManager = CompilerManager.getInstance(project); - final CompileScope compileScope = compilerManager.createModulesCompileScope(modules.toArray(Module.EMPTY_ARRAY), false); - final boolean upToDate = compilerManager.isUpToDate(compileScope); - - ApplicationManager.getApplication().invokeLater(() -> { - if (project.isDisposed()) { - return; - } - if (!upToDate) { - final int i = Messages.showYesNoCancelDialog(getProject(), AnalysisScopeBundle.message("recompile.confirmation.message"), - AnalysisScopeBundle.message("project.is.out.of.date"), Messages.getWarningIcon()); - - if (i == Messages.CANCEL) return; - - if (i == Messages.YES) { - compileAndAnalyze(project, scope); - } - else { - doAnalyze(project, scope); - } - } - else { - doAnalyze(project, scope); - } - }); - } - }); - } - - /** - * @param scope the scope of which to return the modules - * @return the modules contained by the scope and/or the module containing the scope. - */ - @NotNull - public static Set getScopeModules(@NotNull AnalysisScope scope) { - final int scopeType = scope.getScopeType(); - final Set result = new HashSet<>(); - final Project project = scope.getProject(); - if (scopeType == AnalysisScope.MODULE) { - final Module module = scope.getModule(); - if (module != null) { - result.add(module); - } - } - else if (scopeType == AnalysisScope.MODULES) { - result.addAll(scope.getModules()); - } - else if (scopeType == AnalysisScope.FILE) { - final PsiElement element = scope.getElement(); - if (element != null) { - final VirtualFile vFile = ((PsiFileSystemItem)element).getVirtualFile(); - getContainingModule(vFile, project, result); - } - } - else if (scopeType == AnalysisScope.DIRECTORY) { - final PsiElement element = scope.getElement(); - if (element != null) { - final VirtualFile vFile = ((PsiFileSystemItem)element).getVirtualFile(); - final Module[] modules = ModuleManager.getInstance(project).getModules(); - getModulesContainedInDirectory(modules, vFile, result); - getContainingModule(vFile, project, result); - } - } - else if (scopeType == AnalysisScope.VIRTUAL_FILES) { - final Set files = scope.getFiles(); - final Module[] modules = ModuleManager.getInstance(project).getModules(); - for (VirtualFile vFile : files) { - getModulesContainedInDirectory(modules, vFile, result); - getContainingModule(vFile, project, result); - } - } - else { - result.addAll(Arrays.asList(ModuleManager.getInstance(project).getModules())); - } - return result; - } - - private static void getContainingModule(VirtualFile vFile, @NotNull Project project, Set result) { - final ProjectFileIndex fileIndex = ProjectFileIndex.getInstance(project); - final Module module = fileIndex.getModuleForFile(vFile); - if (module != null) { - result.add(module); - } - } - - private static void getModulesContainedInDirectory(Module[] modules, VirtualFile directory, Set result) { - if (!directory.isDirectory()) { - return; - } - outer: for (Module module : modules) { - final VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots(); - for (VirtualFile root : roots) { - if (VfsUtilCore.isAncestor(directory, root, false)) { - result.add(module); - continue outer; - } - } - } - } - - private void doAnalyze(@NotNull Project project, @NotNull AnalysisScope scope) { - ProgressManager.getInstance().run(new Task.Backgroundable(project, AnalysisScopeBundle.message("analyzing.project"), true) { - @Override - public NotificationInfo getNotificationInfo() { - return new NotificationInfo("Analysis", "\"" + getTitle() + "\" Analysis Finished", ""); - } - - @Override - public void run(@NotNull final ProgressIndicator indicator) { - analyzeClasses(project, scope, indicator); - } - }); - } - - private void compileAndAnalyze(@NotNull Project project, @NotNull AnalysisScope scope) { - if (project.isDisposed()) { - return; - } - final CompilerManager compilerManager = CompilerManager.getInstance(project); - compilerManager.make(compilerManager.createProjectCompileScope(project), new CompileStatusNotification() { - @Override - public void finished(final boolean aborted, final int errors, final int warnings, final CompileContext compileContext) { - if (aborted || errors != 0) return; - ApplicationManager.getApplication().invokeLater(() -> doAnalyze(project, scope)); - }}); - } -} diff --git a/java/java-impl/src/com/intellij/ide/JavaFileIconPatcher.java b/java/java-impl/src/com/intellij/ide/JavaFileIconPatcher.java index db7b27e59bd5..4dfe04df1bae 100644 --- a/java/java-impl/src/com/intellij/ide/JavaFileIconPatcher.java +++ b/java/java-impl/src/com/intellij/ide/JavaFileIconPatcher.java @@ -16,18 +16,13 @@ package com.intellij.ide; import com.intellij.lang.java.JavaLanguage; -import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.FileIndexUtil; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Iconable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; -import com.intellij.ui.LayeredIcon; import com.intellij.util.PlatformIcons; import javax.swing.*; @@ -42,17 +37,6 @@ public class JavaFileIconPatcher implements FileIconPatcher { return baseIcon; } - Icon icon = replaceIcon(file, flags, project, baseIcon); - - final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); - if (fileIndex.isInSource(file) && CompilerManager.getInstance(project).isExcludedFromCompilation(file)) { - return new LayeredIcon(icon, PlatformIcons.EXCLUDED_FROM_COMPILE_ICON); - } - - return icon; - } - - private static Icon replaceIcon(VirtualFile file, @Iconable.IconFlags int flags, Project project, Icon baseIcon) { FileType fileType = file.getFileType(); if (fileType == StdFileTypes.JAVA && !FileIndexUtil.isJavaSourceFile(project, file)) { return PlatformIcons.JAVA_OUTSIDE_SOURCE_ICON; diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPlatformModuleSystem.kt b/java/java-impl/src/com/intellij/psi/impl/JavaPlatformModuleSystem.kt index 3f9513f9a22f..618fbdc4ea08 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPlatformModuleSystem.kt +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPlatformModuleSystem.kt @@ -10,7 +10,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil import com.intellij.codeInsight.daemon.impl.quickfix.AddExportsDirectiveFix import com.intellij.codeInsight.daemon.impl.quickfix.AddRequiresDirectiveFix import com.intellij.codeInsight.intention.IntentionAction -import com.intellij.compiler.CompilerConfiguration import com.intellij.openapi.editor.Editor import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project @@ -133,7 +132,7 @@ class JavaPlatformModuleSystem : JavaModuleSystemEx { } private fun inAddedExports(module: Module, targetName: String, packageName: String, useName: String): Boolean { - val options = CompilerConfiguration.getInstance(module.project).getAdditionalOptions(module) + val options = JavaCompilerConfigurationProxy.getAdditionalOptions(module.project, module) if (options.isEmpty()) return false val prefix = "${targetName}/${packageName}=" return optionValues(options, "--add-exports") @@ -144,7 +143,7 @@ class JavaPlatformModuleSystem : JavaModuleSystemEx { } private fun inAddedModules(module: Module, moduleName: String): Boolean { - val options = CompilerConfiguration.getInstance(module.project).getAdditionalOptions(module) + val options = JavaCompilerConfigurationProxy.getAdditionalOptions(module.project, module) return optionValues(options, "--add-modules") .flatMap { it.splitToSequence(",") } .any { it == moduleName || it == "ALL-SYSTEM" } @@ -174,10 +173,9 @@ class JavaPlatformModuleSystem : JavaModuleSystemEx { override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { if (isAvailable(project, editor, file)) { - val configuration = CompilerConfiguration.getInstance(project) - val options = configuration.getAdditionalOptions(module).toMutableList() + val options = JavaCompilerConfigurationProxy.getAdditionalOptions(module.project, module).toMutableList() update(options) - configuration.setAdditionalOptions(module, options) + JavaCompilerConfigurationProxy.setAdditionalOptions(module.project, module, options) PsiManager.getInstance(project).dropPsiCaches() DaemonCodeAnalyzer.getInstance(project).restart() } diff --git a/java/java-indexing-impl/src/META-INF/JavaIndexingPlugin.xml b/java/java-indexing-impl/src/META-INF/JavaIndexingPlugin.xml new file mode 100644 index 000000000000..caab29e875e5 --- /dev/null +++ b/java/java-indexing-impl/src/META-INF/JavaIndexingPlugin.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/java-psi-api/src/com/intellij/psi/JavaCompilerConfigurationProxy.java b/java/java-psi-api/src/com/intellij/psi/JavaCompilerConfigurationProxy.java new file mode 100644 index 000000000000..13aff364a8c9 --- /dev/null +++ b/java/java-psi-api/src/com/intellij/psi/JavaCompilerConfigurationProxy.java @@ -0,0 +1,31 @@ +// Copyright 2000-2017 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; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; + +import java.util.Collections; +import java.util.List; + +/** + * @author Alefas + */ +public abstract class JavaCompilerConfigurationProxy { + private static ExtensionPointName EP_NAME = new ExtensionPointName<>("com.intellij.javaCompilerConfigurationProxy"); + + abstract protected List getAdditionalOptionsImpl(Project project, Module module); + abstract protected void setAdditionalOptionsImpl(Project project, Module module, List options); + + public static List getAdditionalOptions(Project project, Module module) { + JavaCompilerConfigurationProxy[] extensions = EP_NAME.getExtensions(); + if (extensions.length == 0) return Collections.emptyList(); + return extensions[0].getAdditionalOptionsImpl(project, module); + } + + public static void setAdditionalOptions(Project project, Module module, List options) { + JavaCompilerConfigurationProxy[] extensions = EP_NAME.getExtensions(); + if (extensions.length == 0) return; + extensions[0].setAdditionalOptionsImpl(project, module, options); + } +} diff --git a/java/java-psi-impl/src/META-INF/JavaPsiPlugin.xml b/java/java-psi-impl/src/META-INF/JavaPsiPlugin.xml new file mode 100644 index 000000000000..3ea55daab3e3 --- /dev/null +++ b/java/java-psi-impl/src/META-INF/JavaPsiPlugin.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 294e874d650f..41cee2c5356e 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -910,8 +910,6 @@ - diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml index d380280cfee0..c0880aebc932 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml @@ -93,6 +93,10 @@ key="static.variable.of.concrete.class.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.abstraction.StaticVariableOfConcreteClassInspection"/> + + epRegistration = getRegisteringModule(element) + epRegistration == null + }, + scope, + shortName, + UsageSearchContext.IN_STRINGS, + true, + false) + epRegistration?.let { checkProperXmlFileForDefinition(extensionPoint, holder, it) } + } +} + +private fun getRegisteringModule(element: PsiElement): Module? { + val epName = PsiTreeUtil.getParentOfType(element, PsiField::class.java) ?: return null + val psiClass = (epName.type as? PsiClassType)?.resolve() ?: return null + if (psiClass.qualifiedName == "com.intellij.openapi.extensions.ExtensionPointName") { + return ModuleUtilCore.findModuleForPsiElement(epName) + } + return null +} + +fun checkProperXmlFileForExtension(element: Extension, holder: DomElementAnnotationHolder) { + for (attributeDescription in element.genericInfo.attributeChildrenDescriptions) { + val attributeName = attributeDescription.name + if (attributeName == "interfaceClass" || attributeName == "serviceInterface" || attributeName == "forClass") continue + + val attributeValue = attributeDescription.getDomAttributeValue(element) + if (attributeValue == null || !DomUtil.hasXml(attributeValue)) continue + + if (attributeValue.converter is PluginPsiClassConverter) { + val psiClass = attributeValue.value as PsiClass? ?: continue + if (checkProperXmlFileForClass(element, holder, psiClass)) return + } + } + + + for (childDescription in element.genericInfo.fixedChildrenDescriptions) { + val domElement = childDescription.getValues(element).firstOrNull() ?: continue + val text = domElement.xmlTag?.value?.text ?: continue + val project = domElement.xmlTag.project + val psiClass = JavaPsiFacade.getInstance(project).findClass(text, GlobalSearchScope.projectScope(project)) + if (psiClass != null && checkProperXmlFileForClass(element, holder, psiClass)) return + } +} + +fun checkProperXmlFileForClass(element: DomElement, holder: DomElementAnnotationHolder, psiClass: PsiClass?): Boolean { + val definingModule = psiClass?.let { ModuleUtilCore.findModuleForPsiElement(it) } ?: return false + return checkProperXmlFileForDefinition(element, holder, definingModule) +} + +private fun checkProperXmlFileForDefinition(element: DomElement, + holder: DomElementAnnotationHolder, + definingModule: Module): Boolean { + var definingModule = definingModule + var modulePluginXmlFile = findModulePluginXmlFile(definingModule) + if (modulePluginXmlFile == null) { + val implModule = findMatchingImplModule(definingModule) + if (implModule != null) { + definingModule = implModule + modulePluginXmlFile = findModulePluginXmlFile(implModule) + } + } + if (modulePluginXmlFile != null && element.module !== definingModule) { + holder.createProblem(element, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, + "Element should be registered in ${modulePluginXmlFile.name}", null, + MoveRegistrationQuickFix(definingModule, modulePluginXmlFile.name)) + return true + } + return false +} + +fun isIdeaPlatformModule(module: Module?): Boolean { + if (module == null || !PsiUtil.isIdeaProject(module.project)) { + return false + } + val contentRoots = ModuleRootManager.getInstance(module).contentRoots + if (contentRoots.isEmpty()) return false + var parent: VirtualFile? = contentRoots[0].parent + while (parent != null) { + if (parent.name == "plugins") { + return false + } + if (parent.findChild(".idea") != null) { + return true + } + parent = parent.parent + } + return true +} + +private fun findMatchingImplModule(module: Module): Module? { + if (module.name == "openapi") { + return ModuleManager.getInstance(module.project).findModuleByName("java-impl") + } + + if (module.name.endsWith("-api")) { + val implName = module.name.substring(0, module.name.length - 4) + "-impl" + return ModuleManager.getInstance(module.project).findModuleByName(implName) + } + return null +} + +private fun findModulePluginXmlFile(module: Module): XmlFile? { + for (sourceRoot in ModuleRootManager.getInstance(module).sourceRoots) { + val metaInf = sourceRoot.findChild("META-INF") + if (metaInf != null && metaInf.isDirectory) { + for (file in metaInf.children) { + if (file.name.endsWith("Plugin.xml")) { + val psiFile = PsiManager.getInstance(module.project).findFile(file) + if (psiFile is XmlFile) { + return psiFile + } + } + } + } + } + return null +} + + +class MoveRegistrationQuickFix(private val myTargetModule: Module, + private val myTargetFileName: String) : LocalQuickFix { + + @Nls + override fun getName(): String = "Move registration to " + myTargetFileName + + @Nls + override fun getFamilyName(): String = "Move registration to correct module" + + override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + val tag = PsiTreeUtil.getParentOfType(descriptor.psiElement, XmlTag::class.java, false) ?: return + val parentTag = tag.parentTag ?: return + + val targetFile = findModulePluginXmlFile(myTargetModule) ?: return + val rootTag = targetFile.rootTag ?: return + val subTags = rootTag.findSubTags(tag.parentTag!!.name) + val newParentTag = subTags.firstOrNull() + ?: rootTag.addSubTag(rootTag.createChildTag(parentTag.localName, "", null, false), false) + .apply { + for (attribute in parentTag.attributes) { + setAttribute(attribute.name, attribute.value) + } + } + + val newTag = newParentTag.addSubTag(tag, false) + tag.delete() + (newTag as? Navigatable)?.navigate(true) + } +} diff --git a/plugins/devkit/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/src/inspections/PluginXmlDomInspection.java index 7e22551fe722..730d54b3fdc2 100644 --- a/plugins/devkit/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/src/inspections/PluginXmlDomInspection.java @@ -103,8 +103,11 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection nameAttrValue) { @@ -309,8 +318,21 @@ public class PluginXmlDomInspection extends BasicDomElementsInspectioncom.intellij IDEA CORE - - - - - + + + + @@ -49,21 +48,7 @@ - - - com.intellij.openapi.vfs.jrt.JrtFileSystem - com.intellij.openapi.vfs.impl.jrt.JrtFileSystemImpl - - - com.intellij.util.xml.impl.JavaDomApplicationComponent - - - - - com.intellij.psi.RefResolveService - com.intellij.psi.refResolve.RefResolveServiceImpl - com.intellij.execution.testDiscovery.TestDiscoveryIndex @@ -73,11 +58,6 @@ com.intellij.execution.scratch.JavaScratchCompilationSupport - - com.intellij.codeInsight.daemon.impl.JavaSoftKeywordHighlightingPassFactory - - - com.intellij.compiler.CompilerReferenceService com.intellij.compiler.backwardRefs.CompilerReferenceServiceImpl @@ -85,19 +65,6 @@ - - - - - - - @@ -105,32 +72,13 @@ - - - - - - - - - - - - @@ -176,1235 +124,58 @@ interface="com.intellij.debugger.ui.tree.NodeDescriptorNameAdjuster"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.intellij.codeInsight.intention.impl.SplitIfAction - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.SplitFilterAction - Java/Streams - - - com.intellij.codeInsight.intention.impl.MergeFilterChainAction - Java/Streams - - - com.intellij.codeInsight.intention.impl.InlineStreamMapAction - Java/Streams - - - com.intellij.codeInsight.intention.impl.ExtractChainedMapAction - Java/Streams - - - com.intellij.codeInsight.intention.impl.ComposeFunctionChainAction - Java/Refactorings - - - com.intellij.codeInsight.intention.impl.InvertIfConditionAction - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.ExtractIfConditionAction - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.UnrollLoopAction - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.AddNotNullAnnotationIntention - Java/Annotations - AddAnnotationFix - - - com.intellij.codeInsight.intention.impl.AddDeprecationAnnotationIntention - Java/Annotations - AddAnnotationFix - - - com.intellij.codeInsight.intention.impl.AddNullableAnnotationIntention - Java/Annotations - AddAnnotationFix - - - com.intellij.codeInspection.dataFlow.EditContractIntention - Java/Annotations - EditContractIntention - - - com.intellij.codeInsight.MakeInferredAnnotationExplicit - Java/Annotations - MakeInferredAnnotationExplicit - - - com.intellij.codeInsight.MakeExternalAnnotationExplicit - Java/Annotations - MakeExternalAnnotationExplicit - - - com.intellij.codeInsight.MakeAnnotationExternal - Java/Annotations - MakeAnnotationExternal - - - com.intellij.codeInsight.ToggleSourceInferredAnnotations - Java/Annotations - ToggleSourceInferredAnnotations - - - com.intellij.codeInsight.daemon.impl.quickfix.IterateOverIterableIntention - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.DeannotateIntentionAction - Java/Annotations - - - com.intellij.codeInsight.intention.impl.CreateSwitchIntention - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.SwapIfStatementsIntentionAction - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.ConvertCompareToToEqualsIntention - Java/Control Flow - - - com.intellij.codeInsight.intention.impl.UnwrapElseBranchAction - Java/Control Flow - - - - com.intellij.codeInsight.intention.impl.CreateFieldFromParameterAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.AssignFieldFromParameterAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.BindFieldsFromParametersAction - Java/Declaration - - - com.intellij.codeInsight.daemon.impl.quickfix.CreateLocalVarFromInstanceofAction - Java/Declaration - - - com.intellij.codeInsight.daemon.impl.quickfix.CreateCastExpressionFromInstanceofAction - Java/Declaration - - - com.intellij.testIntegration.createTest.CreateTestAction - Java/Declaration - - - com.intellij.testIntegration.createTest.GenerateMissedTestsAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.CreateSubclassAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.ImplementAbstractMethodAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.CopyAbstractMethodImplementationAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.SplitDeclarationAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.JoinDeclarationAndAssignmentAction - Java/Declaration - - - com.intellij.codeInsight.intention.impl.MoveInitializerToConstructorAction - Java/Declaration - - - com.intellij.testIntegration.intention.MoveInitializerToSetUpMethodAction - Java/Declaration - - - com.intellij.codeInsight.daemon.impl.quickfix.AddRuntimeExceptionToThrowsAction - Java/Declaration - - - com.intellij.codeInsight.daemon.impl.quickfix.DefineParamsDefaultValueAction - Java/Declaration - - - - com.intellij.codeInsight.intention.impl.IntroduceVariableIntentionAction - Java/Refactorings - - - com.intellij.codeInsight.intention.impl.EncapsulateFieldAction - Java/Refactorings - - - - com.intellij.codeInsight.intention.impl.SimplifyBooleanExpressionAction - Java/Boolean - - - - com.intellij.codeInsight.intention.impl.ConcatenationToMessageFormatAction - Java/I18N - - - - com.intellij.codeInsight.intention.impl.ConvertToBasicLatinAction - Java/I18N - - - - com.intellij.codeInsight.intention.impl.AddOnDemandStaticImportAction - Java/Imports - - - com.intellij.codeInsight.intention.impl.AddSingleMemberStaticImportAction - Java/Imports - - - com.intellij.codeInsight.intention.impl.AddExplicitTypeArgumentsIntention - Java/Declaration - - - com.intellij.codeInsight.intention.impl.ExpandStaticImportAction - Java/Imports - - - - com.intellij.codeInspection.actions.UnimplementInterfaceAction - Java/Declaration - - - - com.intellij.codeInspection.actions.ReplaceImplementsWithStaticImportAction - Java/Declaration - - - - com.intellij.codeInsight.intention.impl.ConvertColorRepresentationIntentionAction - Java/Declaration - - - - com.intellij.codeInsight.intention.impl.AddJavadocIntention - Java/Declaration - - - - com.intellij.codeInsight.intention.impl.ConvertAbsolutePathToRelativeIntentionAction - Other - - - - com.intellij.codeInsight.intention.impl.ConvertRelativePathToAbsoluteIntentionAction - Other - - - - com.intellij.codeInsight.intention.impl.SortContentAction - Other - - - - com.intellij.codeInsight.intention.impl.ReplaceCastWithVariableAction - Java/Imports - - - - com.intellij.codeInsight.intention.impl.BreakStringOnLineBreaksIntentionAction - Java/Strings - - - - com.intellij.codeInsight.intention.impl.RemoveLiteralUnderscoresAction - Java/Numbers - - - com.intellij.codeInsight.intention.impl.InsertLiteralUnderscoresAction - Java/Numbers - - - - com.intellij.codeInsight.daemon.impl.quickfix.ConvertToStringLiteralAction - Java/Strings - - - - com.intellij.codeInsight.intention.impl.SurroundAutoCloseableAction - Java/Try Statements - - - com.intellij.codeInsight.intention.impl.ExtractSetFromComparisonChainAction - Java/Declaration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1449,179 +220,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1634,18 +237,13 @@ - - + - - - - @@ -1654,219 +252,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1906,42 +298,19 @@ - - - - - - - - - - - - - - - - - - - + + + + - @@ -1951,124 +320,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + com.intellij.testIntegration.createTest.GenerateMissedTestsAction + Java/Declaration + + + com.intellij.testIntegration.createTest.CreateTestAction + Java/Declaration + - - - - - + + + + + + + + + diff --git a/resources/src/componentSets/Compiler.xml b/resources/src/componentSets/Compiler.xml index 84c946e72efa..4350344eb250 100644 --- a/resources/src/componentSets/Compiler.xml +++ b/resources/src/componentSets/Compiler.xml @@ -25,6 +25,7 @@ + diff --git a/resources/src/idea/RichPlatformPlugin.xml b/resources/src/idea/RichPlatformPlugin.xml index 7d91e122fd84..8d50e130e8e9 100644 --- a/resources/src/idea/RichPlatformPlugin.xml +++ b/resources/src/idea/RichPlatformPlugin.xml @@ -151,9 +151,6 @@ - - @@ -166,12 +163,6 @@ - - - - @@ -203,8 +194,6 @@ serviceImplementation="com.intellij.compiler.options.ValidationConfiguration$ExcludedFromValidationConfiguration"/> - @@ -342,11 +331,10 @@ - - - + +