From 1a8be635b9b59c46acc6194ea43b240946f6f3f4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 20 Oct 2017 20:01:19 +0200 Subject: [PATCH] Use ServiceLoader instead of IntelliJ extensions for DefaultErrorMessages #KT-10473 Fixed --- ...s.rendering.DefaultErrorMessages$Extension | 3 ++ .../jetbrains/kotlin/diagnostics/Errors.java | 7 +-- .../kotlin/diagnostics/RenderedDiagnostic.kt | 30 +++++++++++ .../kotlin/diagnostics/diagnosticUtils.kt | 8 +-- .../rendering/DefaultErrorMessages.java | 54 +++++++------------ .../kotlin/util/MappedExtensionProvider.kt | 7 +-- .../idea/highlighter/KotlinPsiChecker.kt | 16 +++++- idea/src/META-INF/extensions/common.xml | 2 - idea/src/META-INF/extensions/kotlin2js.xml | 3 -- idea/src/META-INF/extensions/kotlin2jvm.xml | 6 --- ...s.rendering.DefaultErrorMessages$Extension | 3 ++ .../AnnotateWithParcelizeQuickFix.kt | 12 +++-- .../android/parcel/checker/constructors.kt | 6 +-- .../android/parcel/checker/customCreator.kt | 6 +-- .../android/parcel/checker/customParcelers.kt | 18 +++---- .../parcel/checker/customWriteToParcel.kt | 8 +-- .../android/parcel/checker/delegate.kt | 2 +- .../parcel/checker/emptyPrimaryConstructor.kt | 2 +- .../android/parcel/checker/kt20062.kt | 2 +- .../android/parcel/checker/modality.kt | 12 ++--- .../android/parcel/checker/properties.kt | 8 +-- .../android/parcel/checker/unsupportedType.kt | 8 +-- .../checker/withoutParcelableSupertype.kt | 4 +- .../parcel/checker/wrongAnnotationTarget.kt | 10 ++-- 24 files changed, 128 insertions(+), 109 deletions(-) create mode 100644 compiler/cli/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/diagnostics/RenderedDiagnostic.kt create mode 100644 idea/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension diff --git a/compiler/cli/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension b/compiler/cli/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension new file mode 100644 index 00000000000..e951f448ca0 --- /dev/null +++ b/compiler/cli/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension @@ -0,0 +1,3 @@ +# Note that this file is also present in idea/src/META-INF/services +org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm +org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index b83cafc8a9b..76f6e4b7ea5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.config.LanguageFeature; import org.jetbrains.kotlin.config.LanguageVersion; import org.jetbrains.kotlin.config.LanguageVersionSettings; import org.jetbrains.kotlin.descriptors.*; +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticRenderer; import org.jetbrains.kotlin.lexer.KtKeywordToken; import org.jetbrains.kotlin.lexer.KtModifierKeywordToken; import org.jetbrains.kotlin.lexer.KtTokens; @@ -982,9 +983,9 @@ public interface Errors { DiagnosticFactory1 ILLEGAL_SUSPEND_FUNCTION_CALL = DiagnosticFactory1.create(ERROR); DiagnosticFactory0 ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL = DiagnosticFactory0.create(ERROR); - DiagnosticFactory2 PLUGIN_ERROR = DiagnosticFactory2.create(ERROR); - DiagnosticFactory2 PLUGIN_WARNING = DiagnosticFactory2.create(WARNING); - DiagnosticFactory2 PLUGIN_INFO = DiagnosticFactory2.create(INFO); + DiagnosticFactory1> PLUGIN_ERROR = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1> PLUGIN_WARNING = DiagnosticFactory1.create(WARNING); + DiagnosticFactory1> PLUGIN_INFO = DiagnosticFactory1.create(INFO); // Function contracts DiagnosticFactory1 ERROR_IN_CONTRACT_DESCRIPTION = DiagnosticFactory1.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/RenderedDiagnostic.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/RenderedDiagnostic.kt new file mode 100644 index 00000000000..976ed7223c8 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/RenderedDiagnostic.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.diagnostics + +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticRenderer + +class RenderedDiagnostic( + val diagnostic: D, + val renderer: DiagnosticRenderer +) { + val text = renderer.render(diagnostic) + + val factory: DiagnosticFactory<*> get() = diagnostic.factory + + override fun toString() = text +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt index 7e050385ee5..a3e4052cd91 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/diagnosticUtils.kt @@ -168,11 +168,11 @@ fun DiagnosticSink.reportFromPlugin(diagnostic: D, ext: Default val renderer = ext.map[diagnostic.factory] as? DiagnosticRenderer ?: error("Renderer not found for diagnostic ${diagnostic.factory.name}") - val text = renderer.render(diagnostic) + val renderedDiagnostic = RenderedDiagnostic(diagnostic, renderer) when (diagnostic.severity) { - Severity.ERROR -> report(Errors.PLUGIN_ERROR.on(diagnostic.psiElement, diagnostic.factory.name, text)) - Severity.WARNING -> report(Errors.PLUGIN_WARNING.on(diagnostic.psiElement, diagnostic.factory.name, text)) - Severity.INFO -> report(Errors.PLUGIN_INFO.on(diagnostic.psiElement, diagnostic.factory.name, text)) + Severity.ERROR -> report(Errors.PLUGIN_ERROR.on(diagnostic.psiElement, renderedDiagnostic)) + Severity.WARNING -> report(Errors.PLUGIN_WARNING.on(diagnostic.psiElement, renderedDiagnostic)) + Severity.INFO -> report(Errors.PLUGIN_INFO.on(diagnostic.psiElement, renderedDiagnostic)) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index e3254693e41..9f3471bb792 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -16,26 +16,27 @@ package org.jetbrains.kotlin.diagnostics.rendering; -import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.util.io.FileUtil; import kotlin.Pair; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; import org.jetbrains.kotlin.config.LanguageVersion; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.diagnostics.DiagnosticFactory; import org.jetbrains.kotlin.diagnostics.Errors; +import org.jetbrains.kotlin.diagnostics.RenderedDiagnostic; import org.jetbrains.kotlin.resolve.VarianceConflictDiagnosticData; import org.jetbrains.kotlin.serialization.deserialization.descriptors.VersionRequirement; import org.jetbrains.kotlin.types.KotlinTypeKt; -import org.jetbrains.kotlin.util.MappedExtensionProvider; import org.jetbrains.kotlin.util.OperatorNameConventions; +import org.jetbrains.kotlin.utils.addToStdlib.AddToStdlibKt; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.ServiceLoader; import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.*; @@ -44,47 +45,30 @@ import static org.jetbrains.kotlin.diagnostics.rendering.RenderingContext.of; public class DefaultErrorMessages { public interface Extension { - ExtensionPointName EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.defaultErrorMessages"); - @NotNull DiagnosticFactoryToRendererMap getMap(); } private static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap("Default"); - private static final MappedExtensionProvider> RENDERER_MAPS = MappedExtensionProvider.create( - Extension.EP_NAME, - extensions -> { - List result = new ArrayList<>(extensions.size() + 1); - for (Extension extension : extensions) { - result.add(extension.getMap()); - } - result.add(MAP); - return result; - }); + private static final List RENDERER_MAPS = + CollectionsKt.plus( + Collections.singletonList(MAP), + CollectionsKt.map(ServiceLoader.load(Extension.class, DefaultErrorMessages.class.getClassLoader()), Extension::getMap) + ); @NotNull + @SuppressWarnings("unchecked") public static String render(@NotNull Diagnostic diagnostic) { - for (DiagnosticFactoryToRendererMap map : RENDERER_MAPS.get()) { - DiagnosticRenderer renderer = map.get(diagnostic.getFactory()); - if (renderer != null) { - //noinspection unchecked - return renderer.render(diagnostic); - } + DiagnosticRenderer renderer = getRendererForDiagnostic(diagnostic); + if (renderer != null) { + return renderer.render(diagnostic); } - throw new IllegalArgumentException("Don't know how to render diagnostic of type " + diagnostic.getFactory().getName() + - " with the following renderer maps: " + RENDERER_MAPS.get()); + return diagnostic.toString() + " (error: could not render message)"; } - @TestOnly @Nullable public static DiagnosticRenderer getRendererForDiagnostic(@NotNull Diagnostic diagnostic) { - for (DiagnosticFactoryToRendererMap map : RENDERER_MAPS.get()) { - DiagnosticRenderer renderer = map.get(diagnostic.getFactory()); - - if (renderer != null) return renderer; - } - - return null; + return AddToStdlibKt.firstNotNullResult(RENDERER_MAPS, map -> map.get(diagnostic.getFactory())); } static { @@ -888,9 +872,9 @@ public class DefaultErrorMessages { MAP.put(ILLEGAL_SUSPEND_FUNCTION_CALL, "Suspend function ''{0}'' should be called only from a coroutine or another suspend function", NAME); MAP.put(ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL, "Restricted suspending functions can only invoke member or extension suspending functions on their restricted coroutine scope"); - MAP.put(PLUGIN_ERROR, "{0}: {1}", TO_STRING, TO_STRING); - MAP.put(PLUGIN_WARNING, "{0}: {1}", TO_STRING, TO_STRING); - MAP.put(PLUGIN_INFO, "{0}: {1}", TO_STRING, TO_STRING); + MAP.put(PLUGIN_ERROR, "{0}", (d, c) -> d.getText()); + MAP.put(PLUGIN_WARNING, "{0}", (d, c) -> d.getText()); + MAP.put(PLUGIN_INFO, "{0}", (d, c) -> d.getText()); MAP.put(ERROR_IN_CONTRACT_DESCRIPTION, "Error in contract description: {0}", TO_STRING); MAP.put(CONTRACT_NOT_ALLOWED, "Contract is not allowed here"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/util/MappedExtensionProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/util/MappedExtensionProvider.kt index d4036c03cee..ff03ac029d3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/util/MappedExtensionProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/util/MappedExtensionProvider.kt @@ -46,15 +46,10 @@ protected constructor( cached = WeakReference(newVal) return newVal.second } - - companion object { - @JvmStatic fun create(epName: ExtensionPointName, map: (List) -> R): MappedExtensionProvider - = MappedExtensionProvider(epName, map) - } } class ExtensionProvider(epName: ExtensionPointName) : MappedExtensionProvider>(epName, { it }) { companion object { @JvmStatic fun create(epName: ExtensionPointName): ExtensionProvider = ExtensionProvider(epName) } -} \ No newline at end of file +} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt index c9bbdfcb7a4..a28c656ee4b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt @@ -38,6 +38,7 @@ import com.intellij.util.containers.MultiMap import com.intellij.xml.util.XmlStringUtil import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages @@ -45,7 +46,10 @@ import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult import org.jetbrains.kotlin.idea.quickfix.QuickFixes import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtNameReferenceExpression +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.types.KotlinType @@ -111,7 +115,7 @@ open class KotlinPsiChecker : Annotator, HighlightRangeExtension { private fun createQuickFixes(similarDiagnostics: Collection): MultiMap { val first = similarDiagnostics.minBy { it.toString() } - val factory = similarDiagnostics.first().factory + val factory = similarDiagnostics.first().getRealDiagnosticFactory() val actions = MultiMap() @@ -137,6 +141,14 @@ private fun createQuickFixes(similarDiagnostics: Collection): MultiM return actions } +private fun Diagnostic.getRealDiagnosticFactory(): DiagnosticFactory<*> = + when (factory) { + Errors.PLUGIN_ERROR -> Errors.PLUGIN_ERROR.cast(this).a.factory + Errors.PLUGIN_WARNING -> Errors.PLUGIN_WARNING.cast(this).a.factory + Errors.PLUGIN_INFO -> Errors.PLUGIN_INFO.cast(this).a.factory + else -> factory + } + private object NoDeclarationDescriptorsChecker { private val LOG = Logger.getInstance(NoDeclarationDescriptorsChecker::class.java) diff --git a/idea/src/META-INF/extensions/common.xml b/idea/src/META-INF/extensions/common.xml index 7f39492c4ec..06e8db2228d 100644 --- a/idea/src/META-INF/extensions/common.xml +++ b/idea/src/META-INF/extensions/common.xml @@ -2,8 +2,6 @@ org.jetbrains.kotlin - org.jetbrains.kotlin - - - diff --git a/idea/src/META-INF/extensions/kotlin2jvm.xml b/idea/src/META-INF/extensions/kotlin2jvm.xml index e03bba00011..fedf0d82d6d 100644 --- a/idea/src/META-INF/extensions/kotlin2jvm.xml +++ b/idea/src/META-INF/extensions/kotlin2jvm.xml @@ -2,14 +2,8 @@ org.jetbrains.kotlin - - - - - - diff --git a/idea/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension b/idea/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension new file mode 100644 index 00000000000..1e972547264 --- /dev/null +++ b/idea/src/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension @@ -0,0 +1,3 @@ +# Note that this file is also present in compiler/cli/src/META-INF/services +org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm +org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/AnnotateWithParcelizeQuickFix.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/AnnotateWithParcelizeQuickFix.kt index 78255c62cdc..a7dd34e7f5d 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/AnnotateWithParcelizeQuickFix.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/AnnotateWithParcelizeQuickFix.kt @@ -17,15 +17,17 @@ package org.jetbrains.kotlin.android.parcel.quickfixes import kotlinx.android.parcel.Parcelize -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1 +import org.jetbrains.kotlin.android.synthetic.diagnostic.ErrorsAndroid +import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.util.addAnnotation import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtPsiFactory class AnnotateWithParcelizeQuickFix(clazz: KtClassOrObject) : AbstractParcelableQuickFix(clazz) { object Factory : AbstractFactory({ - @Suppress("UNCHECKED_CAST") - val targetClass = (this as DiagnosticWithParameters1<*, KtClassOrObject>).a + val diagnostic = Errors.PLUGIN_ERROR.cast(this).a + val targetClass = ErrorsAndroid.CLASS_SHOULD_BE_PARCELIZE.cast(diagnostic.diagnostic).a AnnotateWithParcelizeQuickFix(targetClass) }) @@ -34,4 +36,4 @@ class AnnotateWithParcelizeQuickFix(clazz: KtClassOrObject) : AbstractParcelable override fun invoke(ktPsiFactory: KtPsiFactory, element: KtClassOrObject) { element.addAnnotation(FqName(Parcelize::class.java.name)) } -} \ No newline at end of file +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/constructors.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/constructors.kt index a900a978953..63cc1272b38 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/constructors.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/constructors.kt @@ -10,7 +10,7 @@ class A : Parcelable class B(val firstName: String, val secondName: String) : Parcelable @Parcelize -class C(val firstName: String, secondName: String) : Parcelable +class C(val firstName: String, secondName: String) : Parcelable @Parcelize class D(val firstName: String, vararg val secondName: String) : Parcelable @@ -21,8 +21,8 @@ class E(val firstName: String, val secondName: String) : Parcelable { } @Parcelize -class F : Parcelable { +class F : Parcelable { constructor(a: String) { println(a) } -} \ No newline at end of file +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt index ea673620b15..2ba8f7a0481 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customCreator.kt @@ -8,7 +8,7 @@ import android.os.Parcel class A(val a: String) : Parcelable { companion object { @JvmField - val CREATOR = object : Parcelable.Creator { + val CREATOR = object : Parcelable.Creator { override fun createFromParcel(source: Parcel): A = A("") override fun newArray(size: Int) = arrayOfNulls(size) } @@ -17,8 +17,8 @@ class A(val a: String) : Parcelable { @Parcelize class B(val b: String) : Parcelable { - companion object CREATOR : Parcelable.Creator { + companion object CREATOR : Parcelable.Creator { override fun createFromParcel(source: Parcel): B = B("") override fun newArray(size: Int) = arrayOfNulls(size) } -} \ No newline at end of file +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customParcelers.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customParcelers.kt index 2d67c21cd15..6378a25e613 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customParcelers.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customParcelers.kt @@ -18,27 +18,27 @@ class StringClassParceler : Parceler { override fun String.write(parcel: Parcel, flags: Int) = TODO() } -@TypeParceler -class MissingParcelizeAnnotation(val a: @WriteWith String) +@TypeParceler +class MissingParcelizeAnnotation(val a: @WriteWith String) @Parcelize @TypeParceler -class ShouldBeClass(val a: @WriteWith<StringClassParceler> String) : Parcelable +class ShouldBeClass(val a: @WriteWith<StringClassParceler> String) : Parcelable @Parcelize class Test( - val a: @WriteWith<StringParceler> Int, + val a: @WriteWith<StringParceler> Int, val b: @WriteWith String, - val c: @WriteWith<StringParceler> CharSequence, + val c: @WriteWith<StringParceler> CharSequence, val d: @WriteWith String, val e: @WriteWith CharSequence ) : Parcelable @Parcelize @TypeParceler -class Test2(@TypeParceler val a: String) : Parcelable +class Test2(@TypeParceler val a: String) : Parcelable @Parcelize -@TypeParceler<String, StringParceler> -@TypeParceler<String, CharSequenceParceler> -class Test3(val a: String) : Parcelable \ No newline at end of file +@TypeParceler<String, StringParceler> +@TypeParceler<String, CharSequenceParceler> +class Test3(val a: String) : Parcelable diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customWriteToParcel.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customWriteToParcel.kt index 73eaeacdf03..1a2aeb1112e 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customWriteToParcel.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/customWriteToParcel.kt @@ -6,16 +6,16 @@ import android.os.Parcel @Parcelize class A(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel?, flags: Int) {} + override fun writeToParcel(p: Parcel?, flags: Int) {} override fun describeContents() = 0 } @Parcelize class B(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel?, flags: Int) {} + override fun writeToParcel(p: Parcel?, flags: Int) {} } @Parcelize class C(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel, flags: Int) {} -} \ No newline at end of file + override fun writeToParcel(p: Parcel, flags: Int) {} +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/delegate.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/delegate.kt index 6dbb00a48ee..6c55917fb5a 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/delegate.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/delegate.kt @@ -10,4 +10,4 @@ open class Delegate : Parcelable { } @Parcelize -class Test : Parcelable by Delegate() \ No newline at end of file +class Test : Parcelable by Delegate() diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/emptyPrimaryConstructor.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/emptyPrimaryConstructor.kt index 15049851d56..18a9e899ef2 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/emptyPrimaryConstructor.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/emptyPrimaryConstructor.kt @@ -7,4 +7,4 @@ import android.os.Parcelable class User : Parcelable @Parcelize -class User2() : Parcelable \ No newline at end of file +class User2() : Parcelable diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/kt20062.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/kt20062.kt index a5faa917c2a..e5b6ba2bf1e 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/kt20062.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/kt20062.kt @@ -17,4 +17,4 @@ class Foo(val box: Box): Parcelable { } @Parcelize -class Foo2(val box: Box): Parcelable \ No newline at end of file +class Foo2(val box: Box): Parcelable diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/modality.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/modality.kt index 43c46039215..57222908983 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/modality.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/modality.kt @@ -10,22 +10,22 @@ open class Open(val foo: String) : Parcelable class Final(val foo: String) : Parcelable @Parcelize -abstract class Abstract(val foo: String) : Parcelable +abstract class Abstract(val foo: String) : Parcelable @Parcelize -sealed class Sealed(val foo: String) : Parcelable { +sealed class Sealed(val foo: String) : Parcelable { class X : Sealed("") } class Outer { @Parcelize - inner class Inner(val foo: String) : Parcelable + inner class Inner(val foo: String) : Parcelable } fun foo() { @Parcelize - object : Parcelable {} + object : Parcelable {} @Parcelize - class Local {} -} \ No newline at end of file + class Local {} +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/properties.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/properties.kt index 10a2b191dcd..206878d905f 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/properties.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/properties.kt @@ -5,11 +5,11 @@ import android.os.Parcelable @Parcelize class A(val firstName: String) : Parcelable { - val secondName: String = "" + val secondName: String = "" - val delegated by lazy { "" } + val delegated by lazy { "" } - lateinit var lateinit: String + lateinit var lateinit: String val customGetter: String get() = "" @@ -17,4 +17,4 @@ class A(val firstName: String) : Parcelable { var customSetter: String get() = "" set(v) {} -} \ No newline at end of file +} diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/unsupportedType.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/unsupportedType.kt index 485c1ca2c9a..a023ebb0fcb 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/unsupportedType.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/unsupportedType.kt @@ -7,11 +7,11 @@ import android.os.Parcelable @Parcelize class User( val a: String, - val b: Any, - val c: Any?, - val d: Map, + val b: Any, + val c: Any?, + val d: Map, val e: @RawValue Any?, val f: @RawValue Map, val g: Map, val h: Map<@RawValue Any, List<@RawValue Any>> -) : Parcelable \ No newline at end of file +) : Parcelable diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/withoutParcelableSupertype.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/withoutParcelableSupertype.kt index 98e3cdb416d..205563d3f01 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/withoutParcelableSupertype.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/withoutParcelableSupertype.kt @@ -4,7 +4,7 @@ import kotlinx.android.parcel.Parcelize import android.os.Parcelable @Parcelize -class Without(val firstName: String, val secondName: String, val age: Int) +class Without(val firstName: String, val secondName: String, val age: Int) @Parcelize class With(val firstName: String, val secondName: String, val age: Int) : Parcelable @@ -17,4 +17,4 @@ abstract class MyParcelableCl : Parcelable class WithIntfSubtype(val firstName: String, val secondName: String, val age: Int) : MyParcelableIntf @Parcelize -class WithClSubtype(val firstName: String, val secondName: String, val age: Int) : MyParcelableCl() \ No newline at end of file +class WithClSubtype(val firstName: String, val secondName: String, val age: Int) : MyParcelableCl() diff --git a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/wrongAnnotationTarget.kt b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/wrongAnnotationTarget.kt index a37b8a62e15..9ec454cd689 100644 --- a/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/wrongAnnotationTarget.kt +++ b/plugins/android-extensions/android-extensions-idea/testData/android/parcel/checker/wrongAnnotationTarget.kt @@ -4,22 +4,22 @@ import kotlinx.android.parcel.Parcelize import android.os.Parcelable @Parcelize -interface Intf : Parcelable +interface Intf : Parcelable @Parcelize -object Obj +object Obj class A { @Parcelize - companion object { + companion object { fun foo() {} } } @Parcelize -enum class Enum { +enum class Enum { WHITE, BLACK } @Parcelize -annotation class Anno \ No newline at end of file +annotation class Anno