001/* 002 * Copyright (c) 2012-2021 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 013import static java.util.Objects.requireNonNull; 014 015public final class Member extends GoloElement<Member> { 016 017 private final String name; 018 019 private Member(String name) { 020 super(); 021 this.name = requireNonNull(name); 022 } 023 024 public static Member of(Object o) { 025 if (o instanceof Member) { 026 return (Member) o; 027 } 028 return new Member(o.toString()); 029 } 030 031 protected Member self() { return this; } 032 033 public String getName() { 034 return name; 035 } 036 037 public boolean isPublic() { 038 return !name.startsWith("_"); 039 } 040 041 /** 042 * {@inheritDoc} 043 */ 044 @Override 045 public void accept(GoloIrVisitor visitor) { 046 visitor.visitMember(this); 047 } 048 049 /** 050 * {@inheritDoc} 051 */ 052 @Override 053 protected void replaceElement(GoloElement<?> original, GoloElement<?> newElement) { 054 throw cantReplace(original, newElement); 055 } 056 057 /** 058 * {@inheritDoc} 059 */ 060 @Override 061 public String toString() { 062 return String.format("<%s>", name); 063 } 064}