From 478bf8ac0ff6ef8f8995f559a85a033b215d981e Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 21 Feb 2012 14:37:30 +0400 Subject: [PATCH] Fixed order of automatically implemented abstract members. #KT-1357 fixed --- .../jet/lang/resolve/OverrideResolver.java | 7 ++-- .../jetbrains/jet/util/LinkedMultiMap.java | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/util/LinkedMultiMap.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index 936f27dda26..0a1cdf4ce6b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.util.CommonSuppliers; +import org.jetbrains.jet.util.LinkedMultiMap; import java.util.*; @@ -91,7 +92,7 @@ public class OverrideResolver { MultiMap functionsFromCurrentByName = groupDescriptorsByName(classDescriptor.getCallableMembers()); - Set functionNames = new HashSet(); + Set functionNames = new LinkedHashSet(); functionNames.addAll(functionsFromSupertypesByName.keySet()); functionNames.addAll(functionsFromCurrentByName.keySet()); @@ -170,7 +171,7 @@ public class OverrideResolver { private static MultiMap groupDescriptorsByName(Collection properties) { - MultiMap r = new MultiMap(); + MultiMap r = new LinkedMultiMap(); for (T property : properties) { r.putValue(property.getName(), property); } @@ -179,7 +180,7 @@ public class OverrideResolver { private static List getDescriptorsFromSupertypes(ClassDescriptor classDescriptor) { - Set r = Sets.newHashSet(); + Set r = Sets.newLinkedHashSet(); for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) { r.addAll(getDescriptorsOfType(supertype.getMemberScope())); } diff --git a/compiler/frontend/src/org/jetbrains/jet/util/LinkedMultiMap.java b/compiler/frontend/src/org/jetbrains/jet/util/LinkedMultiMap.java new file mode 100644 index 00000000000..aa74d5a5c90 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/util/LinkedMultiMap.java @@ -0,0 +1,39 @@ +/* + * Copyright 2000-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.util; + +import com.intellij.util.containers.MultiMap; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author Evgeny Gerashchenko + * TODO reuse LinkedMultiMap from IDEA platform when it will be available there + */ +public class LinkedMultiMap extends MultiMap { + @Override + protected Map> createMap() { + return new LinkedHashMap>(); + } + + @Override + protected Map> createMap(int i, float v) { + return new LinkedHashMap>(i, v); + } +}