From 0639ae696e63da9465df9463b246eac573ba0b4a Mon Sep 17 00:00:00 2001 From: JohnHake Date: Sun, 24 Mar 2019 21:46:05 -0700 Subject: [PATCH 1/6] Rewrite comparing references inspection Rewrite inspections tutorial doc --- .../comparing_references_inspection.iml | 4 +- .../resources/META-INF/plugin.xml | 72 +++++++ .../ComparingReferences.html | 7 + .../source/META-INF/plugin.xml | 14 -- .../ComparingReferencesInspection.java | 196 +++++++++++------- .../ComparingReferencesProvider.java | 2 + .../ComparingReferences.html | 7 - .../testSource/testPlugin/TestThisPlugin.java | 63 +++--- .../META-INF/plugin.xml | 27 --- .../conditional_operator_intention.iml | 3 +- .../resources/META-INF/plugin.xml | 46 ++++ .../after.java.template | 0 .../before.java.template | 0 .../description.html | 7 + .../ConditionalOperatorConvertor.java | 17 +- .../description.html | 5 - .../testSource/testPlugin/YourTest.java | 4 +- inspection/resources/META-INF/plugin.xml | 64 +++++- .../inspectionDescriptions/DemoCode.html | 9 + .../inspection/DemoCodeInspection.java | 23 +- .../DemoInspectionToolProvider.java | 2 + .../inspection/DemoInspectionVisitor.java | 2 + .../src/inspectionDescriptions/DemoCode.html | 7 - 23 files changed, 393 insertions(+), 188 deletions(-) create mode 100644 comparing_references_inspection/resources/META-INF/plugin.xml create mode 100644 comparing_references_inspection/resources/inspectionDescriptions/ComparingReferences.html delete mode 100644 comparing_references_inspection/source/META-INF/plugin.xml delete mode 100644 comparing_references_inspection/source/inspectionDescriptions/ComparingReferences.html delete mode 100644 conditional_operator_intention/META-INF/plugin.xml create mode 100644 conditional_operator_intention/resources/META-INF/plugin.xml rename conditional_operator_intention/{source/intentionDescriptions/ConditionalOperatorConvertor => resources/intentionDescriptions/ConditionalOperatorIntention}/after.java.template (100%) rename conditional_operator_intention/{source/intentionDescriptions/ConditionalOperatorConvertor => resources/intentionDescriptions/ConditionalOperatorIntention}/before.java.template (100%) create mode 100644 conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/description.html delete mode 100644 conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/description.html create mode 100644 inspection/resources/inspectionDescriptions/DemoCode.html delete mode 100644 inspection/src/inspectionDescriptions/DemoCode.html diff --git a/comparing_references_inspection/comparing_references_inspection.iml b/comparing_references_inspection/comparing_references_inspection.iml index 3b8cfcf82..5d66bce80 100644 --- a/comparing_references_inspection/comparing_references_inspection.iml +++ b/comparing_references_inspection/comparing_references_inspection.iml @@ -1,11 +1,13 @@ - + + + diff --git a/comparing_references_inspection/resources/META-INF/plugin.xml b/comparing_references_inspection/resources/META-INF/plugin.xml new file mode 100644 index 000000000..8b98734f3 --- /dev/null +++ b/comparing_references_inspection/resources/META-INF/plugin.xml @@ -0,0 +1,72 @@ + + + + + org.intelliJ.sdk.codeInspection + + + SDK Comparing References Inspection Sample + + + 1.1.0 + + + + + + + Adds entries to Preferences | Editor | Inspections | Java | Probable Bugs. + ]]> + + + +
  • 1.1.0 Refactor resources, register this inspection.
  • +
  • 1.0.0 Release 2018.3 and earlier.
  • + + ]]> +
    + + + IntelliJ Platform SDK + + + + + + + + +
    diff --git a/comparing_references_inspection/resources/inspectionDescriptions/ComparingReferences.html b/comparing_references_inspection/resources/inspectionDescriptions/ComparingReferences.html new file mode 100644 index 000000000..e6eb316ea --- /dev/null +++ b/comparing_references_inspection/resources/inspectionDescriptions/ComparingReferences.html @@ -0,0 +1,7 @@ + + +SDK: This inspection reports when the '==' or '!=' operator was used between expressions of +reference types.
    +Classes to be inspected are controlled by a semi-colon separated Options list in the preferences panel for this inspection. + + diff --git a/comparing_references_inspection/source/META-INF/plugin.xml b/comparing_references_inspection/source/META-INF/plugin.xml deleted file mode 100644 index 83c40f850..000000000 --- a/comparing_references_inspection/source/META-INF/plugin.xml +++ /dev/null @@ -1,14 +0,0 @@ - - Comparing References Inspection - Inspection for (probably) inappropriate use of equality relation operation. - 1.0 - JetBrains - - - - - - - diff --git a/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesInspection.java b/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesInspection.java index b7330bb8c..907ca82f6 100644 --- a/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesInspection.java +++ b/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesInspection.java @@ -1,105 +1,167 @@ package com.intellij.codeInspection; -import com.intellij.codeInsight.daemon.GroupNames; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.ui.DocumentAdapter; import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.*; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.*; import java.util.StringTokenizer; +import static com.siyeh.ig.psiutils.ExpressionUtils.isNullLiteral; + /** * @author max + * @author jhake */ public class ComparingReferencesInspection extends AbstractBaseJavaLocalInspectionTool { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.ComparingReferencesInspection"); - - private final LocalQuickFix myQuickFix = new MyQuickFix(); - + private final CriQuickFix myQuickFix = new CriQuickFix(); + + // Defines the text of the quick fix intention + public static final String QUICK_FIX_NAME = "SDK: " + InspectionsBundle.message("inspection.comparing.references.use.quickfix"); + + // This string holds a list of classes relevant to this inspection. @SuppressWarnings({"WeakerAccess"}) @NonNls public String CHECKED_CLASSES = "java.lang.String;java.util.Date"; - @NonNls - private static final String DESCRIPTION_TEMPLATE = - InspectionsBundle.message("inspection.comparing.references.problem.descriptor"); - - @NotNull - public String getDisplayName() { - - return "'==' or '!=' instead of 'equals()'"; + + /** + * This method is called to get the panel describing the inspection. + * It is called every time the user selects the inspection in preferences. + * The user has the option to edit the list of CHECKED_CLASSES. + * Adds a document listener to see if + * + * @return panel to display inspection information. + */ + @Override + public JComponent createOptionsPanel() { + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + final JTextField checkedClasses = new JTextField(CHECKED_CLASSES); + checkedClasses.getDocument().addDocumentListener(new DocumentAdapter() { + public void textChanged(DocumentEvent event) { + CHECKED_CLASSES = checkedClasses.getText(); + } + }); + panel.add(checkedClasses); + return panel; } - - @NotNull - public String getGroupDisplayName() { - return GroupNames.BUGS_GROUP_NAME; - } - - @NotNull - public String getShortName() { - return "ComparingReferences"; - } - - private boolean isCheckedType(PsiType type) { - if (!(type instanceof PsiClassType)) return false; - - StringTokenizer tokenizer = new StringTokenizer(CHECKED_CLASSES, ";"); - while (tokenizer.hasMoreTokens()) { - String className = tokenizer.nextToken(); - if (type.equalsToText(className)) return true; - } - - return false; - } - + + /** + * This method is overridden to provide a custom visitor + * that inspects expressions with relational operators '==' and '!=' + * The visitor must not be recursive and must be thread-safe. + * + * @param holder object for visitor to register problems found. + * @param isOnTheFly true if inspection was run in non-batch mode + * @return non-null visitor for this inspection. + * @see JavaElementVisitor + */ @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { return new JavaElementVisitor() { - + + /** + * This string defines the short message shown to a user signaling the inspection + * found a problem. It reuses a string from the inspections bundle. + */ + @NonNls + private final String DESCRIPTION_TEMPLATE = "SDK " + InspectionsBundle.message("inspection.comparing.references.problem.descriptor"); + + /** + * Avoid defining visitors for both Reference and Binary expressions. + * + * @param psiReferenceExpression The expression to be evaluated. + */ @Override public void visitReferenceExpression(PsiReferenceExpression psiReferenceExpression) { } - - + + /** + * Evaluate binary psi expressions to see if they contain + * relational operators '==' and '!=', AND they contain + * classes contained in CHECKED_CLASSES. The evaluation + * ignores expressions comparing an object to null. + * IF this criteria is met, add the expression to the + * problems list. + * + * @param expression The binary expression to be evaluated. + */ @Override public void visitBinaryExpression(PsiBinaryExpression expression) { super.visitBinaryExpression(expression); IElementType opSign = expression.getOperationTokenType(); if (opSign == JavaTokenType.EQEQ || opSign == JavaTokenType.NE) { + // The binary expression is the correct type for this inspection PsiExpression lOperand = expression.getLOperand(); PsiExpression rOperand = expression.getROperand(); - if (rOperand == null || isNullLiteral(lOperand) || isNullLiteral(rOperand)) return; - + if (rOperand == null || isNullLiteral(lOperand) || isNullLiteral(rOperand)) + return; + // Nothing is compared to null, now check the types being compared PsiType lType = lOperand.getType(); PsiType rType = rOperand.getType(); - if (isCheckedType(lType) || isCheckedType(rType)) { + // Identified an expression with potential problems, add to list with fix object. holder.registerProblem(expression, DESCRIPTION_TEMPLATE, myQuickFix); } } } + + /** + * Verifies the input is the correct {@code PsiType} for this inspection. + * + * @param type The {@code PsiType} to be examined for a match + * @return {@code true} if input is {@code PsiClassType} and matches + * one of the classes in the CHECKED_CLASSES list. + */ + private boolean isCheckedType(PsiType type) { + if (!(type instanceof PsiClassType)) + return false; + StringTokenizer tokenizer = new StringTokenizer(CHECKED_CLASSES, ";"); + while (tokenizer.hasMoreTokens()) { + String className = tokenizer.nextToken(); + if (type.equalsToText(className)) + return true; + } + return false; + } + }; } - - private static boolean isNullLiteral(PsiExpression expr) { - return expr instanceof PsiLiteralExpression && "null".equals(expr.getText()); - } - - private static class MyQuickFix implements LocalQuickFix { + + /** + * This class provides a solution to inspection problem expressions by manipulating + * the PSI tree to use a.equals(b) instead of '==' or '!=' + */ + private static class CriQuickFix implements LocalQuickFix { + + /** + * Returns a partially localized string for the quick fix intention. + * Used by the test code for this plugin. + * + * @return Quick fix short name. + */ @NotNull + @Override public String getName() { - // The test (see the TestThisPlugin class) uses this string to identify the quick fix action. - return InspectionsBundle.message("inspection.comparing.references.use.quickfix"); + return QUICK_FIX_NAME; } - - + + /** + * This method manipulates the PSI tree to replace 'a==b' with 'a.equals(b) + * or 'a!=b' with '!a.equals(b)' + * + * @param project The project that contains the file being edited. + * @param descriptor A problem found by this inspection. + */ public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { try { PsiBinaryExpression binaryExpression = (PsiBinaryExpression) descriptor.getPsiElement(); @@ -108,16 +170,16 @@ public class ComparingReferencesInspection extends AbstractBaseJavaLocalInspecti PsiExpression rExpr = binaryExpression.getROperand(); if (rExpr == null) return; - + PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory(); PsiMethodCallExpression equalsCall = - (PsiMethodCallExpression) factory.createExpressionFromText("a.equals(b)", null); - + (PsiMethodCallExpression) factory.createExpressionFromText("a.equals(b)", null); + equalsCall.getMethodExpression().getQualifierExpression().replace(lExpr); equalsCall.getArgumentList().getExpressions()[0].replace(rExpr); - + PsiExpression result = (PsiExpression) binaryExpression.replace(equalsCall); - + if (opSign == JavaTokenType.NE) { PsiPrefixExpression negation = (PsiPrefixExpression) factory.createExpressionFromText("!a", null); negation.getOperand().replace(result); @@ -127,27 +189,11 @@ public class ComparingReferencesInspection extends AbstractBaseJavaLocalInspecti LOG.error(e); } } - + @NotNull public String getFamilyName() { return getName(); } } - - public JComponent createOptionsPanel() { - JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); - final JTextField checkedClasses = new JTextField(CHECKED_CLASSES); - checkedClasses.getDocument().addDocumentListener(new DocumentAdapter() { - public void textChanged(DocumentEvent event) { - CHECKED_CLASSES = checkedClasses.getText(); - } - }); - - panel.add(checkedClasses); - return panel; - } - - public boolean isEnabledByDefault() { - return true; - } + } diff --git a/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesProvider.java b/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesProvider.java index 980777846..6553f9857 100644 --- a/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesProvider.java +++ b/comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesProvider.java @@ -1,6 +1,8 @@ package com.intellij.codeInspection; /** + * This class provides a list of inspections (classes) for this plugin. + * Each inspection class should have a corresponding entry in plugin.xml * @author max */ public class ComparingReferencesProvider implements InspectionToolProvider { diff --git a/comparing_references_inspection/source/inspectionDescriptions/ComparingReferences.html b/comparing_references_inspection/source/inspectionDescriptions/ComparingReferences.html deleted file mode 100644 index ca5f9d5ee..000000000 --- a/comparing_references_inspection/source/inspectionDescriptions/ComparingReferences.html +++ /dev/null @@ -1,7 +0,0 @@ - - -This inspection reports when the '==' or '!=' operator was used between expressions of -reference types.
    -In the text field below, specify the semicolon separated list of classes to be considered as suspicious. - - diff --git a/comparing_references_inspection/testSource/testPlugin/TestThisPlugin.java b/comparing_references_inspection/testSource/testPlugin/TestThisPlugin.java index 818494431..4a1092467 100644 --- a/comparing_references_inspection/testSource/testPlugin/TestThisPlugin.java +++ b/comparing_references_inspection/testSource/testPlugin/TestThisPlugin.java @@ -4,73 +4,84 @@ package testPlugin; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.ComparingReferencesInspection; -import com.intellij.codeInspection.InspectionToolProvider; -import com.intellij.testFramework.TestDataPath; +import com.intellij.openapi.application.PathManager; import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; import com.intellij.testFramework.fixtures.*; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** * @see JavaCodeInsightFixtureTestCase * @see LightCodeInsightFixtureTestCase */ -@TestDataPath("$CONTENT_ROOT/../testData") public class TestThisPlugin extends UsefulTestCase { - + protected CodeInsightTestFixture myFixture; - // TODO: Get path to module root, then add path to testData - // Specify path to your test data directory - // e.g. final String dataPath = "c:\\users\\john.doe\\idea\\community\\samples\\ComparingReferences/testData"; - final String dataPath = "c:\\users\\John.Doe\\idea\\community\\samples\\comparingReferences/testData"; - + // Specify the path to the test data directory + final String dataPath = PathManager.getResourceRoot(TestThisPlugin.class, "/testPlugin/TestThisPlugin.class"); + + @Before public void setUp() throws Exception { - + final IdeaTestFixtureFactory fixtureFactory = IdeaTestFixtureFactory.getFixtureFactory(); final TestFixtureBuilder testFixtureBuilder = - fixtureFactory.createFixtureBuilder(getName()); + fixtureFactory.createFixtureBuilder(getName()); myFixture = JavaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(testFixtureBuilder.getFixture()); myFixture.setTestDataPath(dataPath); final JavaModuleFixtureBuilder builder = testFixtureBuilder.addModule(JavaModuleFixtureBuilder.class); - + builder.addContentRoot(myFixture.getTempDirPath()).addSourceRoot(""); builder.setMockJdkLevel(JavaModuleFixtureBuilder.MockJdkLevel.jdk15); myFixture.setUp(); } - + + @After public void tearDown() throws Exception { myFixture.tearDown(); myFixture = null; } - + protected void doTest(String testName, String hint) throws Throwable { myFixture.configureByFile(testName + ".java"); - + myFixture.enableInspections(ComparingReferencesInspection.class); List highlightInfos = myFixture.doHighlighting(); Assert.assertTrue(!highlightInfos.isEmpty()); - + final IntentionAction action = myFixture.findSingleIntention(hint); - + Assert.assertNotNull(action); myFixture.launchAction(action); myFixture.checkResultByFile(testName + ".after.java"); } - - // Test the "==" case + + /** + * Test the "==" case + * Note the hint must match CriQuickFix#getName + * + * @throws Throwable + */ + @Test public void test() throws Throwable { - doTest("before", "Use equals()"); +// doTest("before", "Use equals()"); + doTest("before", ComparingReferencesInspection.QUICK_FIX_NAME); } - - // Test the "!=" case + + /** + * Test the "!=" case + * Note the hint must match CriQuickFix#getName + * @throws Throwable + */ + @Test public void test1() throws Throwable { - doTest("before1", "Use equals()"); + doTest("before1", ComparingReferencesInspection.QUICK_FIX_NAME); } - + } diff --git a/conditional_operator_intention/META-INF/plugin.xml b/conditional_operator_intention/META-INF/plugin.xml deleted file mode 100644 index c2d00efb4..000000000 --- a/conditional_operator_intention/META-INF/plugin.xml +++ /dev/null @@ -1,27 +0,0 @@ - - Conditional Operator Converter - ConditionalOperatorConverter - Intention action that suggests to convert a conditional operator into - 'if' block. - - 1.3 - JetBrains - - - - - com.intellij.codeInsight.intention.ConditionalOperatorConvertor - Conditional Operator - ConditionalOperatorConvertor - - - - - - - com.intellij.codeInsight.intention.ConditionalOperatorConvertor - - - diff --git a/conditional_operator_intention/conditional_operator_intention.iml b/conditional_operator_intention/conditional_operator_intention.iml index 636ca6e47..bf37e0852 100644 --- a/conditional_operator_intention/conditional_operator_intention.iml +++ b/conditional_operator_intention/conditional_operator_intention.iml @@ -1,12 +1,13 @@ - + + diff --git a/conditional_operator_intention/resources/META-INF/plugin.xml b/conditional_operator_intention/resources/META-INF/plugin.xml new file mode 100644 index 000000000..532489fcd --- /dev/null +++ b/conditional_operator_intention/resources/META-INF/plugin.xml @@ -0,0 +1,46 @@ + + + + + ConditionalOperatorConverter + + + SDK Conditional Operator Converter + + + 1.4.0 + + + + + + + Adds entry to Preferences | Editor | Intentions | SDK Intentions. + ]]> + + + +
  • 1.4.0 Refactor resources, general cleanup.
  • +
  • 1.3.0 Release 2018.3 and earlier.
  • + + ]]> +
    + + + IntelliJ Platform SDK + + + + com.intellij.codeInsight.intention.ConditionalOperatorConvertor + SDK Intentions + + + + + + com.intellij.codeInsight.intention.ConditionalOperatorConvertor + + +
    diff --git a/conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/after.java.template b/conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/after.java.template similarity index 100% rename from conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/after.java.template rename to conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/after.java.template diff --git a/conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/before.java.template b/conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/before.java.template similarity index 100% rename from conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/before.java.template rename to conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/before.java.template diff --git a/conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/description.html b/conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/description.html new file mode 100644 index 000000000..13d00196c --- /dev/null +++ b/conditional_operator_intention/resources/intentionDescriptions/ConditionalOperatorIntention/description.html @@ -0,0 +1,7 @@ + + + + +SDK: This intention converts a ternary operator to a corresponding if statement.
    + + \ No newline at end of file diff --git a/conditional_operator_intention/source/com/intellij/codeInsight/intention/ConditionalOperatorConvertor.java b/conditional_operator_intention/source/com/intellij/codeInsight/intention/ConditionalOperatorConvertor.java index 6c8865f87..2addade75 100644 --- a/conditional_operator_intention/source/com/intellij/codeInsight/intention/ConditionalOperatorConvertor.java +++ b/conditional_operator_intention/source/com/intellij/codeInsight/intention/ConditionalOperatorConvertor.java @@ -1,6 +1,5 @@ -/* - * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. - */ + +// Copyright 2000-2019 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.codeInsight.intention; @@ -26,21 +25,21 @@ public class ConditionalOperatorConvertor extends PsiElementBaseIntentionAction */ @NotNull public String getText() { - return "Convert ternary operator to if statement"; + return "SDK Convert ternary operator to if statement"; } /** * Returns text for name of this family of intentions. It is used to externalize - * "auto-show" state of intentions. Only one intention action is being provided, - * so the family name is the same text as the intention action list entry. + * "auto-show" state of intentions. + * It is also the directory name for the descriptions. * - * @return the intention family name. - * @see ConditionalOperatorConvertor#getText() + * @see com.intellij.codeInsight.intention.IntentionManager#registerIntentionAndMetaData(IntentionAction, String...) + * @return the intention family name. */ @NotNull public String getFamilyName() { - return getText(); + return "ConditionalOperatorIntention"; } diff --git a/conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/description.html b/conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/description.html deleted file mode 100644 index 6ae92607a..000000000 --- a/conditional_operator_intention/source/intentionDescriptions/ConditionalOperatorConvertor/description.html +++ /dev/null @@ -1,5 +0,0 @@ - - -This intention converts a ternary operator to a corresponding if statement.
    - - \ No newline at end of file diff --git a/conditional_operator_intention/testSource/testPlugin/YourTest.java b/conditional_operator_intention/testSource/testPlugin/YourTest.java index 5738e1d08..18ddc8ebf 100644 --- a/conditional_operator_intention/testSource/testPlugin/YourTest.java +++ b/conditional_operator_intention/testSource/testPlugin/YourTest.java @@ -1,3 +1,5 @@ +// Copyright 2000-2019 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 testPlugin; import com.intellij.codeInsight.intention.IntentionAction; @@ -52,7 +54,7 @@ public class YourTest extends UsefulTestCase { @Test public void test() { - doTest("before.template", "Convert ternary operator to if statement"); + doTest("before.template", "SDK Convert ternary operator to if statement"); } } diff --git a/inspection/resources/META-INF/plugin.xml b/inspection/resources/META-INF/plugin.xml index 5bcfd22fc..c52688c36 100644 --- a/inspection/resources/META-INF/plugin.xml +++ b/inspection/resources/META-INF/plugin.xml @@ -1,15 +1,67 @@ + + + com.intellij.tutorials.inspection - Inspection Demo - 1.0 - JetBrains - Basic example of working with code inspections + + SDK Inspection Demo - + + 1.1.0 + + + + + + + Preferences | Editor | Inspections | SDK | Example Tools
    . + ]]> + + + +
  • 1.1.0 Refactor resources, add "SDK" to description.
  • +
  • 1.0.0 Release 2018.3 and earlier.
  • + + ]]> +
    + + + IntelliJ Platform SDK - + + + \ No newline at end of file diff --git a/inspection/resources/inspectionDescriptions/DemoCode.html b/inspection/resources/inspectionDescriptions/DemoCode.html new file mode 100644 index 000000000..a0f233f09 --- /dev/null +++ b/inspection/resources/inspectionDescriptions/DemoCode.html @@ -0,0 +1,9 @@ + + + + +SDK: Write your description here.
    + +Text after this comment will not be shown in tooltips. + + \ No newline at end of file diff --git a/inspection/src/com/intellij/tutorials/inspection/DemoCodeInspection.java b/inspection/src/com/intellij/tutorials/inspection/DemoCodeInspection.java index def683732..68c29dab7 100644 --- a/inspection/src/com/intellij/tutorials/inspection/DemoCodeInspection.java +++ b/inspection/src/com/intellij/tutorials/inspection/DemoCodeInspection.java @@ -1,19 +1,24 @@ +// Copyright 2000-2019 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.tutorials.inspection; -import com.intellij.codeInspection.*; -import org.jetbrains.annotations.*; +import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.ProblemsHolder; +import org.jetbrains.annotations.NotNull; /** * @author Anna Bulenkova */ public class DemoCodeInspection extends LocalInspectionTool { - @Nls - @NotNull - @Override - public String getDisplayName() { - return "Demo Inspection"; - } - + + /** + * This method is overridden to provide a custom visitor + * The visitor must not be recursive and must be thread-safe. + * + * @param holder object for visitor to register problems found. + * @param isOnTheFly true if inspection was run in non-batch mode + * @return DemoInspectionVisitor. + */ @NotNull @Override public DemoInspectionVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { diff --git a/inspection/src/com/intellij/tutorials/inspection/DemoInspectionToolProvider.java b/inspection/src/com/intellij/tutorials/inspection/DemoInspectionToolProvider.java index 342f2c42a..67d57a7c8 100644 --- a/inspection/src/com/intellij/tutorials/inspection/DemoInspectionToolProvider.java +++ b/inspection/src/com/intellij/tutorials/inspection/DemoInspectionToolProvider.java @@ -1,3 +1,5 @@ +// Copyright 2000-2019 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.tutorials.inspection; import com.intellij.codeInspection.InspectionToolProvider; diff --git a/inspection/src/com/intellij/tutorials/inspection/DemoInspectionVisitor.java b/inspection/src/com/intellij/tutorials/inspection/DemoInspectionVisitor.java index 1dc8bf73b..aa93038b1 100644 --- a/inspection/src/com/intellij/tutorials/inspection/DemoInspectionVisitor.java +++ b/inspection/src/com/intellij/tutorials/inspection/DemoInspectionVisitor.java @@ -1,3 +1,5 @@ +// Copyright 2000-2019 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.tutorials.inspection; import com.intellij.psi.*; diff --git a/inspection/src/inspectionDescriptions/DemoCode.html b/inspection/src/inspectionDescriptions/DemoCode.html deleted file mode 100644 index 942f318aa..000000000 --- a/inspection/src/inspectionDescriptions/DemoCode.html +++ /dev/null @@ -1,7 +0,0 @@ - - -Write your description here. - -Text after this comment will not be shown in tooltips. - - \ No newline at end of file From f94bfa4c7193ca28563bcac335162ab6304eb24e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 17 Apr 2019 16:13:46 +0200 Subject: [PATCH 2/6] gradline-intellij plugin 0.4.8 --- gradle_plugin_demo/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle_plugin_demo/build.gradle b/gradle_plugin_demo/build.gradle index e4a666d54..07d203504 100644 --- a/gradle_plugin_demo/build.gradle +++ b/gradle_plugin_demo/build.gradle @@ -1,3 +1,3 @@ plugins { - id "org.jetbrains.intellij" version "0.4.7" + id "org.jetbrains.intellij" version "0.4.8" } From bdba2be1827aab15d567946963f89b395e318305 Mon Sep 17 00:00:00 2001 From: JohnHake Date: Mon, 22 Apr 2019 15:05:35 -0700 Subject: [PATCH 3/6] Deleted shortName and provider classes. --- .../resources/META-INF/plugin.xml | 10 ++++------ .../ComparingReferencesProvider.java | 12 ------------ .../resources/META-INF/plugin.xml | 2 +- inspection/resources/META-INF/plugin.xml | 10 ++++------ .../inspection/DemoInspectionToolProvider.java | 14 -------------- 5 files changed, 9 insertions(+), 39 deletions(-) delete mode 100644 comparing_references_inspection/source/com/intellij/codeInspection/ComparingReferencesProvider.java delete mode 100644 inspection/src/com/intellij/tutorials/inspection/DemoInspectionToolProvider.java diff --git a/comparing_references_inspection/resources/META-INF/plugin.xml b/comparing_references_inspection/resources/META-INF/plugin.xml index 8b98734f3..6823355cb 100644 --- a/comparing_references_inspection/resources/META-INF/plugin.xml +++ b/comparing_references_inspection/resources/META-INF/plugin.xml @@ -29,7 +29,7 @@ - IntelliJ Platform SDK + IntelliJ Platform SDK @@ -40,9 +40,8 @@ @see intellij.platform.resources.LangExtensionPoints @see com.intellij.codeInspection.InspectionProfileEntry Attributes: - language= Defines the type of file (in this case java source) for this inspection. Not localized - shortName= The default name for the inspection, e.g. the default - for name for the description file "ComparingReferences.html". Not localized. + language= Language ID + shortName= Not specified, will be computed by the underlying implementation classes. displayName= The string to be shown in the Preferences | Editor | Inspections panel The displayName gets registered to identify this inspection. Can be localized using key= and bundle= attributes instead. @@ -55,10 +54,9 @@ enabledByDefault= Inspection state when Inspections panel is created. level= The default level of error found by this inspection, e.g. INFO, ERROR, etc. @see com.intellij.codeHighlighting.HighlightDisplayLevel - inplementationClass= package.className of implementation + inplementationClass= FQN of inspection implementation --> - IntelliJ Platform SDK + IntelliJ Platform SDK diff --git a/inspection/resources/META-INF/plugin.xml b/inspection/resources/META-INF/plugin.xml index c52688c36..42d4becf3 100644 --- a/inspection/resources/META-INF/plugin.xml +++ b/inspection/resources/META-INF/plugin.xml @@ -29,7 +29,7 @@ - IntelliJ Platform SDK + IntelliJ Platform SDK @@ -40,9 +40,8 @@ @see intellij.platform.resources.LangExtensionPoints @see com.intellij.codeInspection.InspectionProfileEntry Attributes: - language= Defines the type of file (in this case java source) for this inspection. Not localized - shortName= The default name for the inspection, e.g. the default - for name for the description file "DemoCode.html". Not localized. + language= Language ID + shortName= Not specified, will be computed by the underlying implementation classes. displayName= The string to be shown in the Preferences | Editor | Inspections panel The displayName gets registered to identify this inspection. Can be localized using key= and bundle= attributes instead. @@ -52,10 +51,9 @@ enabledByDefault= Inspection state when Inspections panel is created. level= The default level of error found by this inspection, e.g. INFO, ERROR, etc. @see com.intellij.codeHighlighting.HighlightDisplayLevel - inplementationClass= package.className of inspection implementation + inplementationClass= FQN of inspection implementation --> Date: Thu, 23 May 2019 16:38:00 +0200 Subject: [PATCH 4/6] IJSDK-608 plugin.xml: is unused --- plugin_sample/resources/META-INF/plugin.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugin_sample/resources/META-INF/plugin.xml b/plugin_sample/resources/META-INF/plugin.xml index c5a4a39d9..0691a7018 100644 --- a/plugin_sample/resources/META-INF/plugin.xml +++ b/plugin_sample/resources/META-INF/plugin.xml @@ -21,10 +21,6 @@ - - - From 53bfffad96327d75ac65ea0a1b4d8f5aeba21a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Mon, 3 Jun 2019 13:37:52 +0200 Subject: [PATCH 5/6] use HTTPS in all links --- editor_basics/resources/META-INF/plugin.xml | 2 +- plugin_sample/resources/META-INF/plugin.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/editor_basics/resources/META-INF/plugin.xml b/editor_basics/resources/META-INF/plugin.xml index 42fc7b342..54a8229dd 100644 --- a/editor_basics/resources/META-INF/plugin.xml +++ b/editor_basics/resources/META-INF/plugin.xml @@ -2,7 +2,7 @@ org.jetbrains.plugins.sample.EditorBasics Editor basics 1.0 - JetBrains + JetBrains Illustration of various basic Editor APIs diff --git a/plugin_sample/resources/META-INF/plugin.xml b/plugin_sample/resources/META-INF/plugin.xml index 0691a7018..3e5c5b65e 100644 --- a/plugin_sample/resources/META-INF/plugin.xml +++ b/plugin_sample/resources/META-INF/plugin.xml @@ -2,7 +2,7 @@ org.jetbrains.plugins.sample.PluginSample Basic plugin example 1.0 - JetBrains + JetBrains Samples From f26ffb078966480bf9994c9cfe88b87f9cfbf149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 11 Jun 2019 18:04:39 +0200 Subject: [PATCH 6/6] inspection sample: fix typo --- inspection/resources/META-INF/plugin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inspection/resources/META-INF/plugin.xml b/inspection/resources/META-INF/plugin.xml index 42d4becf3..43062a08a 100644 --- a/inspection/resources/META-INF/plugin.xml +++ b/inspection/resources/META-INF/plugin.xml @@ -51,7 +51,7 @@ enabledByDefault= Inspection state when Inspections panel is created. level= The default level of error found by this inspection, e.g. INFO, ERROR, etc. @see com.intellij.codeHighlighting.HighlightDisplayLevel - inplementationClass= FQN of inspection implementation + implementationClass= FQN of inspection implementation -->