IntelliJ Platform SDK DevGuide

Edit page

Incompatible Changes in IntelliJ Platform and Plugins API 2020.*

Please see Incompatible API Changes on how to verify compatibility.

2020.2

Changes in IntelliJ Platform 2020.2

com.intellij.psi.util.PsiTreeUtil.processElements(element, processor) method parameter type changed from PsiElementProcessor to PsiElementProcessor<PsiElement>
This may break source-compatibility with clients that pass more specific processor. Passing more specific processor was illegal before as well because the processElements passes every descendant PsiElement to the processor regardless of its type. However, this worked with some poorly written clients, e.g. PsiElementProcessor.CollectFilteredElements and PsiElementProcessor.FindFilteredElement (both deprecated now). To simplify the migration, a new three-arg processElements(element, elementClass, processor) is introduced that actually filters by element class, so in most cases, the simplest migration would be to add a wanted element class as a second argument. However, it’s advised to use SyntaxTraverser API instead, which is more rich and flexible.

2020.1

Changes in IntelliJ Platform 2020.1

com.intellij.compiler.ant package removed
‘Generate Ant build’ functionality is removed from the IDE. Delete the code extending this or replace it with a dependency on the generate-ant plugin.
org.jetbrains.jps.incremental.ModuleLevelBuilder.getCompilableFileExtensions marked abstract
Implement it in ModuleLevelBuilder’s implementation.
com.intellij.codeInsight.TargetElementUtilBase class removed
Use com.intellij.codeInsight.TargetElementUtil instead.
com.intellij.psi.stubs.PrebuiltStubsProviderBase class now extends com.intellij.index.PrebuiltIndexProvider and inherits its abstract method getIndexRoot()
Use com.intellij.psi.stubs.PlatformPrebuiltStubsProviderBase instead.
com.intellij.psi.PsiElementVisitor.visitElement method PsiElement parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitFile method PsiFile parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitBinaryFile method PsiBinaryFile parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitPlainTextFile method PsiPlainTextFile parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitErrorElement method PsiErrorElement parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitPlainText method PsiPlainText parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitDirectory method PsiDirectory parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitComment method PsiComment parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitWhiteSpace method PsiWhiteSpace parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.psi.PsiElementVisitor.visitOuterLanguageElement method OuterLanguageElement parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.codeInspection.unused.ImplicitPropertyUsageProvider.isUsed method Property parameter marked @NotNull
This may break source-compatibility with inheritors written in Kotlin if they declare parameter type as nullable.
com.intellij.lang.ReadOnlyASTNode class removed
Use com.intellij.testFramework.ReadOnlyLightVirtualFile-based PSI instead.
Java code migrated to use TYPE_USE nullability annotations
Due to some problems in Kotlin compiler existing Kotlin code might become incompilable in rare cases if a method written in Java returning an array and annotated as @Nullable or @NotNull is used or overridden.
com.intellij.navigation.ChooseByNameContributorEx.processNames method parameter type changed from Processor<String> to Processor<? extends String>
This may break source-compatibility with inheritors written in Kotlin.
com.intellij.navigation.ChooseByNameContributorEx.processElementsWithName method parameter type changed from Processor<NavigationItem> to Processor<? extends NavigationItem>
This may break source-compatibility with inheritors written in Kotlin.
Images module functionality (package org.intellij.images.*) extracted to plugin
The dependency must be declared explicitly now:
  • Add <depends>com.intellij.platform.images</depends> in plugin.xml
  • Add to build.gradle:
    intellij { plugins = ['platform-images'] }

Changes in Python plugin 2020.1

com.jetbrains.python.psi.PyCallExpression.PyMarkedCallee class removed
Use com.jetbrains.python.psi.types.PyCallableType instead.
com.jetbrains.python.psi.PyCallExpression.multiResolveCallee method return type changed from List<PyMarkedCallee> to List<PyCallableType>
Use com.jetbrains.python.psi.types.PyCallableType instead of com.jetbrains.python.psi.PyCallExpression.PyMarkedCallee.
Last modified: 25 March 2020