Skip to content

Commit 7d17ef5

Browse files
committed
Make JavaRuntimeTypeConverter Object aware
1 parent 699385e commit 7d17ef5

3 files changed

Lines changed: 54 additions & 1 deletion

File tree

CodeModel/src/main/java/org/openzen/zenscript/codemodel/GenericName.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
66
import org.openzen.zenscript.codemodel.type.TypeID;
77

8+
import java.util.Arrays;
89
import java.util.List;
10+
import java.util.Objects;
911
import java.util.Optional;
1012

1113
public class GenericName {
@@ -52,6 +54,21 @@ public boolean hasNoArguments() {
5254
return arguments.length == 0;
5355
}
5456

57+
@Override
58+
public final boolean equals(Object o) {
59+
if (!(o instanceof GenericName)) return false;
60+
61+
GenericName that = (GenericName) o;
62+
return Objects.equals(name, that.name) && Arrays.equals(arguments, that.arguments);
63+
}
64+
65+
@Override
66+
public int hashCode() {
67+
int result = Objects.hashCode(name);
68+
result = 31 * result + Arrays.hashCode(arguments);
69+
return result;
70+
}
71+
5572
@Override
5673
public String toString() {
5774
StringBuilder result = new StringBuilder(name);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.openzen.zencode.java.impl.conversion;
2+
3+
import org.openzen.zencode.shared.CodePosition;
4+
import org.openzen.zenscript.codemodel.GenericName;
5+
import org.openzen.zenscript.codemodel.annotations.AnnotationDefinition;
6+
import org.openzen.zenscript.codemodel.compilation.CompileContext;
7+
import org.openzen.zenscript.codemodel.definition.ZSPackage;
8+
import org.openzen.zenscript.codemodel.globals.IGlobal;
9+
import org.openzen.zenscript.codemodel.identifiers.ExpansionSymbol;
10+
import org.openzen.zenscript.codemodel.type.DefinitionTypeID;
11+
import org.openzen.zenscript.codemodel.type.TypeID;
12+
import org.openzen.zenscript.javashared.types.ObjectTypeSymbol;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.Optional;
17+
18+
public class JavaCompileContext extends CompileContext {
19+
20+
private static final GenericName OBJECT_NAME = new GenericName("Object");
21+
public JavaCompileContext(ZSPackage rootPackage, ZSPackage modulePackage, List<ExpansionSymbol> expansions, Map<String, IGlobal> globals, List<AnnotationDefinition> annotations) {
22+
super(rootPackage, modulePackage, expansions, globals, annotations);
23+
}
24+
25+
@Override
26+
public Optional<TypeID> resolve(CodePosition position, List<GenericName> name) {
27+
28+
if(name.size() == 1) {
29+
GenericName genericName = name.get(0);
30+
if(genericName.equals(OBJECT_NAME)) {
31+
return Optional.of(DefinitionTypeID.create(ObjectTypeSymbol.INSTANCE));
32+
}
33+
}
34+
return super.resolve(position, name);
35+
}
36+
}

JavaIntegration/src/main/java/org/openzen/zencode/java/impl/conversion/JavaRuntimeTypeConverterImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public TypeID parseType(ZenCodeType.Expansion expansion) {
8989
boolean relative = tokens.optional(ZSTokenType.T_DOT) != null;
9090
IParsedType parsed = IParsedType.parse(tokens);
9191

92-
CompileContext context = new CompileContext(relative ? packageInfo.getPkg() : packageInfo.getRoot(), packageInfo.getPkg(), Collections.emptyList(), Collections.emptyMap(), Collections.emptyList());
92+
JavaCompileContext context = new JavaCompileContext(relative ? packageInfo.getPkg() : packageInfo.getRoot(), packageInfo.getPkg(), Collections.emptyList(), Collections.emptyMap(), Collections.emptyList());
9393

9494
final ZSTokenParser typeBoundsTokens = ZSTokenParser.create(new LiteralSourceFile("internal", expansion.typeParameters()), null);
9595
TypeParameter[] typeParameters = Optional.ofNullable(ParsedTypeParameter.parseAll(typeBoundsTokens))

0 commit comments

Comments
 (0)