001/* 002 * Copyright (c) 2012-2018 Institut National des Sciences Appliquées de Lyon (INSA Lyon) and others 003 * 004 * This program and the accompanying materials are made available under the 005 * terms of the Eclipse Public License 2.0 which is available at 006 * http://www.eclipse.org/legal/epl-2.0. 007 * 008 * SPDX-License-Identifier: EPL-2.0 009 */ 010 011package gololang.ir; 012 013/** 014 * A reference to a class. 015 * 016 * <p>Used to represent a literal class notation. 017 */ 018public final class ClassReference { 019 private final String name; 020 021 private ClassReference(String name) { 022 this.name = java.util.Objects.requireNonNull(name); 023 } 024 025 public static ClassReference of(Object o) { 026 if (o instanceof ClassReference) { 027 return (ClassReference) o; 028 } 029 if (o instanceof Class<?>) { 030 return new ClassReference(((Class<?>) o).getCanonicalName()); 031 } 032 return new ClassReference(o.toString()); 033 } 034 035 public String getName() { 036 return this.name; 037 } 038 039 public String toJVMType() { 040 return this.name.replaceAll("\\.", "#"); 041 } 042 043 @Override 044 public String toString() { 045 return "Class<" + name + ">"; 046 } 047}