From 2352d86932313923eb49de340f04fe20f2ce242a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sapalski?= Date: Sat, 6 Apr 2013 12:36:50 +0200 Subject: [PATCH] Refactoring: use DescriptionRenderer to generate overriding functions / properties. --- .../java/JavaToKotlinMethodMapGenerated.java | 298 +++++++++--------- .../jet/renderer/DescriptorRenderer.java | 21 +- .../renderer/DescriptorRendererBuilder.java | 30 +- .../jet/renderer/DescriptorRendererImpl.java | 63 +++- .../jet/test/util/NamespaceComparator.java | 1 + .../JetChangeFunctionSignatureAction.java | 8 +- .../plugin/codeInsight/CodeInsightUtils.java | 11 + .../OverrideImplementMethodsHandler.java | 75 ++++- .../jet/plugin/codeInsight/OverrideUtil.java | 184 ----------- .../ChangeMemberFunctionSignatureFix.java | 10 +- 10 files changed, 336 insertions(+), 365 deletions(-) delete mode 100644 idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMapGenerated.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMapGenerated.java index 95b95f6fe80..e2b01f96489 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMapGenerated.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMapGenerated.java @@ -29,215 +29,215 @@ class JavaToKotlinMethodMapGenerated { ImmutableMultimap.Builder b = ImmutableMultimap.builder(); put(b, "java.lang.String", "String", - pair("compareTo(java.lang.String)", "fun compareTo(that : jet.String) : jet.Int"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("toString()", "fun toString() : jet.String") + pair("compareTo(java.lang.String)", "fun compareTo(that: jet.String): jet.Int"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("toString()", "fun toString(): jet.String") ); put(b, "java.lang.CharSequence", "CharSequence", - pair("toString()", "fun toString() : jet.String") + pair("toString()", "fun toString(): jet.String") ); put(b, "java.lang.Throwable", "Throwable", - pair("getCause()", "fun getCause() : jet.Throwable?"), - pair("getMessage()", "fun getMessage() : jet.String?"), - pair("printStackTrace()", "fun printStackTrace() : jet.Unit") + pair("getCause()", "fun getCause(): jet.Throwable?"), + pair("getMessage()", "fun getMessage(): jet.String?"), + pair("printStackTrace()", "fun printStackTrace(): jet.Unit") ); put(b, "java.lang.Comparable", "Comparable", - pair("compareTo(T)", "fun compareTo(other : T) : jet.Int") + pair("compareTo(T)", "fun compareTo(other: T): jet.Int") ); put(b, "java.lang.Enum", "Enum", - pair("name()", "fun name() : jet.String"), - pair("ordinal()", "fun ordinal() : jet.Int") + pair("name()", "fun name(): jet.String"), + pair("ordinal()", "fun ordinal(): jet.Int") ); put(b, "java.lang.Iterable", "Iterable", - pair("iterator()", "fun iterator() : jet.Iterator") + pair("iterator()", "fun iterator(): jet.Iterator") ); put(b, "java.lang.Iterable", "MutableIterable", - pair("iterator()", "fun iterator() : jet.MutableIterator") + pair("iterator()", "fun iterator(): jet.MutableIterator") ); put(b, "java.util.Iterator", "Iterator", - pair("hasNext()", "fun hasNext() : jet.Boolean"), - pair("next()", "fun next() : T") + pair("hasNext()", "fun hasNext(): jet.Boolean"), + pair("next()", "fun next(): T") ); put(b, "java.util.Iterator", "MutableIterator", - pair("hasNext()", "fun hasNext() : jet.Boolean"), - pair("next()", "fun next() : T"), - pair("remove()", "fun remove() : jet.Unit") + pair("hasNext()", "fun hasNext(): jet.Boolean"), + pair("next()", "fun next(): T"), + pair("remove()", "fun remove(): jet.Unit") ); put(b, "java.util.Collection", "Collection", - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.Iterator"), - pair("size()", "fun size() : jet.Int"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.Iterator"), + pair("size()", "fun size(): jet.Int"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.Collection", "MutableCollection", - pair("add(E)", "fun add(e : E) : jet.Boolean"), - pair("addAll(java.util.Collection)", "fun addAll(c : jet.Collection) : jet.Boolean"), - pair("clear()", "fun clear() : jet.Unit"), - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.MutableIterator"), - pair("remove(java.lang.Object)", "fun remove(o : jet.Any?) : jet.Boolean"), - pair("removeAll(java.util.Collection)", "fun removeAll(c : jet.Collection) : jet.Boolean"), - pair("retainAll(java.util.Collection)", "fun retainAll(c : jet.Collection) : jet.Boolean"), - pair("size()", "fun size() : jet.Int"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("add(E)", "fun add(e: E): jet.Boolean"), + pair("addAll(java.util.Collection)", "fun addAll(c: jet.Collection): jet.Boolean"), + pair("clear()", "fun clear(): jet.Unit"), + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.MutableIterator"), + pair("remove(java.lang.Object)", "fun remove(o: jet.Any?): jet.Boolean"), + pair("removeAll(java.util.Collection)", "fun removeAll(c: jet.Collection): jet.Boolean"), + pair("retainAll(java.util.Collection)", "fun retainAll(c: jet.Collection): jet.Boolean"), + pair("size()", "fun size(): jet.Int"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.List", "List", - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("get(int)", "fun get(index : jet.Int) : E"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("indexOf(java.lang.Object)", "fun indexOf(o : jet.Any?) : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.Iterator"), - pair("lastIndexOf(java.lang.Object)", "fun lastIndexOf(o : jet.Any?) : jet.Int"), - pair("listIterator()", "fun listIterator() : jet.ListIterator"), - pair("listIterator(int)", "fun listIterator(index : jet.Int) : jet.ListIterator"), - pair("size()", "fun size() : jet.Int"), - pair("subList(int, int)", "fun subList(fromIndex : jet.Int, toIndex : jet.Int) : jet.List"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("get(int)", "fun get(index: jet.Int): E"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("indexOf(java.lang.Object)", "fun indexOf(o: jet.Any?): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.Iterator"), + pair("lastIndexOf(java.lang.Object)", "fun lastIndexOf(o: jet.Any?): jet.Int"), + pair("listIterator()", "fun listIterator(): jet.ListIterator"), + pair("listIterator(int)", "fun listIterator(index: jet.Int): jet.ListIterator"), + pair("size()", "fun size(): jet.Int"), + pair("subList(int, int)", "fun subList(fromIndex: jet.Int, toIndex: jet.Int): jet.List"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.List", "MutableList", - pair("add(E)", "fun add(e : E) : jet.Boolean"), - pair("add(int, E)", "fun add(index : jet.Int, element : E) : jet.Unit"), - pair("addAll(int, java.util.Collection)", "fun addAll(index : jet.Int, c : jet.Collection) : jet.Boolean"), - pair("addAll(java.util.Collection)", "fun addAll(c : jet.Collection) : jet.Boolean"), - pair("clear()", "fun clear() : jet.Unit"), - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("get(int)", "fun get(index : jet.Int) : E"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("indexOf(java.lang.Object)", "fun indexOf(o : jet.Any?) : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.Iterator"), - pair("lastIndexOf(java.lang.Object)", "fun lastIndexOf(o : jet.Any?) : jet.Int"), - pair("listIterator()", "fun listIterator() : jet.MutableListIterator"), - pair("listIterator(int)", "fun listIterator(index : jet.Int) : jet.MutableListIterator"), - pair("remove(int)", "fun remove(index : jet.Int) : E"), - pair("remove(java.lang.Object)", "fun remove(o : jet.Any?) : jet.Boolean"), - pair("removeAll(java.util.Collection)", "fun removeAll(c : jet.Collection) : jet.Boolean"), - pair("retainAll(java.util.Collection)", "fun retainAll(c : jet.Collection) : jet.Boolean"), - pair("set(int, E)", "fun set(index : jet.Int, element : E) : E"), - pair("size()", "fun size() : jet.Int"), - pair("subList(int, int)", "fun subList(fromIndex : jet.Int, toIndex : jet.Int) : jet.MutableList"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("add(E)", "fun add(e: E): jet.Boolean"), + pair("add(int, E)", "fun add(index: jet.Int, element: E): jet.Unit"), + pair("addAll(int, java.util.Collection)", "fun addAll(index: jet.Int, c: jet.Collection): jet.Boolean"), + pair("addAll(java.util.Collection)", "fun addAll(c: jet.Collection): jet.Boolean"), + pair("clear()", "fun clear(): jet.Unit"), + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("get(int)", "fun get(index: jet.Int): E"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("indexOf(java.lang.Object)", "fun indexOf(o: jet.Any?): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.Iterator"), + pair("lastIndexOf(java.lang.Object)", "fun lastIndexOf(o: jet.Any?): jet.Int"), + pair("listIterator()", "fun listIterator(): jet.MutableListIterator"), + pair("listIterator(int)", "fun listIterator(index: jet.Int): jet.MutableListIterator"), + pair("remove(int)", "fun remove(index: jet.Int): E"), + pair("remove(java.lang.Object)", "fun remove(o: jet.Any?): jet.Boolean"), + pair("removeAll(java.util.Collection)", "fun removeAll(c: jet.Collection): jet.Boolean"), + pair("retainAll(java.util.Collection)", "fun retainAll(c: jet.Collection): jet.Boolean"), + pair("set(int, E)", "fun set(index: jet.Int, element: E): E"), + pair("size()", "fun size(): jet.Int"), + pair("subList(int, int)", "fun subList(fromIndex: jet.Int, toIndex: jet.Int): jet.MutableList"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.Set", "Set", - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.Iterator"), - pair("size()", "fun size() : jet.Int"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.Iterator"), + pair("size()", "fun size(): jet.Int"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.Set", "MutableSet", - pair("add(E)", "fun add(e : E) : jet.Boolean"), - pair("addAll(java.util.Collection)", "fun addAll(c : jet.Collection) : jet.Boolean"), - pair("clear()", "fun clear() : jet.Unit"), - pair("contains(java.lang.Object)", "fun contains(o : jet.Any?) : jet.Boolean"), - pair("containsAll(java.util.Collection)", "fun containsAll(c : jet.Collection) : jet.Boolean"), - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("iterator()", "fun iterator() : jet.MutableIterator"), - pair("remove(java.lang.Object)", "fun remove(o : jet.Any?) : jet.Boolean"), - pair("removeAll(java.util.Collection)", "fun removeAll(c : jet.Collection) : jet.Boolean"), - pair("retainAll(java.util.Collection)", "fun retainAll(c : jet.Collection) : jet.Boolean"), - pair("size()", "fun size() : jet.Int"), - pair("toArray()", "fun toArray() : jet.Array"), - pair("toArray(T[])", "fun toArray(a : jet.Array) : jet.Array") + pair("add(E)", "fun add(e: E): jet.Boolean"), + pair("addAll(java.util.Collection)", "fun addAll(c: jet.Collection): jet.Boolean"), + pair("clear()", "fun clear(): jet.Unit"), + pair("contains(java.lang.Object)", "fun contains(o: jet.Any?): jet.Boolean"), + pair("containsAll(java.util.Collection)", "fun containsAll(c: jet.Collection): jet.Boolean"), + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("iterator()", "fun iterator(): jet.MutableIterator"), + pair("remove(java.lang.Object)", "fun remove(o: jet.Any?): jet.Boolean"), + pair("removeAll(java.util.Collection)", "fun removeAll(c: jet.Collection): jet.Boolean"), + pair("retainAll(java.util.Collection)", "fun retainAll(c: jet.Collection): jet.Boolean"), + pair("size()", "fun size(): jet.Int"), + pair("toArray()", "fun toArray(): jet.Array"), + pair("toArray(T[])", "fun toArray(a: jet.Array): jet.Array") ); put(b, "java.util.Map", "Map", - pair("containsKey(java.lang.Object)", "fun containsKey(key : jet.Any?) : jet.Boolean"), - pair("containsValue(java.lang.Object)", "fun containsValue(value : jet.Any?) : jet.Boolean"), - pair("entrySet()", "fun entrySet() : jet.Set>"), - pair("get(java.lang.Object)", "fun get(key : jet.Any?) : V?"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("keySet()", "fun keySet() : jet.Set"), - pair("size()", "fun size() : jet.Int"), - pair("values()", "fun values() : jet.Collection") + pair("containsKey(java.lang.Object)", "fun containsKey(key: jet.Any?): jet.Boolean"), + pair("containsValue(java.lang.Object)", "fun containsValue(value: jet.Any?): jet.Boolean"), + pair("entrySet()", "fun entrySet(): jet.Set>"), + pair("get(java.lang.Object)", "fun get(key: jet.Any?): V?"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("keySet()", "fun keySet(): jet.Set"), + pair("size()", "fun size(): jet.Int"), + pair("values()", "fun values(): jet.Collection") ); put(b, "java.util.Map", "MutableMap", - pair("clear()", "fun clear() : jet.Unit"), - pair("containsKey(java.lang.Object)", "fun containsKey(key : jet.Any?) : jet.Boolean"), - pair("containsValue(java.lang.Object)", "fun containsValue(value : jet.Any?) : jet.Boolean"), - pair("entrySet()", "fun entrySet() : jet.MutableSet>"), - pair("get(java.lang.Object)", "fun get(key : jet.Any?) : V?"), - pair("isEmpty()", "fun isEmpty() : jet.Boolean"), - pair("keySet()", "fun keySet() : jet.MutableSet"), - pair("put(K, V)", "fun put(key : K, value : V) : V?"), - pair("putAll(java.util.Map)", "fun putAll(m : jet.Map) : jet.Unit"), - pair("remove(java.lang.Object)", "fun remove(key : jet.Any?) : V?"), - pair("size()", "fun size() : jet.Int"), - pair("values()", "fun values() : jet.MutableCollection") + pair("clear()", "fun clear(): jet.Unit"), + pair("containsKey(java.lang.Object)", "fun containsKey(key: jet.Any?): jet.Boolean"), + pair("containsValue(java.lang.Object)", "fun containsValue(value: jet.Any?): jet.Boolean"), + pair("entrySet()", "fun entrySet(): jet.MutableSet>"), + pair("get(java.lang.Object)", "fun get(key: jet.Any?): V?"), + pair("isEmpty()", "fun isEmpty(): jet.Boolean"), + pair("keySet()", "fun keySet(): jet.MutableSet"), + pair("put(K, V)", "fun put(key: K, value: V): V?"), + pair("putAll(java.util.Map)", "fun putAll(m: jet.Map): jet.Unit"), + pair("remove(java.lang.Object)", "fun remove(key: jet.Any?): V?"), + pair("size()", "fun size(): jet.Int"), + pair("values()", "fun values(): jet.MutableCollection") ); put(b, "java.util.Map.Entry", "Map.Entry", - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("getKey()", "fun getKey() : K"), - pair("getValue()", "fun getValue() : V"), - pair("hashCode()", "fun hashCode() : jet.Int") + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("getKey()", "fun getKey(): K"), + pair("getValue()", "fun getValue(): V"), + pair("hashCode()", "fun hashCode(): jet.Int") ); put(b, "java.util.Map.Entry", "MutableMap.MutableEntry", - pair("equals(java.lang.Object)", "fun equals(other : jet.Any?) : jet.Boolean"), - pair("getKey()", "fun getKey() : K"), - pair("getValue()", "fun getValue() : V"), - pair("hashCode()", "fun hashCode() : jet.Int"), - pair("setValue(V)", "fun setValue(value : V) : V") + pair("equals(java.lang.Object)", "fun equals(other: jet.Any?): jet.Boolean"), + pair("getKey()", "fun getKey(): K"), + pair("getValue()", "fun getValue(): V"), + pair("hashCode()", "fun hashCode(): jet.Int"), + pair("setValue(V)", "fun setValue(value: V): V") ); put(b, "java.util.ListIterator", "ListIterator", - pair("hasNext()", "fun hasNext() : jet.Boolean"), - pair("hasPrevious()", "fun hasPrevious() : jet.Boolean"), - pair("next()", "fun next() : T"), - pair("nextIndex()", "fun nextIndex() : jet.Int"), - pair("previous()", "fun previous() : T"), - pair("previousIndex()", "fun previousIndex() : jet.Int") + pair("hasNext()", "fun hasNext(): jet.Boolean"), + pair("hasPrevious()", "fun hasPrevious(): jet.Boolean"), + pair("next()", "fun next(): T"), + pair("nextIndex()", "fun nextIndex(): jet.Int"), + pair("previous()", "fun previous(): T"), + pair("previousIndex()", "fun previousIndex(): jet.Int") ); put(b, "java.util.ListIterator", "MutableListIterator", - pair("add(E)", "fun add(e : T) : jet.Unit"), - pair("hasNext()", "fun hasNext() : jet.Boolean"), - pair("hasPrevious()", "fun hasPrevious() : jet.Boolean"), - pair("next()", "fun next() : T"), - pair("nextIndex()", "fun nextIndex() : jet.Int"), - pair("previous()", "fun previous() : T"), - pair("previousIndex()", "fun previousIndex() : jet.Int"), - pair("remove()", "fun remove() : jet.Unit"), - pair("set(E)", "fun set(e : T) : jet.Unit") + pair("add(E)", "fun add(e: T): jet.Unit"), + pair("hasNext()", "fun hasNext(): jet.Boolean"), + pair("hasPrevious()", "fun hasPrevious(): jet.Boolean"), + pair("next()", "fun next(): T"), + pair("nextIndex()", "fun nextIndex(): jet.Int"), + pair("previous()", "fun previous(): T"), + pair("previousIndex()", "fun previousIndex(): jet.Int"), + pair("remove()", "fun remove(): jet.Unit"), + pair("set(E)", "fun set(e: T): jet.Unit") ); map = b.build(); diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index 025adb108b5..b46e4d8ec36 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.renderer; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; @@ -27,6 +26,22 @@ import org.jetbrains.jet.lang.types.JetType; public interface DescriptorRenderer extends Renderer { DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build(); + DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder() + .setNormalizedVisibilities(true) + .setWithDefinedIn(false) + .setShortNames(false) + .setShowInternalKeyword(false) + .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE) + .setUnitReturnType(false).build(); + + DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder() + .setNormalizedVisibilities(true) + .setWithDefinedIn(false) + .setShortNames(true) + .setShowInternalKeyword(false) + .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE) + .setUnitReturnType(false).build(); + DescriptorRenderer COMPACT = new DescriptorRendererBuilder() .setWithDefinedIn(false) .setModifiers(false).build(); @@ -58,6 +73,10 @@ public interface DescriptorRenderer extends Renderer { PLAIN, HTML } + enum OverrideRenderingPolicy { + RENDER_OVERRIDE, RENDER_OPEN, RENDER_OPEN_OVERRIDE + } + /** @see DefaultValueParameterHandler */ interface ValueParametersHandler { void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder); diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index b2c0ebf5464..91f1b2e8bba 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import java.util.Collection; import java.util.Collections; -import java.util.Set; public class DescriptorRendererBuilder { private boolean shortNames = false; @@ -31,6 +30,11 @@ public class DescriptorRendererBuilder { private boolean debugMode = false; private boolean classWithPrimaryConstructor = false; private boolean verbose = false; + private boolean unitReturnType = true; + private boolean normalizedVisibilities = false; + private boolean showInternalKeyword = true; + @NotNull + private DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN; @NotNull private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler(); @NotNull @@ -76,6 +80,26 @@ public class DescriptorRendererBuilder { return this; } + public DescriptorRendererBuilder setUnitReturnType(boolean unitReturnType) { + this.unitReturnType = unitReturnType; + return this; + } + + public DescriptorRendererBuilder setNormalizedVisibilities(boolean normalizedVisibilities) { + this.normalizedVisibilities = normalizedVisibilities; + return this; + } + + public DescriptorRendererBuilder setShowInternalKeyword(boolean showInternalKeyword) { + this.showInternalKeyword = showInternalKeyword; + return this; + } + + public DescriptorRendererBuilder setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) { + this.overrideRenderingPolicy = overrideRenderingPolicy; + return this; + } + public DescriptorRendererBuilder setValueParametersHandler(@NotNull DescriptorRenderer.ValueParametersHandler valueParametersHandler) { this.valueParametersHandler = valueParametersHandler; return this; @@ -93,6 +117,8 @@ public class DescriptorRendererBuilder { public DescriptorRenderer build() { return new DescriptorRendererImpl(shortNames, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor, - verbose, valueParametersHandler, textFormat, excludedAnnotationClasses); + verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, overrideRenderingPolicy, + valueParametersHandler, textFormat, excludedAnnotationClasses); } + } diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index c4f625c7e52..b4d9afbf8a5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -55,6 +55,11 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private final boolean debugMode; private final boolean classWithPrimaryConstructor; private final boolean verbose; + private final boolean unitReturnType; + private final boolean normalizedVisibilities; + private final boolean showInternalKeyword; + @NotNull + private final OverrideRenderingPolicy overrideRenderingPolicy; @NotNull private final ValueParametersHandler handler; @NotNull @@ -70,6 +75,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer { boolean debugMode, boolean classWithPrimaryConstructor, boolean verbose, + boolean unitReturnType, + boolean normalizedVisibilities, + boolean showInternalKeyword, + @NotNull OverrideRenderingPolicy overrideRenderingPolicy, @NotNull ValueParametersHandler handler, @NotNull TextFormat textFormat, @NotNull Collection excludedAnnotationClasses @@ -81,6 +90,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer { this.handler = handler; this.classWithPrimaryConstructor = classWithPrimaryConstructor; this.verbose = verbose; + this.unitReturnType = unitReturnType; + this.normalizedVisibilities = normalizedVisibilities; + this.showInternalKeyword = showInternalKeyword; + this.overrideRenderingPolicy = overrideRenderingPolicy; this.debugMode = debugMode; this.textFormat = textFormat; this.excludedAnnotationClasses = Sets.newHashSet(excludedAnnotationClasses); @@ -307,6 +320,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private void renderVisibility(@NotNull Visibility visibility, @NotNull StringBuilder builder) { if (!modifiers) return; + if (normalizedVisibilities) { + visibility = visibility.normalize(); + } + if (!showInternalKeyword && visibility == Visibilities.INTERNAL) return; builder.append(renderKeyword(visibility.toString())).append(" "); } @@ -325,19 +342,32 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private void renderModalityForCallable(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) { if (!DescriptorUtils.isTopLevelDeclaration(callable) || callable.getModality() != Modality.FINAL) { + if (overridesSomething(callable) + && overrideRenderingPolicy == OverrideRenderingPolicy.RENDER_OVERRIDE + && callable.getModality() == Modality.OPEN) { + return; + } renderModality(callable.getModality(), builder); } } + private boolean overridesSomething(CallableMemberDescriptor callable) { + return !callable.getOverriddenDescriptors().isEmpty(); + } + private void renderOverrideAndMemberKind(@NotNull CallableMemberDescriptor callableMember, @NotNull StringBuilder builder) { - if (verbose) { - if (!callableMember.getOverriddenDescriptors().isEmpty()) { - builder.append("override /*").append(callableMember.getOverriddenDescriptors().size()).append("*/ "); - } - if (callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) { - builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ "); + if (!modifiers) return; + if (overridesSomething(callableMember)) { + if (overrideRenderingPolicy != OverrideRenderingPolicy.RENDER_OPEN) { + builder.append("override "); + if (verbose) { + builder.append("/*").append(callableMember.getOverriddenDescriptors().size()).append("*/ "); + } } } + if (verbose && callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) { + builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ "); + } } @NotNull @@ -371,7 +401,8 @@ public class DescriptorRendererImpl implements DescriptorRenderer { builder.append(renderKeyword(variance)).append(" "); } renderName(typeParameter, builder); - if (typeParameter.getUpperBounds().size() == 1) { + int upperBoundsCount = typeParameter.getUpperBounds().size(); + if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) { JetType upperBound = typeParameter.getUpperBounds().iterator().next(); if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound)) { builder.append(" : ").append(renderType(upperBound)); @@ -443,7 +474,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderName(function, builder); renderValueParameters(function, builder); JetType returnType = function.getReturnType(); - builder.append(" : ").append(returnType == null ? "[NULL]" : escape(renderType(returnType))); + if (unitReturnType || !KotlinBuiltIns.getInstance().isUnit(returnType)) { + builder.append(": ").append(returnType == null ? "[NULL]" : escape(renderType(returnType))); + } renderWhereSuffix(function.getTypeParameters(), builder); } @@ -458,6 +491,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderTypeParameters(classDescriptor.getTypeConstructor().getParameters(), builder, false); renderValueParameters(constructor, builder); + renderWhereSuffix(constructor.getTypeParameters(), builder); } private void renderWhereSuffix(@NotNull List typeParameters, @NotNull StringBuilder builder) { @@ -465,8 +499,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer { for (TypeParameterDescriptor typeParameter : typeParameters) { if (typeParameter.getUpperBounds().size() > 1) { + boolean first = true; for (JetType upperBound : typeParameter.getUpperBounds()) { - upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound))); + // first parameter is rendered by renderTypeParameter: + if (!first) { + upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound))); + } + first = false; } } } @@ -531,7 +570,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } renderName(variable, builder); - builder.append(" : ").append(escape(renderType(typeToRender))); + builder.append(": ").append(escape(renderType(typeToRender))); if (verbose && varargElementType != null) { builder.append(" /*").append(escape(renderType(realType))).append("*/"); @@ -555,7 +594,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { builder.append(escape(renderType(receiver.getType()))).append("."); } renderName(property, builder); - builder.append(" : ").append(escape(renderType(property.getType()))); + builder.append(": ").append(escape(renderType(property.getType()))); renderWhereSuffix(property.getTypeParameters(), builder); } @@ -709,4 +748,4 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return null; } } -} \ No newline at end of file +} diff --git a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java index d36998f7991..e89935e7fd4 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java @@ -51,6 +51,7 @@ public class NamespaceComparator { private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder() .setWithDefinedIn(false) .setExcludedAnnotationClasses(Arrays.asList(new FqName(ExpectedLoadErrorsUtil.ANNOTATION_CLASS_NAME))) + .setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN_OVERRIDE) .setVerbose(true).build(); private static final ImmutableSet JAVA_OBJECT_METHOD_NAMES = ImmutableSet.of( diff --git a/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java b/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java index 80b4baf9e3f..c4a13f10e54 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java +++ b/idea/src/org/jetbrains/jet/plugin/actions/JetChangeFunctionSignatureAction.java @@ -32,7 +32,7 @@ import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.plugin.JetBundle; -import org.jetbrains.jet.plugin.codeInsight.OverrideUtil; +import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils; import org.jetbrains.jet.plugin.codeInsight.ReferenceToClassesShortening; import javax.swing.*; @@ -112,8 +112,7 @@ public class JetChangeFunctionSignatureAction implements QuestionAction { @NotNull @Override public String getTextFor(FunctionDescriptor aValue) { - return OverrideUtil.createOverridenFunctionSignatureStringFromDescriptor( - project, + return CodeInsightUtils.createFunctionSignatureStringFromDescriptor( aValue, /* shortTypeNames = */ true); } @@ -121,8 +120,7 @@ public class JetChangeFunctionSignatureAction implements QuestionAction { } private static void changeSignature(final JetNamedFunction element, final Project project, FunctionDescriptor signature) { - final String signatureString = OverrideUtil.createOverridenFunctionSignatureStringFromDescriptor( - project, + final String signatureString = CodeInsightUtils.createFunctionSignatureStringFromDescriptor( signature, /* shortTypeNames = */ false); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java index 19b30c7c284..f735755d1eb 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java @@ -12,12 +12,14 @@ import com.intellij.psi.util.PsiUtilCore; import com.intellij.refactoring.util.CommonRefactoringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetBlockExpression; import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; +import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.ArrayList; import java.util.List; @@ -167,4 +169,13 @@ public class CodeInsightUtils { private CodeInsightUtils() { } + + @NotNull + public static String createFunctionSignatureStringFromDescriptor( + @NotNull FunctionDescriptor descriptor, + boolean shortTypeNames + ) { + DescriptorRenderer renderer = shortTypeNames ? DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES : DescriptorRenderer.SOURCE_CODE; + return renderer.render(descriptor); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index d76479eb139..1bff1684bb6 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -30,14 +30,14 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; -import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; +import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.ArrayList; import java.util.Collections; @@ -118,18 +118,77 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns for (DescriptorClassMember selectedElement : selectedElements) { DeclarationDescriptor descriptor = selectedElement.getDescriptor(); if (descriptor instanceof SimpleFunctionDescriptor) { - overridingMembers.add(OverrideUtil.createOverridenFunctionElementFromDescriptor(file.getProject(), - (SimpleFunctionDescriptor) descriptor, /* shortTypeNames = */ - false)); + overridingMembers.add(overrideFunction(file.getProject(), + (SimpleFunctionDescriptor) descriptor)); } else if (descriptor instanceof PropertyDescriptor) { overridingMembers.add( - OverrideUtil.createOverridenPropertyElementFromDescriptor(file.getProject(), (PropertyDescriptor) descriptor)); + overrideProperty(file.getProject(), (PropertyDescriptor) descriptor)); } } return overridingMembers; } + @NotNull + private static JetElement overrideProperty(@NotNull Project project, @NotNull PropertyDescriptor descriptor) { + PropertyDescriptor newDescriptor = (PropertyDescriptor) descriptor.copy( + descriptor.getContainingDeclaration(), + Modality.OPEN, + descriptor.getVisibility(), + descriptor.getKind(), + /* copyOverrides = */ true); + newDescriptor.addOverriddenDescriptor(descriptor); + + StringBuilder bodyBuilder = new StringBuilder(); + String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); + if (initializer != null) { + bodyBuilder.append(" = ").append(initializer); + } + else { + bodyBuilder.append(" = ?"); + } + return JetPsiFactory.createProperty(project, DescriptorRenderer.SOURCE_CODE.render(newDescriptor) + bodyBuilder.toString()); + } + + @NotNull + private static JetNamedFunction overrideFunction(@NotNull Project project, @NotNull FunctionDescriptor descriptor) { + FunctionDescriptor newDescriptor = descriptor.copy( + descriptor.getContainingDeclaration(), + Modality.OPEN, + descriptor.getVisibility(), + descriptor.getKind(), + /* copyOverrides = */ true); + newDescriptor.addOverriddenDescriptor(descriptor); + + boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; + StringBuilder delegationBuilder = new StringBuilder(); + if (isAbstractFun) { + delegationBuilder.append("throw UnsupportedOperationException()"); + } + else { + delegationBuilder.append("super<").append(descriptor.getContainingDeclaration().getName()); + delegationBuilder.append(">.").append(descriptor.getName()).append("("); + } + boolean first = true; + if (!isAbstractFun) { + for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) { + if (!first) { + delegationBuilder.append(", "); + } + first = false; + delegationBuilder.append(parameterDescriptor.getName()); + } + delegationBuilder.append(")"); + } + JetType returnType = descriptor.getReturnType(); + KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); + + boolean returnsNotUnit = returnType != null && !builtIns.getUnitType().equals(returnType); + String body = "{" + (returnsNotUnit && !isAbstractFun ? "return " : "") + delegationBuilder.toString() + "}"; + + return JetPsiFactory.createFunction(project, DescriptorRenderer.SOURCE_CODE.render(newDescriptor) + body); + } + @NotNull public Set collectMethodsToGenerate(@NotNull JetClassOrObject classOrObject, BindingContext bindingContext) { DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, classOrObject); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java deleted file mode 100644 index 7d02f7b9532..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideUtil.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2010-2013 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.jet.plugin.codeInsight; - -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.JetElement; -import org.jetbrains.jet.lang.psi.JetExpression; -import org.jetbrains.jet.lang.psi.JetNamedFunction; -import org.jetbrains.jet.lang.psi.JetPsiFactory; -import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; -import org.jetbrains.jet.renderer.DescriptorRenderer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public class OverrideUtil { - - private OverrideUtil() { - } - - @NotNull - public static JetElement createOverridenPropertyElementFromDescriptor(@NotNull Project project, @NotNull PropertyDescriptor descriptor) { - StringBuilder bodyBuilder = new StringBuilder(); - bodyBuilder.append(displayableVisibility(descriptor)).append("override "); - if (descriptor.isVar()) { - bodyBuilder.append("var "); - } - else { - bodyBuilder.append("val "); - } - - addReceiverParameter(descriptor, bodyBuilder); - - bodyBuilder.append(descriptor.getName()).append(" : ").append( - DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(descriptor.getType())); - String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); - if (initializer != null) { - bodyBuilder.append(" = ").append(initializer); - } - else { - bodyBuilder.append(" = ?"); - } - return JetPsiFactory.createProperty(project, bodyBuilder.toString()); - } - - private static String displayableVisibility(MemberDescriptor descriptor) { - Visibility visibility = descriptor.getVisibility().normalize(); - return visibility != Visibilities.INTERNAL ? visibility.toString() + " ": ""; - } - - private static String renderType(JetType type, boolean shortNames) { - if (shortNames) return DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(type); - else return DescriptorRenderer.TEXT.renderType(type); - } - - private static void addReceiverParameter(CallableDescriptor descriptor, StringBuilder bodyBuilder) { - ReceiverParameterDescriptor receiverParameter = descriptor.getReceiverParameter(); - if (receiverParameter != null) { - bodyBuilder.append(receiverParameter.getType()).append("."); - } - } - - @NotNull - public static String createOverridenFunctionSignatureStringFromDescriptor( - @NotNull Project project, - @NotNull FunctionDescriptor descriptor, - boolean shortTypeNames - ) { - JetNamedFunction functionElement = createOverridenFunctionElementFromDescriptor(project, descriptor, shortTypeNames); - JetExpression bodyExpression = functionElement.getBodyExpression(); - assert bodyExpression != null : "createOverridenFunctionElementFromDescriptor should always return function with body."; - bodyExpression.replace(JetPsiFactory.createWhiteSpace(project)); - return functionElement.getText().trim(); - } - - @NotNull - public static JetNamedFunction createOverridenFunctionElementFromDescriptor( - @NotNull Project project, - @NotNull FunctionDescriptor descriptor, - boolean shortNames - ) { - StringBuilder bodyBuilder = new StringBuilder(); - bodyBuilder.append(displayableVisibility(descriptor)); - bodyBuilder.append("override fun "); - - List whereRestrictions = new ArrayList(); - if (!descriptor.getTypeParameters().isEmpty()) { - bodyBuilder.append("<"); - boolean first = true; - for (TypeParameterDescriptor param : descriptor.getTypeParameters()) { - if (!first) { - bodyBuilder.append(", "); - } - - bodyBuilder.append(param.getName()); - Set upperBounds = param.getUpperBounds(); - if (!upperBounds.isEmpty()) { - boolean firstUpperBound = true; - for (JetType upperBound : upperBounds) { - String upperBoundText = ": " + renderType(upperBound, shortNames); - if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound)) { - if (firstUpperBound) { - bodyBuilder.append(upperBoundText); - } - else { - whereRestrictions.add(param.getName() + upperBoundText); - } - } - firstUpperBound = false; - } - } - - first = false; - } - bodyBuilder.append("> "); - } - - addReceiverParameter(descriptor, bodyBuilder); - - bodyBuilder.append(descriptor.getName()).append("("); - boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT; - StringBuilder delegationBuilder = new StringBuilder(); - if (isAbstractFun) { - delegationBuilder.append("throw UnsupportedOperationException()"); - } - else { - delegationBuilder.append("super<").append(descriptor.getContainingDeclaration().getName()); - delegationBuilder.append(">.").append(descriptor.getName()).append("("); - } - boolean first = true; - for (ValueParameterDescriptor parameterDescriptor : descriptor.getValueParameters()) { - if (!first) { - bodyBuilder.append(", "); - if (!isAbstractFun) { - delegationBuilder.append(", "); - } - } - first = false; - bodyBuilder.append(parameterDescriptor.getName()); - bodyBuilder.append(": "); - bodyBuilder.append(renderType(parameterDescriptor.getType(), shortNames)); - - if (!isAbstractFun) { - delegationBuilder.append(parameterDescriptor.getName()); - } - } - bodyBuilder.append(")"); - if (!isAbstractFun) { - delegationBuilder.append(")"); - } - JetType returnType = descriptor.getReturnType(); - KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); - - boolean returnsNotUnit = returnType != null && !builtIns.getUnitType().equals(returnType); - if (returnsNotUnit) { - bodyBuilder.append(": ").append(renderType(returnType, shortNames)); - } - if (!whereRestrictions.isEmpty()) { - bodyBuilder.append("\n").append("where ").append(StringUtil.join(whereRestrictions, ", ")); - } - bodyBuilder.append("{").append(returnsNotUnit && !isAbstractFun ? "return " : "").append(delegationBuilder.toString()).append("}"); - - return JetPsiFactory.createFunction(project, bodyBuilder.toString()); - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java index 71041cc5448..64b2cc71779 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java @@ -42,7 +42,7 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.actions.JetChangeFunctionSignatureAction; import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManagerUtil; -import org.jetbrains.jet.plugin.codeInsight.OverrideUtil; +import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils; import java.util.*; @@ -76,8 +76,8 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction