| /* |
| * Copyright 2011 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.uibinder.rebind; |
| |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.core.ext.typeinfo.JClassType; |
| import com.google.gwt.core.ext.typeinfo.JParameterizedType; |
| import com.google.gwt.uibinder.rebind.model.OwnerField; |
| |
| /** |
| * Implementation of FieldWriter for a {@link com.google.gwt.uibinder.client.LazyDomElement}. |
| */ |
| public class FieldWriterOfLazyDomElement extends AbstractFieldWriter { |
| |
| /** |
| * The field type for @UiField LazyDomElement<T>. |
| */ |
| private final JParameterizedType ownerFieldType; |
| |
| /** |
| * The T parameter in LazyDomElement<T>. |
| */ |
| private final JClassType parameterType; |
| |
| public FieldWriterOfLazyDomElement(FieldManager manager, JClassType templateFieldType, |
| OwnerField ownerField, MortalLogger logger) throws UnableToCompleteException { |
| super(manager, FieldWriterType.DEFAULT, ownerField.getName(), logger); |
| |
| // ownerFieldType null means LazyDomElement is not parameterized. |
| this.ownerFieldType = ownerField.getRawType().isParameterized(); |
| if (ownerFieldType == null) { |
| logger.die("LazyDomElement must be of type LazyDomElement<? extends Element>."); |
| } |
| |
| // Parameterized LazyDomElement<T> must match its respective html element. |
| // Example: |
| // DivElement -> div |
| // SpanElement -> span |
| parameterType = ownerFieldType.getTypeArgs()[0]; |
| if (!templateFieldType.isAssignableTo(parameterType)) { |
| logger.die("Field %s is %s<%s>, must be %s<%s>.", ownerField.getName(), |
| ownerFieldType.getQualifiedSourceName(), parameterType, |
| ownerFieldType.getQualifiedSourceName(), templateFieldType); |
| } |
| } |
| |
| public JClassType getAssignableType() { |
| return ownerFieldType; |
| } |
| |
| public JClassType getInstantiableType() { |
| return ownerFieldType; |
| } |
| |
| public String getQualifiedSourceName() { |
| return ownerFieldType.getQualifiedSourceName() |
| + "<" + parameterType.getQualifiedSourceName() + ">"; |
| } |
| } |