X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fcommon%2Fnames%2FName.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fcommon%2Fnames%2FName.java;h=04f2f9127bf276431e682c77ca4bb5ef283b21ed;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/common/names/Name.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/common/names/Name.java new file mode 100755 index 000000000..04f2f9127 --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/common/names/Name.java @@ -0,0 +1,34 @@ +package org.simantics.scl.compiler.common.names; + +import org.simantics.scl.compiler.internal.types.HashConsing; + +public final class Name { + public static final Name[] EMPTY_ARRAY = new Name[0]; + + public final String module; + public final String name; + + private Name(String module, String name) { + this.module = module; + this.name = name; + } + + private static final HashConsing nameCache = + new HashConsing() { + protected boolean equals(Name a, Name b) { + return a.name.equals(b.name) && a.module.equals(b.module); + } + + protected int hashCode(Name obj) { + return obj.module.hashCode()*31 + obj.name.hashCode(); + } + }; + + public String toString() { + return module + "/" + name; + } + + public static Name create(String module, String name) { + return nameCache.canonical(new Name(module, name)); + } +}