8087312: PropertyMapWrapper.equals should compare className
Reviewed-by: sundar, attila
This commit is contained in:
parent
2ea5c82229
commit
28f8652430
@ -30,6 +30,8 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import jdk.nashorn.internal.runtime.PropertyMap;
|
||||
|
||||
/**
|
||||
@ -120,7 +122,7 @@ final class ConstantData {
|
||||
private final int hashCode;
|
||||
|
||||
public PropertyMapWrapper(final PropertyMap map) {
|
||||
this.hashCode = Arrays.hashCode(map.getProperties());
|
||||
this.hashCode = Arrays.hashCode(map.getProperties()) + 31 * Objects.hashCode(map.getClassName());
|
||||
this.propertyMap = map;
|
||||
}
|
||||
|
||||
@ -131,8 +133,13 @@ final class ConstantData {
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object other) {
|
||||
return other instanceof PropertyMapWrapper &&
|
||||
Arrays.equals(propertyMap.getProperties(), ((PropertyMapWrapper) other).propertyMap.getProperties());
|
||||
if (!(other instanceof PropertyMapWrapper)) {
|
||||
return false;
|
||||
}
|
||||
final PropertyMap otherMap = ((PropertyMapWrapper) other).propertyMap;
|
||||
return propertyMap == otherMap
|
||||
|| (Arrays.equals(propertyMap.getProperties(), otherMap.getProperties())
|
||||
&& Objects.equals(propertyMap.getClassName(), otherMap.getClassName()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -596,6 +596,15 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
|
||||
return properties.getProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the name of the class of objects using this property map.
|
||||
*
|
||||
* @return class name of owner objects.
|
||||
*/
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevents the map from having additional properties.
|
||||
*
|
||||
|
53
nashorn/test/script/basic/JDK-8087312.js
Normal file
53
nashorn/test/script/basic/JDK-8087312.js
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* JDK-8087312: PropertyMapWrapper.equals should compare className
|
||||
*
|
||||
* @test
|
||||
* @run
|
||||
* @fork
|
||||
* @option -Dnashorn.debug=true
|
||||
*/
|
||||
|
||||
function createObject(type) {
|
||||
// we want to make sure two different object literals with the same keys and types share the same property map.
|
||||
if (type) {
|
||||
return {
|
||||
a: "a",
|
||||
b: 1,
|
||||
c: 0.1
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
a: "x",
|
||||
b: 10,
|
||||
c: 3.4
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var o1 = createObject(false);
|
||||
var o2 = createObject(true);
|
||||
Assert.assertTrue(Debug.map(o1) === Debug.map(o2));
|
||||
|
Loading…
x
Reference in New Issue
Block a user