Skip to content

Commit 0978c37

Browse files
committed
Speed up Message class initialization.
1 parent d6bdb6a commit 0978c37

File tree

1 file changed

+9
-30
lines changed
  • truffle/src/com.oracle.truffle.api.library/src/com/oracle/truffle/api/library

1 file changed

+9
-30
lines changed

truffle/src/com.oracle.truffle.api.library/src/com/oracle/truffle/api/library/Message.java

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,10 @@
4141
package com.oracle.truffle.api.library;
4242

4343
import java.lang.reflect.Method;
44-
import java.util.Arrays;
45-
import java.util.Collections;
4644
import java.util.List;
4745
import java.util.Objects;
4846

47+
import com.oracle.truffle.api.CompilerDirectives;
4948
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5049
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5150

@@ -71,13 +70,11 @@
7170
public abstract class Message {
7271

7372
private final String simpleName;
74-
private final String qualifiedName;
73+
private String qualifiedName; // lazy init
7574
private final int id;
76-
private final int hash;
7775
private final boolean deprecated;
7876
private final Class<?> returnType;
7977
private final Class<? extends Library> libraryClass;
80-
private final List<Class<?>> parameterTypes;
8178
@CompilationFinal(dimensions = 1) private final Class<?>[] parameterTypesArray;
8279
private final int parameterCount;
8380
@CompilationFinal LibraryFactory<Library> library;
@@ -104,15 +101,13 @@ private Message(Class<? extends Library> libraryClass, int id, String messageNam
104101
Objects.requireNonNull(messageName);
105102
Objects.requireNonNull(returnType);
106103
this.libraryClass = libraryClass;
107-
this.simpleName = messageName.intern();
104+
assert messageName.intern() == messageName : "message name must already be interned";
105+
this.simpleName = messageName;
108106
this.returnType = returnType;
109107
this.parameterTypesArray = parameterTypes;
110-
this.parameterTypes = Collections.unmodifiableList(Arrays.asList(parameterTypes));
111-
this.qualifiedName = (getLibraryName() + "." + simpleName + parameters(parameterTypes)).intern();
112108
this.deprecated = deprecated;
113109
this.id = id;
114110
this.parameterCount = parameterTypes.length;
115-
this.hash = qualifiedName.hashCode();
116111
}
117112

118113
private static String parameters(Class<?>... parameterTypes) {
@@ -150,6 +145,10 @@ public final int getId() {
150145
* @since 19.0
151146
*/
152147
public final String getQualifiedName() {
148+
if (qualifiedName == null) {
149+
CompilerDirectives.transferToInterpreterAndInvalidate();
150+
qualifiedName = (getLibraryName() + "." + getSimpleName() + parameters(parameterTypesArray)).intern();
151+
}
153152
return qualifiedName;
154153
}
155154

@@ -208,7 +207,7 @@ public final Class<?> getReceiverType() {
208207
* @since 19.0
209208
*/
210209
public final List<Class<?>> getParameterTypes() {
211-
return parameterTypes;
210+
return List.of(parameterTypesArray);
212211
}
213212

214213
/**
@@ -256,26 +255,6 @@ public final LibraryFactory<?> getFactory() {
256255
return library;
257256
}
258257

259-
/**
260-
* {@inheritDoc}
261-
*
262-
* @since 19.0
263-
*/
264-
@Override
265-
public final boolean equals(Object obj) {
266-
return this == obj;
267-
}
268-
269-
/**
270-
* {@inheritDoc}
271-
*
272-
* @since 19.0
273-
*/
274-
@Override
275-
public final int hashCode() {
276-
return hash;
277-
}
278-
279258
/**
280259
* {@inheritDoc}
281260
*

0 commit comments

Comments
 (0)