diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java index 4f54a81bfcf..89b48e84678 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java @@ -30,13 +30,12 @@ import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import org.jetbrains.jet.lang.types.lang.PrimitiveType; -import java.lang.annotation.Annotation; import java.util.*; /** * @author svtk */ -public class JavaToKotlinClassMap implements PlatformToKotlinClassMap { +public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements PlatformToKotlinClassMap { private static JavaToKotlinClassMap instance = null; @NotNull @@ -57,42 +56,6 @@ public class JavaToKotlinClassMap implements PlatformToKotlinClassMap { initPrimitives(); } - private void init() { - JetStandardLibrary standardLibrary = JetStandardLibrary.getInstance(); - - register(Object.class, JetStandardClasses.getAny()); - register(String.class, standardLibrary.getString()); - register(CharSequence.class, standardLibrary.getCharSequence()); - register(Throwable.class, standardLibrary.getThrowable()); - register(Number.class, standardLibrary.getNumber()); - register(Comparable.class, standardLibrary.getComparable()); - register(Enum.class, standardLibrary.getEnum()); - register(Annotation.class, standardLibrary.getAnnotation()); - register(Iterable.class, standardLibrary.getIterable()); - register(Iterator.class, standardLibrary.getIterator()); - - registerCovariant(Iterable.class, standardLibrary.getMutableIterable()); - registerCovariant(Iterator.class, standardLibrary.getMutableIterator()); - - register(Collection.class, standardLibrary.getCollection()); - registerCovariant(Collection.class, standardLibrary.getMutableCollection()); - - register(List.class, standardLibrary.getList()); - registerCovariant(List.class, standardLibrary.getMutableList()); - - register(Set.class, standardLibrary.getSet()); - registerCovariant(Set.class, standardLibrary.getMutableSet()); - - register(Map.class, standardLibrary.getMap()); - registerCovariant(Map.class, standardLibrary.getMutableMap()); - - register(Map.Entry.class, standardLibrary.getMapEntry()); - registerCovariant(Map.Entry.class, standardLibrary.getMutableMapEntry()); - - register(ListIterator.class, standardLibrary.getListIterator()); - registerCovariant(ListIterator.class, standardLibrary.getMutableListIterator()); - } - private void initPrimitives() { JetStandardLibrary standardLibrary = JetStandardLibrary.getInstance(); for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) { @@ -131,19 +94,30 @@ public class JavaToKotlinClassMap implements PlatformToKotlinClassMap { return new FqName(javaClass.getName().replace("$", ".")); } - private void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor) { + @Override + /*package*/ void register( + @NotNull Class javaClass, + @NotNull ClassDescriptor kotlinDescriptor + ) { register(getJavaClassFqName(javaClass), kotlinDescriptor); } + @Override + /*package*/ void register( + @NotNull Class javaClass, + @NotNull ClassDescriptor kotlinDescriptor, + @NotNull ClassDescriptor kotlinMutableDescriptor + ) { + FqName javaClassName = getJavaClassFqName(javaClass); + register(javaClassName, kotlinDescriptor); + registerCovariant(javaClassName, kotlinMutableDescriptor); + } + private void register(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { classDescriptorMap.put(javaClassName, kotlinDescriptor); packagesWithMappedClasses.put(javaClassName.parent(), kotlinDescriptor); } - private void registerCovariant(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor) { - registerCovariant(getJavaClassFqName(javaClass), kotlinDescriptor); - } - private void registerCovariant(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { classDescriptorMapForCovariantPositions.put(javaClassName, kotlinDescriptor); packagesWithMappedClasses.put(javaClassName.parent(), kotlinDescriptor); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java new file mode 100644 index 00000000000..598c45dc438 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java @@ -0,0 +1,57 @@ +/* + * Copyright 2010-2012 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.lang.resolve.java; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.types.lang.JetStandardClasses; +import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; + +import java.lang.annotation.Annotation; +import java.util.*; + +/** + * @author svtk + */ +public abstract class JavaToKotlinClassMapBuilder { + + /*package*/ void init() { + JetStandardLibrary standardLibrary = JetStandardLibrary.getInstance(); + + register(Object.class, JetStandardClasses.getAny()); + register(String.class, standardLibrary.getString()); + register(CharSequence.class, standardLibrary.getCharSequence()); + register(Throwable.class, standardLibrary.getThrowable()); + register(Number.class, standardLibrary.getNumber()); + register(Comparable.class, standardLibrary.getComparable()); + register(Enum.class, standardLibrary.getEnum()); + register(Annotation.class, standardLibrary.getAnnotation()); + + register(Iterable.class, standardLibrary.getIterable(), standardLibrary.getMutableIterable()); + register(Iterator.class, standardLibrary.getIterator(), standardLibrary.getMutableIterator()); + register(Collection.class, standardLibrary.getCollection(), standardLibrary.getMutableCollection()); + register(List.class, standardLibrary.getList(), standardLibrary.getMutableList()); + register(Set.class, standardLibrary.getSet(), standardLibrary.getMutableSet()); + register(Map.class, standardLibrary.getMap(), standardLibrary.getMutableMap()); + register(Map.Entry.class, standardLibrary.getMapEntry(), standardLibrary.getMutableMapEntry()); + register(ListIterator.class, standardLibrary.getListIterator(), standardLibrary.getMutableListIterator()); + } + + /*package*/ abstract void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor); + + /*package*/ abstract void register(@NotNull Class javaClass, @NotNull ClassDescriptor kotlinDescriptor, @NotNull ClassDescriptor kotlinMutableDescriptor); +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/KotlinToJavaTypesMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/KotlinToJavaTypesMap.java index 1d925466aec..2334a9f9f61 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/KotlinToJavaTypesMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/KotlinToJavaTypesMap.java @@ -27,17 +27,15 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.lang.JetStandardClasses; -import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import org.jetbrains.jet.lang.types.lang.PrimitiveType; -import java.lang.annotation.Annotation; -import java.util.*; +import java.util.Map; +import java.util.Set; /** * @author svtk */ -public class KotlinToJavaTypesMap { +public class KotlinToJavaTypesMap extends JavaToKotlinClassMapBuilder { private static KotlinToJavaTypesMap instance = null; @NotNull @@ -57,41 +55,6 @@ public class KotlinToJavaTypesMap { initPrimitives(); } - private void init() { - JetStandardLibrary standardLibrary = JetStandardLibrary.getInstance(); - - register(JetStandardClasses.getAny(), Object.class); - register(standardLibrary.getNumber(), Number.class); - register(standardLibrary.getString(), String.class); - register(standardLibrary.getThrowable(), Throwable.class); - register(standardLibrary.getCharSequence(), CharSequence.class); - register(standardLibrary.getComparable(), Comparable.class); - register(standardLibrary.getEnum(), Enum.class); - register(standardLibrary.getAnnotation(), Annotation.class); - register(standardLibrary.getIterable(), Iterable.class); - register(standardLibrary.getIterator(), Iterator.class); - register(standardLibrary.getMutableIterable(), Iterable.class); - register(standardLibrary.getMutableIterator(), Iterator.class); - - register(standardLibrary.getCollection(), Collection.class); - register(standardLibrary.getMutableCollection(), Collection.class); - - register(standardLibrary.getList(), List.class); - register(standardLibrary.getMutableList(), List.class); - - register(standardLibrary.getSet(), Set.class); - register(standardLibrary.getMutableSet(), Set.class); - - register(standardLibrary.getMap(), Map.class); - register(standardLibrary.getMutableMap(), Map.class); - - register(standardLibrary.getMapEntry(), Map.Entry.class); - register(standardLibrary.getMutableMapEntry(), Map.Entry.class); - - register(standardLibrary.getListIterator(), ListIterator.class); - register(standardLibrary.getMutableListIterator(), ListIterator.class); - } - private void initPrimitives() { for (JvmPrimitiveType jvmPrimitiveType : JvmPrimitiveType.values()) { FqName className = jvmPrimitiveType.getPrimitiveType().getClassName(); @@ -121,10 +84,24 @@ public class KotlinToJavaTypesMap { return asmTypes.get(fqName); } - private void register(@NotNull ClassDescriptor kotlinDescriptor, @NotNull Class javaClass) { + @Override + /*package*/ void register( + @NotNull Class javaClass, + @NotNull ClassDescriptor kotlinDescriptor + ) { register(kotlinDescriptor, AsmTypeConstants.getType(javaClass)); } + @Override + /*package*/ void register( + @NotNull Class javaClass, + @NotNull ClassDescriptor kotlinDescriptor, + @NotNull ClassDescriptor kotlinMutableDescriptor + ) { + register(javaClass, kotlinDescriptor); + register(javaClass, kotlinMutableDescriptor); + } + private void register(@NotNull ClassDescriptor kotlinDescriptor, @NotNull Type javaType) { FqNameUnsafe fqName = DescriptorUtils.getFQName(kotlinDescriptor); assert fqName.isSafe();