com.sun.xml.ws.spi.db.BindingHelper Maven / Gradle / Ivy
Show all versions of jaxws-rt Show documentation
/*
* Copyright (c) 1997, 2022 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.xml.ws.spi.db;
import java.lang.reflect.Type;
//TODO SOAPVersion WebServiceFeatureList
import org.glassfish.jaxb.core.api.impl.NameConverter;
import com.sun.istack.NotNull;
import com.sun.istack.Nullable;
/**
* BindingHelper
*
* @author [email protected]
*/
public final class BindingHelper {
private BindingHelper() {}
/**
* Computes a Java identifier from a local name.
*
*
* This method faithfully implements the name mangling rule as specified in the JAXB spec.
*
*
* In JAXB, a collision with a Java reserved word (such as "return") never happens.
* Accordingly, this method may return an identifier that collides with reserved words.
*
*
* Use {@code JJavaName.isJavaIdentifier(String)} to check for such collision.
*
* @return
* Typically, this method returns "nameLikeThis".
*/
public static @NotNull String mangleNameToVariableName(@NotNull String localName) {
return NameConverter.standard.toVariableName(localName);
}
/**
* Computes a Java class name from a local name.
*
*
* This method faithfully implements the name mangling rule as specified in the JAXB spec.
*
* @return
* Typically, this method returns "NameLikeThis".
*/
public static @NotNull String mangleNameToClassName(@NotNull String localName) {
return NameConverter.standard.toClassName(localName);
}
/**
* Computes a Java class name from a local name.
*
*
* This method faithfully implements the name mangling rule as specified in the JAXB spec.
* This method works like {@link #mangleNameToClassName(String)} except that it looks
* for "getClass" and returns something else.
*
* @return
* Typically, this method returns "NameLikeThis".
*/
public static @NotNull String mangleNameToPropertyName(@NotNull String localName) {
return NameConverter.standard.toPropertyName(localName);
}
/**
* Gets the parameterization of the given base type.
*
*
* For example, given the following
*
{@code
* interface Foo extends List> {}
* interface Bar extends Foo {}
* }
* This method works like this:
* {@code
* getBaseClass( Bar, List ) = List
* getBaseClass( Bar, Foo ) = Foo
* getBaseClass( Foo extends Number>, Collection ) = Collection>
* getBaseClass( ArrayList extends BigInteger>, List ) = List extends BigInteger>
* }
*
* @param type
* The type that derives from {@code baseType}
* @param baseType
* The class whose parameterization we are interested in.
* @return
* The use of {@code baseType} in {@code type}.
* or null if the type is not assignable to the base type.
* @since 2.0 FCS
*/
public static @Nullable Type getBaseType(@NotNull Type type, @NotNull Class baseType) {
return Utils.REFLECTION_NAVIGATOR.getBaseClass(type,baseType);
}
public static Class erasure(Type t) {
return (Class) Utils.REFLECTION_NAVIGATOR.erasure(t);
}
}