Got rid of DescriptorRendererBuilder providing new scheme for creating DescriptorRenderer's

This commit is contained in:
Valentin Kipyatkov
2015-06-05 15:28:36 +03:00
parent ce2ce44d7b
commit a1ff2f20ed
25 changed files with 499 additions and 548 deletions
@@ -1,64 +0,0 @@
/*
* Copyright 2010-2015 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 org.jetbrains.kotlin.idea.util;
import kotlin.jvm.functions.Function1;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.types.JetType;
public class IdeDescriptorRenderers {
public static final Function1<JetType, JetType> APPROXIMATE_FLEXIBLE_TYPES = new Function1<JetType, JetType>() {
@Override
public JetType invoke(JetType type) {
return UtilPackage.approximateFlexibleTypes(type, true);
}
};
public static final Function1<JetType, JetType> APPROXIMATE_FLEXIBLE_TYPES_IN_ARGUMENTS = new Function1<JetType, JetType>() {
@Override
public JetType invoke(JetType type) {
return UtilPackage.approximateFlexibleTypes(type, false);
}
};
public static final DescriptorRenderer SOURCE_CODE = commonBuilder()
.setNameShortness(NameShortness.SOURCE_CODE_QUALIFIED)
.setTypeNormalizer(APPROXIMATE_FLEXIBLE_TYPES)
.build();
public static final DescriptorRenderer SOURCE_CODE_FOR_TYPE_ARGUMENTS = commonBuilder()
.setNameShortness(NameShortness.SOURCE_CODE_QUALIFIED)
.setTypeNormalizer(APPROXIMATE_FLEXIBLE_TYPES_IN_ARGUMENTS)
.build();
public static final DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = commonBuilder()
.setNameShortness(NameShortness.SHORT)
.setTypeNormalizer(APPROXIMATE_FLEXIBLE_TYPES)
.build();
private static DescriptorRendererBuilder commonBuilder() {
return new DescriptorRendererBuilder()
.setNormalizedVisibilities(true)
.setWithDefinedIn(false)
.setShowInternalKeyword(false)
.setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE)
.setUnitReturnType(false);
}
}
@@ -0,0 +1,50 @@
/*
* Copyright 2010-2015 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 org.jetbrains.kotlin.idea.util
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.NameShortness
import org.jetbrains.kotlin.types.JetType
public object IdeDescriptorRenderers {
public val APPROXIMATE_FLEXIBLE_TYPES: (JetType) -> JetType = { approximateFlexibleTypes(it, true) }
public val APPROXIMATE_FLEXIBLE_TYPES_IN_ARGUMENTS: (JetType) -> JetType = { approximateFlexibleTypes(it, false) }
private val BASE: DescriptorRenderer = DescriptorRenderer.withOptions {
normalizedVisibilities = true
withDefinedIn = false
showInternalKeyword = false
overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE
unitReturnType = false
}
public val SOURCE_CODE: DescriptorRenderer = BASE.withOptions {
nameShortness = NameShortness.SOURCE_CODE_QUALIFIED
typeNormalizer = APPROXIMATE_FLEXIBLE_TYPES
}
public val SOURCE_CODE_FOR_TYPE_ARGUMENTS: DescriptorRenderer = BASE.withOptions {
nameShortness = NameShortness.SOURCE_CODE_QUALIFIED
typeNormalizer = APPROXIMATE_FLEXIBLE_TYPES_IN_ARGUMENTS
}
public val SOURCE_CODE_SHORT_NAMES_IN_TYPES: DescriptorRenderer = BASE.withOptions {
nameShortness = NameShortness.SHORT
typeNormalizer = APPROXIMATE_FLEXIBLE_TYPES
}
}
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind
import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry
import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike
import org.jetbrains.kotlin.resolve.descriptorUtil.secondaryConstructors
@@ -93,26 +92,18 @@ private val DECOMPILED_CODE_COMMENT = "/* compiled code */"
private val DECOMPILED_COMMENT_FOR_PARAMETER = "/* = compiled code */"
private val FLEXIBLE_TYPE_COMMENT = "/* platform type */"
private val descriptorRendererForDecompiler = DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setClassWithPrimaryConstructor(true)
.setTypeNormalizer {
type ->
if (type.isFlexible()) {
type.flexibility().lowerBound
}
else type
}
.setSecondaryConstructorsAsPrimary(false)
.build()
private val descriptorRendererForKotlinJavascriptDecompiler = DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setClassWithPrimaryConstructor(true)
.setSecondaryConstructorsAsPrimary(false)
.build()
private val descriptorRendererForDecompiler = DescriptorRenderer.withOptions {
withDefinedIn = false
classWithPrimaryConstructor = true
typeNormalizer = { type -> if (type.isFlexible()) type.flexibility().lowerBound else type }
secondaryConstructorsAsPrimary = false
}
private val descriptorRendererForKotlinJavascriptDecompiler = DescriptorRenderer.withOptions {
withDefinedIn = false
classWithPrimaryConstructor = true
secondaryConstructorsAsPrimary = false
}
private val descriptorRendererForKeys = DescriptorRenderer.COMPACT_WITH_MODIFIERS
@@ -17,6 +17,8 @@
package org.jetbrains.kotlin.idea.highlighter;
import com.google.common.base.Predicate;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
@@ -26,11 +28,12 @@ import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.Table
import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.FunctionArgumentsRow;
import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.TableRow;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.DescriptorRendererOptions;
import org.jetbrains.kotlin.renderer.Renderer;
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition;
import org.jetbrains.kotlin.types.JetType;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -166,44 +169,50 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
private static final DescriptorRenderer.ValueParametersHandler VALUE_PARAMETERS_HANDLER = new DescriptorRenderer.ValueParametersHandler() {
@Override
public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
stringBuilder.append("<td align=\"right\" style=\"white-space:nowrap;font-weight:bold;\">");
public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder builder) {
builder.append("<td align=\"right\" style=\"white-space:nowrap;font-weight:bold;\">");
}
@Override
public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder builder) {
boolean last = ((FunctionDescriptor) parameter.getContainingDeclaration()).getValueParameters().size() - 1 == parameter.getIndex();
if (!last) {
stringBuilder.append(",");
builder.append(",");
}
stringBuilder.append("</td>");
builder.append("</td>");
}
@Override
public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
stringBuilder.append("</td>");
public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder builder) {
builder.append("</td>");
if (function.getValueParameters().isEmpty()) {
tdBold(stringBuilder, "( )");
tdBold(builder, "( )");
}
else {
tdBold(stringBuilder, "(");
tdBold(builder, "(");
}
}
@Override
public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder builder) {
if (!function.getValueParameters().isEmpty()) {
tdBold(stringBuilder, ")");
tdBold(builder, ")");
}
stringBuilder.append("<td style=\"white-space:nowrap;font-weight:bold;\">");
builder.append("<td style=\"white-space:nowrap;font-weight:bold;\">");
}
};
public static final DescriptorRenderer DESCRIPTOR_IN_TABLE = new DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setModifiers()
.setValueParametersHandler(VALUE_PARAMETERS_HANDLER)
.setTextFormat(DescriptorRenderer.TextFormat.HTML).build();
public static final DescriptorRenderer DESCRIPTOR_IN_TABLE = DescriptorRenderer.Companion.withOptions(
new Function1<DescriptorRendererOptions, Unit>() {
@Override
public Unit invoke(DescriptorRendererOptions options) {
options.setWithDefinedIn(false);
options.setModifiers(Collections.<DescriptorRenderer.Modifier>emptySet());
options.setValueParametersHandler(VALUE_PARAMETERS_HANDLER);
options.setTextFormat(DescriptorRenderer.TextFormat.HTML);
return Unit.INSTANCE$;
}
});
private static void td(StringBuilder builder, String text) {
builder.append("<td style=\"white-space:nowrap;\">").append(text).append("</td>");
@@ -24,6 +24,8 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMember;
import com.intellij.psi.util.PsiTreeUtil;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
@@ -32,12 +34,13 @@ import org.jetbrains.kotlin.psi.JetClass;
import org.jetbrains.kotlin.psi.JetDeclaration;
import org.jetbrains.kotlin.psi.JetNamedDeclaration;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.DescriptorRendererOptions;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.renderer.RendererPackage;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import javax.swing.*;
import java.util.Collections;
public class DescriptorClassMember extends MemberChooserObjectBase implements ClassMemberWithElement {
@@ -47,12 +50,18 @@ public class DescriptorClassMember extends MemberChooserObjectBase implements Cl
@NotNull
private final PsiElement myPsiElement;
private static final DescriptorRenderer MEMBER_RENDERER = new DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setModifiers()
.setStartFromName(true)
.setNameShortness(NameShortness.SHORT)
.build();
private static final DescriptorRenderer MEMBER_RENDERER = DescriptorRenderer.Companion.withOptions(
new Function1<DescriptorRendererOptions, Unit>() {
@Override
public Unit invoke(DescriptorRendererOptions options) {
options.setWithDefinedIn(false);
options.setModifiers(Collections.<DescriptorRenderer.Modifier>emptySet());
options.setStartFromName(true);
options.setNameShortness(NameShortness.SHORT);
return Unit.INSTANCE$;
}
}
);
public DescriptorClassMember(@NotNull PsiElement element, @NotNull DeclarationDescriptor descriptor) {
super(getText(descriptor), getIcon(element, descriptor));
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.idea.util.ShortenReferences
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
import org.jetbrains.kotlin.renderer.NameShortness
import org.jetbrains.kotlin.types.JetType
@@ -118,15 +117,15 @@ public abstract class OverrideImplementMethodsHandler : LanguageCodeInsightActio
override fun startInWriteAction(): Boolean = false
companion object {
private val OVERRIDE_RENDERER = DescriptorRendererBuilder()
.setRenderDefaultValues(false)
.setModifiers(DescriptorRenderer.Modifier.OVERRIDE)
.setWithDefinedIn(false)
.setNameShortness(NameShortness.SOURCE_CODE_QUALIFIED)
.setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE)
.setUnitReturnType(false)
.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES)
.build()
private val OVERRIDE_RENDERER = DescriptorRenderer.withOptions {
renderDefaultValues = false
modifiers = setOf(DescriptorRenderer.Modifier.OVERRIDE)
withDefinedIn = false
nameShortness = NameShortness.SOURCE_CODE_QUALIFIED
overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE
unitReturnType = false
typeNormalizer = IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES
}
private val LOG = Logger.getInstance(javaClass<OverrideImplementMethodsHandler>().getCanonicalName())
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.psi.JetReferenceExpression
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
import org.jetbrains.kotlin.renderer.NameShortness
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
@@ -83,12 +82,12 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider()
companion object {
private val LOG = Logger.getInstance(javaClass<KotlinQuickDocumentationProvider>())
val quickDocNameFormat = DescriptorRendererBuilder()
.setWithDefinedIn(true)
.setNameShortness(NameShortness.SHORT)
.setRenderCompanionObjectName(true)
.setTextFormat(DescriptorRenderer.TextFormat.HTML)
.build()
val quickDocNameFormat = DescriptorRenderer.withOptions {
withDefinedIn = true
nameShortness = NameShortness.SHORT
renderCompanionObjectName = true
textFormat = DescriptorRenderer.TextFormat.HTML
}
private fun getText(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? {
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.resolve.OverrideResolver
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import com.intellij.psi.NavigatablePsiElement
@@ -45,12 +44,12 @@ object SuperDeclarationMarkerTooltip: Function<JetDeclaration, String> {
val isAbstract = elementDescriptor!!.getModality() == Modality.ABSTRACT
val renderer = DescriptorRendererBuilder()
.setTextFormat(DescriptorRenderer.TextFormat.HTML)
.setWithDefinedIn(false)
.setStartFromName(true)
.setWithoutSuperTypes(true)
.build()
val renderer = DescriptorRenderer.withOptions {
textFormat = DescriptorRenderer.TextFormat.HTML
withDefinedIn = false
startFromName = true
withoutSuperTypes = true
}
val containingStrings = overriddenDescriptors.map {
val declaration = it.getContainingDeclaration()
@@ -31,6 +31,8 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.messages.MessageBusConnection;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor;
@@ -45,20 +47,28 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaConstructorImpl;
import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl;
import org.jetbrains.kotlin.load.java.structure.impl.JavaMethodImpl;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.DescriptorRendererOptions;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver;
import javax.swing.*;
import java.util.Collections;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KOTLIN_SIGNATURE;
public class KotlinSignatureAnnotationIntention extends BaseIntentionAction implements Iconable {
private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder()
.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES)
.setNameShortness(NameShortness.SHORT)
.setModifiers()
.setWithDefinedIn(false).build();
private static final DescriptorRenderer RENDERER = DescriptorRenderer.Companion.withOptions(
new Function1<DescriptorRendererOptions, Unit>() {
@Override
public Unit invoke(DescriptorRendererOptions options) {
options.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES);
options.setNameShortness(NameShortness.SHORT);
options.setModifiers(Collections.<DescriptorRenderer.Modifier>emptySet());
options.setWithDefinedIn(false);
return Unit.INSTANCE$;
}
}
);
@NotNull
@Override
@@ -34,6 +34,8 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.PlatformIcons;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*;
@@ -46,7 +48,7 @@ import org.jetbrains.kotlin.idea.util.ShortenReferences;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.DescriptorRendererOptions;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil;
import org.jetbrains.kotlin.resolve.VisibilityUtil;
@@ -62,12 +64,19 @@ import java.util.*;
* Fix that changes member function's signature to match one of super functions' signatures.
*/
public class ChangeMemberFunctionSignatureFix extends JetHintAction<JetNamedFunction> {
private static final DescriptorRenderer SIGNATURE_RENDERER = new DescriptorRendererBuilder()
.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES)
.setWithDefinedIn(false)
.setModifiers()
.setNameShortness(NameShortness.SHORT)
.setUnitReturnType(false).build();
private static final DescriptorRenderer SIGNATURE_RENDERER = DescriptorRenderer.Companion.withOptions(
new Function1<DescriptorRendererOptions, Unit>() {
@Override
public Unit invoke(DescriptorRendererOptions options) {
options.setTypeNormalizer(IdeDescriptorRenderers.APPROXIMATE_FLEXIBLE_TYPES);
options.setWithDefinedIn(false);
options.setModifiers(Collections.<DescriptorRenderer.Modifier>emptySet());
options.setNameShortness(NameShortness.SHORT);
options.setUnitReturnType(false);
return Unit.INSTANCE$;
}
}
);
private final List<FunctionDescriptor> possibleSignatures;
@@ -45,7 +45,6 @@ import org.jetbrains.kotlin.psi.JetNamedFunction
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.psi.JetSimpleNameExpression
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder
import org.jetbrains.kotlin.renderer.NameShortness
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -149,17 +148,16 @@ public class DeprecatedSymbolUsageInWholeProjectFix(
companion object : JetSingleIntentionActionFactory() {
//TODO: better rendering needed
private val RENDERER = DescriptorRendererBuilder()
.setModifiers()
.setNameShortness(NameShortness.SHORT)
// .setWithoutTypeParameters(true)
.setParameterNameRenderingPolicy(DescriptorRenderer.ParameterNameRenderingPolicy.NONE)
.setReceiverAfterName(true)
.setRenderCompanionObjectName(true)
.setWithoutSuperTypes(true)
.setStartFromName(true)
.setWithDefinedIn(false)
.build()
private val RENDERER = DescriptorRenderer.withOptions {
modifiers = emptySet()
nameShortness = NameShortness.SHORT
parameterNameRenderingPolicy = DescriptorRenderer.ParameterNameRenderingPolicy.NONE
receiverAfterName = true
renderCompanionObjectName = true
withoutSuperTypes = true
startFromName = true
withDefinedIn = false
}
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val nameExpression = diagnostic.getPsiElement() as? JetSimpleNameExpression ?: return null