Skip to content

Commit e8a855f

Browse files
committed
Support external types in expression.
1 parent 6d162d4 commit e8a855f

File tree

6 files changed

+17
-15
lines changed

6 files changed

+17
-15
lines changed

src/main/java/org/byteskript/skript/compiler/Pattern.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ public Pattern(String[] patterns, Library provider) {
3737
}
3838
}
3939

40+
public static Matcher fakeMatcher(String thing) {
41+
final String solid = java.util.regex.Pattern.quote(thing);
42+
final Matcher matcher = java.util.regex.Pattern.compile(solid).matcher(thing);
43+
matcher.find();
44+
return matcher;
45+
}
46+
4047
protected void handle(final String string) {
4148
final StringBuilder builder = new StringBuilder().append("^");
4249
final List<String> types = new ArrayList<>();

src/main/java/org/byteskript/skript/compiler/SkriptLangSpec.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,7 @@
5454
import org.byteskript.skript.lang.syntax.map.MapCreator;
5555
import org.byteskript.skript.lang.syntax.maths.*;
5656
import org.byteskript.skript.lang.syntax.timing.*;
57-
import org.byteskript.skript.lang.syntax.type.TemplateTypeMember;
58-
import org.byteskript.skript.lang.syntax.type.ThisThingExpression;
59-
import org.byteskript.skript.lang.syntax.type.TypeCreator;
60-
import org.byteskript.skript.lang.syntax.type.TypeMember;
57+
import org.byteskript.skript.lang.syntax.type.*;
6158
import org.byteskript.skript.lang.syntax.variable.AtomicVariableExpression;
6259
import org.byteskript.skript.lang.syntax.variable.GlobalVariableExpression;
6360
import org.byteskript.skript.lang.syntax.variable.ThreadVariableExpression;

src/main/java/org/byteskript/skript/lang/syntax/comparison/IsArray.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.byteskript.skript.compiler.*;
1515
import org.byteskript.skript.lang.element.StandardElements;
1616
import org.byteskript.skript.lang.handler.StandardHandlers;
17-
import org.byteskript.skript.lang.syntax.generic.TypeExpression;
17+
import org.byteskript.skript.lang.syntax.type.TypeExpression;
1818

1919
import java.lang.reflect.Method;
2020

src/main/java/org/byteskript/skript/lang/syntax/comparison/IsOfType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.byteskript.skript.compiler.*;
1515
import org.byteskript.skript.lang.element.StandardElements;
1616
import org.byteskript.skript.lang.handler.StandardHandlers;
17-
import org.byteskript.skript.lang.syntax.generic.TypeExpression;
17+
import org.byteskript.skript.lang.syntax.type.TypeExpression;
1818

1919
import java.lang.reflect.Method;
2020

src/main/java/org/byteskript/skript/lang/syntax/generic/TypeExpression.java renamed to src/main/java/org/byteskript/skript/lang/syntax/type/TypeExpression.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* https://github.com/Moderocky/ByteSkript/blob/master/LICENSE
55
*/
66

7-
package org.byteskript.skript.lang.syntax.generic;
7+
package org.byteskript.skript.lang.syntax.type;
88

99
import mx.kenzie.foundation.MethodBuilder;
1010
import mx.kenzie.foundation.Type;
@@ -41,18 +41,16 @@ public Type getType(String string, Context context) {
4141
if (!entry.getKey().toLowerCase(Locale.ROOT).equals(string.toLowerCase(Locale.ROOT))) continue;
4242
return entry.getValue();
4343
}
44+
if (string.contains("/")) return new Type(string);
4445
return null;
4546
}
4647

4748
@Override
4849
public Pattern.Match match(String thing, Context context) {
49-
for (final Map.Entry<String, Type> entry : context.getTypeMap().entrySet()) {
50-
if (!entry.getKey().toLowerCase(Locale.ROOT).equals(thing.toLowerCase(Locale.ROOT))) continue;
51-
final Matcher matcher = java.util.regex.Pattern.compile(thing).matcher(thing);
52-
matcher.find();
53-
return new Pattern.Match(matcher, entry.getValue(), new Type[0]);
54-
}
55-
return null;
50+
final Type type = this.getType(thing, context);
51+
if (type == null) return null;
52+
final Matcher matcher = Pattern.fakeMatcher(thing);
53+
return new Pattern.Match(matcher, type, new Type[0]);
5654
}
5755

5856
@Override

src/test/resources/types.bsk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function java_implement:
8383
trigger:
8484
set {getter} to a new Getter
8585
assert {getter} is a Getter: "Type self-comparison failed."
86-
set {class} to get_class("java.util.function.Supplier")
86+
set {class} to java/util/function/Supplier
8787
assert {getter} is a {class}: "Type java super-comparison failed."
8888
set {var} to get() from {getter}
8989
assert {var} is "hello": "Supplier get method failed."

0 commit comments

Comments
 (0)