com.google.gwt.core.client.impl.WeakMapping.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.core.client.impl.WeakMapping.java

Source

/*
 * Copyright 2009 Google Inc.
 * 
 * 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 com.google.gwt.core.client.impl;

import com.google.gwt.core.client.GwtScriptOnly;

/**
 * A class associating a (String, Object) map with arbitrary source objects
 * (except for Strings). This implementation is used in web mode.
 */
@GwtScriptOnly
public class WeakMapping {

    /*
     * This implementation is used in web mode only. It stores the (key, value)
     * maps in an expando field on their source objects.
     */

    /**
     * Returns the Object associated with the given key in the (key, value)
     * mapping associated with the given Object instance.
     * 
     * @param instance the source Object.
     * @param key a String key.
     * @return an Object associated with that key on the given instance, or null.
     */
    public static native Object get(Object instance, String key) /*-{
                                                                 if (instance.@java.lang.Object::expando) {
                                                                 return instance.@java.lang.Object::expando[':' + key];
                                                                 }
                                                                 return null;
                                                                 }-*/;

    /**
     * Associates a value with a given key in the (key, value) mapping associated
     * with the given Object instance. Note that the key space is module-wide, so
     * some care should be taken to choose sufficiently unique identifiers.
     * 
     * @param instance the source Object.
     * @param key a String key.
     * @param value the Object to associate with the key on the given source
     *          Object.
     */
    public static void set(Object instance, String key, Object value) {
        assert !(instance instanceof String) : "Cannot use Strings with WeakMapping";
        setNative(instance, key, value);
    }

    public static void setWeak(Object instance, String key, Object value) {
        set(instance, key, value);
    }

    private static native void setNative(Object instance, String key, Object value) /*-{
                                                                                    if (!instance.@java.lang.Object::expando) {
                                                                                    instance.@java.lang.Object::expando = {};
                                                                                    }
                                                                                    instance.@java.lang.Object::expando[':' + key] = value;
                                                                                    }-*/;
}