diff --git a/.idea/modules.xml b/.idea/modules.xml index 445cc8d3bf32..7bbc4b80075e 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,6 +4,7 @@ + diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant index 65f1601c1c8a..51f735870d23 100644 --- a/build/scripts/layouts.gant +++ b/build/scripts/layouts.gant @@ -51,7 +51,6 @@ def layoutFull(String home, String targetDirectory, String patchedDescriptorDir List openapiModules = [platformApiModules, "java-psi-api", "java-analysis-api", - "analysis-api", "java-indexing-api", "openapi", "testFramework-java", @@ -64,22 +63,21 @@ def layoutFull(String home, String targetDirectory, String patchedDescriptorDir //noinspection GroovyAssignabilityCheck List implementationModules = [platformImplementationModules, - "testFramework", - "tests_bootstrap", - "instrumentation-util", - "platform-main", - "java-psi-impl", - "java-indexing-impl", - "java-impl", - "java-analysis-impl", - "analysis-impl", - "compiler-impl", - "debugger-impl", - "dom-impl", - "execution-impl", - "jsp-spi", - "idea-ui", - "external-system-impl" + "compiler-impl", + "debugger-impl", + "dom-impl", + "execution-impl", + "external-system-impl", + "idea-ui", + "instrumentation-util", + "java-analysis-impl", + "java-indexing-impl", + "java-impl", + "java-psi-impl", + "jsp-spi", + "platform-main", + "testFramework", + "tests_bootstrap", ].flatten() ant.patternset(id: "resources.included") { @@ -248,7 +246,11 @@ public def layoutCommunityPlugins(String home) { module("ant-jps-plugin") } } - layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin") + layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin") { + jar("InspectionGadgetsAnalysis.jar") { + module("InspectionGadgetsAnalysis") + } + } layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin") layoutPlugin("ToString", "generate-tostring", "toString") layoutPlugin("uiDesigner", "ui-designer", "uiDesigner") { @@ -751,6 +753,7 @@ def layout_core_upsource(String home, String target) { module("analysis-impl") module("java-analysis-api") module("java-analysis-impl") + module("InspectionGadgetsAnalysis") } jar("annotations.jar") { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/InspectionGadgetsAnalysis.iml b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/InspectionGadgetsAnalysis.iml new file mode 100644 index 000000000000..ea9fd78a35d4 --- /dev/null +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/InspectionGadgetsAnalysis.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/plugins/InspectionGadgets/src/com/siyeh/HardcodedMethodConstants.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/HardcodedMethodConstants.java similarity index 96% rename from plugins/InspectionGadgets/src/com/siyeh/HardcodedMethodConstants.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/HardcodedMethodConstants.java index 5ab72dbf62ce..fef13b3393fe 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/HardcodedMethodConstants.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/HardcodedMethodConstants.java @@ -15,7 +15,7 @@ */ package com.siyeh; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil; +import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtilBase; import org.jetbrains.annotations.NonNls; /** @@ -58,7 +58,7 @@ public class HardcodedMethodConstants { public static final String PRINT_STACK_TRACE = "printStackTrace"; public static final String REMOVE = "remove"; public static final String RUN = "run"; - public static final String SERIAL_VERSION_UID = HighlightUtil.SERIAL_VERSION_UID_FIELD_NAME; + public static final String SERIAL_VERSION_UID = HighlightUtilBase.SERIAL_VERSION_UID_FIELD_NAME; public static final String SET = "set"; public static final String SIZE = "size"; public static final String STARTS_WITH = "startsWith"; diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java similarity index 93% rename from plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java index fd4c269d0455..de92b6b79211 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java @@ -15,7 +15,7 @@ */ package com.siyeh.ig; -import com.intellij.codeInspection.BaseJavaLocalInspectionTool; +import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool; import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.diagnostic.Logger; @@ -23,6 +23,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElementVisitor; import com.intellij.ui.DocumentAdapter; import com.intellij.util.ui.UIUtil; +import com.siyeh.ig.telemetry.InspectionGadgetsTelemetry; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -36,15 +37,13 @@ import java.text.NumberFormat; import java.text.ParseException; import java.util.List; -public abstract class BaseInspection extends BaseJavaLocalInspectionTool { - +public abstract class BaseInspection extends BaseJavaBatchLocalInspectionTool { private static final Logger LOG = Logger.getInstance("#com.siyeh.ig.BaseInspection"); @NonNls private static final String INSPECTION = "Inspection"; private String m_shortName = null; private long timestamp = -1L; - private final InspectionGadgetsPlugin inspectionGadgetsPlugin = InspectionGadgetsPlugin.getInstance(); @Override @NotNull @@ -185,7 +184,7 @@ public abstract class BaseInspection extends BaseJavaLocalInspectionTool { @Override public void inspectionStarted(@NotNull LocalInspectionToolSession session, boolean isOnTheFly) { super.inspectionStarted(session, isOnTheFly); - if (inspectionGadgetsPlugin.isTelemetryEnabled()) { + if (InspectionGadgetsTelemetry.isEnabled()) { timestamp = System.currentTimeMillis(); } } @@ -194,14 +193,14 @@ public abstract class BaseInspection extends BaseJavaLocalInspectionTool { public void inspectionFinished(@NotNull LocalInspectionToolSession session, @NotNull ProblemsHolder problemsHolder) { super.inspectionFinished(session, problemsHolder); - if (inspectionGadgetsPlugin.isTelemetryEnabled()) { + if (InspectionGadgetsTelemetry.isEnabled()) { if (timestamp < 0L) { LOG.warn("finish reported without corresponding start"); return; } final long end = System.currentTimeMillis(); final String displayName = getDisplayName(); - inspectionGadgetsPlugin.getTelemetry().reportRun(displayName, end - timestamp); + InspectionGadgetsTelemetry.getInstance().reportRun(displayName, end - timestamp); timestamp = -1L; } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/DelegatingFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java similarity index 97% rename from plugins/InspectionGadgets/src/com/siyeh/ig/DelegatingFix.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java index 03d4b2ed9cb5..e8874a54bf81 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/DelegatingFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/DelegatingFix.java @@ -30,16 +30,19 @@ public class DelegatingFix extends InspectionGadgetsFix { this.delegate = delegate; } + @Override @NotNull public String getName() { return delegate.getName(); } + @Override @NotNull public String getFamilyName() { return delegate.getName(); } + @Override protected void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException { delegate.applyFix(project, descriptor); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/GroupDisplayNameUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/GroupDisplayNameUtil.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/GroupDisplayNameUtil.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/GroupDisplayNameUtil.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java similarity index 91% rename from plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsFix.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java index 57f4b1f23bd4..2d0e462ab3a9 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/InspectionGadgetsFix.java @@ -15,21 +15,19 @@ */ package com.siyeh.ig; +import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.lang.StdLanguages; import com.intellij.lang.Language; -import com.intellij.lang.jsp.JspxFileViewProvider; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.ReadonlyStatusHandler; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.jsp.JspFile; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -46,11 +44,13 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix { /** * To appear in "Apply Fix" statement when multiple Quick Fixes exist */ + @Override @NotNull public String getFamilyName() { return ""; } + @Override public final void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement problemElement = descriptor.getPsiElement(); @@ -145,6 +145,10 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix { styleManager.reformat(replacementExp); } + private static boolean isInJsp(PsiElement file) { + return PsiUtilCore.getTemplateLanguageFile(file) instanceof ServerPageFile; + } + protected static void replaceStatementAndShortenClassNames( @NotNull PsiStatement statement, @NotNull @NonNls String newStatementText) @@ -154,11 +158,11 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix { CodeStyleManager.getInstance(project); final JavaCodeStyleManager javaStyleManager = JavaCodeStyleManager.getInstance(project); - if (JspPsiUtil.isInJspFile(statement)) { + if (isInJsp(statement)) { final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); - final JspFile file = JspPsiUtil.getJspFile(statement); - final Document document = documentManager.getDocument(file); + final PsiFile jspFile = PsiUtilCore.getTemplateLanguageFile(statement); + final Document document = documentManager.getDocument(jspFile); if (document == null) { return; } @@ -167,10 +171,10 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix { document.replaceString(textRange.getStartOffset(), textRange.getEndOffset(), newStatementText); documentManager.commitDocument(document); - final JspxFileViewProvider viewProvider = file.getViewProvider(); + final FileViewProvider viewProvider = jspFile.getViewProvider(); PsiElement elementAt = viewProvider.findElementAt(textRange.getStartOffset(), - StdLanguages.JAVA); + JavaLanguage.INSTANCE); if (elementAt == null) { return; } @@ -211,13 +215,7 @@ public abstract class InspectionGadgetsFix implements LocalQuickFix { if (containingPsiFile == null) { return false; } - final VirtualFile virtualFile = containingPsiFile.getVirtualFile(); - final Project project = problemElement.getProject(); - final ReadonlyStatusHandler handler = - ReadonlyStatusHandler.getInstance(project); - final ReadonlyStatusHandler.OperationStatus status = - handler.ensureFilesWritable(virtualFile); - return status.hasReadonlyFiles(); + return !FileModificationService.getInstance().prepareFileForWrite(containingPsiFile); } protected static String getElementText(@NotNull PsiElement element, diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAssignedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ArrayContentsAssignedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAssignedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ArrayContentsAssignedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/BoolUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/BoolUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/BoolUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ClassUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ClassUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ClassUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/CloneUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CloneUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/CloneUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CloneUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/CollectionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CollectionUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/CollectionUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/CollectionUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ComparisonUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ComparisonUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ComparisonUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ComparisonUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ControlFlowUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ControlFlowUtils.java similarity index 98% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ControlFlowUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ControlFlowUtils.java index 7fe4542d12fd..278c07e980c0 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ControlFlowUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ControlFlowUtils.java @@ -16,8 +16,6 @@ package com.siyeh.ig.psiutils; import com.intellij.psi.*; -import com.intellij.psi.impl.source.jsp.jspJava.JspClassLevelDeclarationStatement; -import com.intellij.psi.impl.source.jsp.jspJava.JspTemplateStatement; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -94,7 +92,7 @@ public class ControlFlowUtils { else if (statement instanceof PsiSwitchStatement) { return switchStatementMayCompleteNormally((PsiSwitchStatement)statement); } - else if (statement instanceof JspTemplateStatement || statement instanceof JspClassLevelDeclarationStatement) { + else if (statement instanceof PsiTemplateStatement || statement instanceof PsiClassLevelDeclarationStatement) { return true; } else { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/EquivalenceChecker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/EquivalenceChecker.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/EquivalenceChecker.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExceptionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExceptionUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExceptionUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExceptionUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpectedTypeUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ExpressionUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/FinalUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/FinalUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FinalUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/FormatUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FormatUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/FormatUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/FormatUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ImportUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java similarity index 98% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ImportUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java index 4fc8a0b97d3e..b8abe0b47162 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ImportUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ImportUtils.java @@ -17,11 +17,12 @@ package com.siyeh.ig.psiutils; import com.intellij.openapi.project.Project; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleSettings; -import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.psi.codeStyle.JavaCodeStyleSettingsFacade; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.*; +import com.intellij.psi.util.ClassUtil; import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiUtil; import com.siyeh.HardcodedMethodConstants; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -424,9 +425,9 @@ public class ImportUtils { return false; } final List imports = getMatchingImports(importList, qualifiedName); - final CodeStyleSettings codeStyleSettings = CodeStyleSettingsManager.getSettings(project); + int onDemandCount = JavaCodeStyleSettingsFacade.getInstance(project).getNamesCountToUseImportOnDemand(); final PsiElementFactory elementFactory = psiFacade.getElementFactory(); - if (imports.size() < codeStyleSettings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND) { + if (imports.size() < onDemandCount) { importList.add(elementFactory.createImportStaticStatement(aClass, memberName)); } else { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InheritanceUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InheritanceUtil.java new file mode 100644 index 000000000000..cad11d3b0529 --- /dev/null +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InheritanceUtil.java @@ -0,0 +1,114 @@ +/* + * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers + * + * 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.siyeh.ig.psiutils; + +import com.intellij.openapi.progress.ProgressManager; +import com.intellij.psi.CommonClassNames; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiModifier; +import com.intellij.psi.PsiTypeParameter; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.SearchScope; +import com.intellij.psi.search.searches.ClassInheritorsSearch; +import com.intellij.util.Processor; +import com.intellij.util.Query; + +import java.util.concurrent.atomic.AtomicInteger; + +public class InheritanceUtil { + + private InheritanceUtil() {} + + public static boolean existsMutualSubclass(PsiClass class1, final PsiClass class2) { + if (class1 instanceof PsiTypeParameter) { + final PsiClass[] superClasses = class1.getSupers(); + for (PsiClass superClass : superClasses) { + if (!existsMutualSubclass(superClass, class2)) { + return false; + } + } + return true; + } + if (class2 instanceof PsiTypeParameter) { + return existsMutualSubclass(class2, class1); + } + + final String className = class1.getQualifiedName(); + if (CommonClassNames.JAVA_LANG_OBJECT.equals(className)) { + return true; + } + final String class2Name = class2.getQualifiedName(); + if (CommonClassNames.JAVA_LANG_OBJECT.equals(class2Name)) { + return true; + } + if (class1.isInheritor(class2, true) || + class2.isInheritor(class1, true)) { + return true; + } + final SearchScope scope = GlobalSearchScope.allScope(class1.getProject()); + final Query search = ClassInheritorsSearch.search(class1, scope, true, true); + return !search.forEach(new Processor() { + public boolean process(PsiClass inheritor) { + return !inheritor.equals(class2) && !inheritor.isInheritor(class2, true); + } + }); + } + + public static boolean hasImplementation(PsiClass aClass) { + final SearchScope scope = GlobalSearchScope.projectScope(aClass.getProject()); + final Query search = ClassInheritorsSearch.search(aClass, scope, true, true); + return !search.forEach(new Processor() { + @Override + public boolean process(PsiClass inheritor) { + return inheritor.isInterface() || inheritor.isAnnotationType() || inheritor.hasModifierProperty(PsiModifier.ABSTRACT); + } + }); + } + + public static boolean hasOneInheritor(final PsiClass aClass) { + final CountingProcessor processor = new CountingProcessor(2); + ProgressManager.getInstance().runProcess(new Runnable() { + @Override + public void run() { + ClassInheritorsSearch.search(aClass, aClass.getUseScope(), false).forEach(processor); + } + }, null); + return processor.getCount() == 1; + } + + public static class CountingProcessor implements Processor { + + private final AtomicInteger myCount = new AtomicInteger(0); + private final int myLimit; + + public CountingProcessor(int limit) { + myLimit = limit; + } + + public int getCount() { + return myCount.get(); + } + + @Override + public boolean process(PsiClass aClass) { + if (myCount.get() == myLimit){ + return false; + } + myCount.incrementAndGet(); + return true; + } + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/InitializationUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InitializationUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/InitializationUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InitializationUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/InstanceOfUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InstanceOfUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/InstanceOfUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/InstanceOfUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/IteratorUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IteratorUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/IteratorUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/IteratorUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/LibraryUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/LibraryUtil.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/LibraryUtil.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/LibraryUtil.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/MethodCallUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/MethodCallUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodCallUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/MethodUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/MethodUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/MethodUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ParenthesesUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ParenthesesUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/PsiElementOrderComparator.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/PsiElementOrderComparator.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/PsiElementOrderComparator.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/PsiElementOrderComparator.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/RecursionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/RecursionUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/RecursionUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/RecursionUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/RecursionVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/RecursionVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/RecursionVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/RecursionVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SerializationUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SerializationUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SerializationUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SerializationUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SideEffectChecker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SideEffectChecker.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SingletonUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SingletonUtil.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SingletonUtil.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SingletonUtil.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/StringUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/StringUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/StringUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/StringUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SwitchUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SwitchUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SwitchUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SynchronizationUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SynchronizationUtil.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/SynchronizationUtil.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SynchronizationUtil.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/TestUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/TestUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TestUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/TypeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/TypeUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/TypeUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UninitializedReadCollector.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/UninitializedReadCollector.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UninitializedReadCollector.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/UninitializedReadCollector.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/UtilityClassUtil.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/UtilityClassUtil.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/UtilityClassUtil.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAccessUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAccessUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAccessUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAccessUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAssignedFromVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAssignedFromVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAssignedFromVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAssignedFromVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAssignedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAssignedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableAssignedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableAssignedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentExcludedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariablePassedAsArgumentVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableReturnedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableReturnedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableReturnedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableReturnedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableSearchUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableSearchUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableSearchUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableSearchUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedInArrayInitializerVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedInArrayInitializerVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedInArrayInitializerVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedInArrayInitializerVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedInInnerClassVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedInInnerClassVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedInInnerClassVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedInInnerClassVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableUsedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableUsedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableValueUsedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableValueUsedVisitor.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/VariableValueUsedVisitor.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/VariableValueUsedVisitor.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WeakestTypeFinder.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/WellFormednessUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WellFormednessUtils.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/WellFormednessUtils.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/WellFormednessUtils.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/UnusedLabelInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/redundancy/UnusedLabelInspection.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/redundancy/UnusedLabelInspection.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/redundancy/UnusedLabelInspection.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java similarity index 69% rename from plugins/InspectionGadgets/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java index fda8a1ace0e0..db545713ebfc 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/telemetry/InspectionGadgetsTelemetry.java @@ -15,21 +15,25 @@ */ package com.siyeh.ig.telemetry; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class InspectionGadgetsTelemetry { + private static final InspectionGadgetsTelemetry telemetry = new InspectionGadgetsTelemetry(); + private static volatile boolean telemetryEnabled = false; private final ConcurrentHashMap inspectionRunTimes = - new ConcurrentHashMap(); + new ConcurrentHashMap(); public List buildList() { if (inspectionRunTimes.isEmpty()) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } - return new ArrayList(inspectionRunTimes.values()); + return new ArrayList(inspectionRunTimes.values()); } public void reportRun(String inspectionID, long runTime) { @@ -50,4 +54,20 @@ public class InspectionGadgetsTelemetry { public void reset() { inspectionRunTimes.clear(); } + + public static boolean isEnabled() { + return telemetryEnabled; + } + + public static void setEnabled(boolean enabled) { + telemetryEnabled = enabled; + if (telemetryEnabled) { + telemetry.reset(); + } + } + + @NotNull + public static InspectionGadgetsTelemetry getInstance() { + return telemetry; + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/telemetry/InspectionRunTime.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/telemetry/InspectionRunTime.java similarity index 100% rename from plugins/InspectionGadgets/src/com/siyeh/ig/telemetry/InspectionRunTime.java rename to plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/telemetry/InspectionRunTime.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsPlugin.iml b/plugins/InspectionGadgets/InspectionGadgetsPlugin.iml index 274a192e4953..b832ca8ad5b0 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsPlugin.iml +++ b/plugins/InspectionGadgets/InspectionGadgetsPlugin.iml @@ -17,6 +17,7 @@ + diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java index ad6ee1e33916..a21f451572fa 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java @@ -30,11 +30,7 @@ import org.jetbrains.annotations.NotNull; "OverlyLongMethod", "ClassWithTooManyMethods"}) public class InspectionGadgetsPlugin implements ApplicationComponent { - - private final InspectionGadgetsTelemetry telemetry = new InspectionGadgetsTelemetry(); - private volatile boolean telemetryEnabled = false; - - public static boolean getUpToDateTelemetryEnabled(final Consumer consumer, Disposable disposable) { + public static boolean getUpToDateTelemetryEnabled(@NotNull final Consumer consumer, @NotNull Disposable disposable) { final RegistryValue registryValue = Registry.get("inspectionGadgets.telemetry.enabled"); registryValue.addListener(new RegistryValueListener.Adapter() { @Override @@ -58,24 +54,24 @@ public class InspectionGadgetsPlugin implements ApplicationComponent { return "InspectionGadgets"; } + @NotNull public InspectionGadgetsTelemetry getTelemetry() { - return telemetry; + return InspectionGadgetsTelemetry.getInstance(); } @Override public void initComponent() { - telemetryEnabled = getUpToDateTelemetryEnabled(new Consumer() { + boolean telemetryEnabled = getUpToDateTelemetryEnabled(new Consumer() { @Override public void consume(Boolean value) { - telemetryEnabled = value.booleanValue(); - if (telemetryEnabled) { - telemetry.reset(); - } + boolean enabled = value.booleanValue(); + InspectionGadgetsTelemetry.setEnabled(enabled); } }, ApplicationManager.getApplication()); + InspectionGadgetsTelemetry.setEnabled(telemetryEnabled); } public boolean isTelemetryEnabled() { - return telemetryEnabled; + return InspectionGadgetsTelemetry.isEnabled(); } }