aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/transforms
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-10-30 20:25:05 +0000
committerMichael Williamson <mike@zwobble.org>2016-10-30 20:25:05 +0000
commitfee1878340fe2055f9d5b4c52eb2993c06c25f25 (patch)
treefb827034b5a4a2174b08803120c295f5affd764f /src/main/java/org/zwobble/couscous/transforms
parentfd5dde9224680d46dd7081d051f1320194ff59ea (diff)
Store inner classes in ScalarType
Diffstat (limited to 'src/main/java/org/zwobble/couscous/transforms')
-rw-r--r--src/main/java/org/zwobble/couscous/transforms/HoistNestedTypes.java18
-rw-r--r--src/main/java/org/zwobble/couscous/transforms/SplitStaticsFromInterface.java2
2 files changed, 8 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/couscous/transforms/HoistNestedTypes.java b/src/main/java/org/zwobble/couscous/transforms/HoistNestedTypes.java
index ae4af14..6c40af9 100644
--- a/src/main/java/org/zwobble/couscous/transforms/HoistNestedTypes.java
+++ b/src/main/java/org/zwobble/couscous/transforms/HoistNestedTypes.java
@@ -12,7 +12,6 @@ import org.zwobble.couscous.util.ExtraSets;
import java.util.List;
import java.util.Optional;
import java.util.Set;
-import java.util.regex.Pattern;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
import static org.zwobble.couscous.ast.ReturnNode.returns;
@@ -81,25 +80,22 @@ public class HoistNestedTypes {
}
}
- private static final Pattern INNER_TYPE_QUALIFIER_REGEX = Pattern.compile(".*\\.[A-Z][^.]*$");
-
private boolean isInnerType(Type type) {
- // TODO: implement separate type classes for top-level and inner types rather than using this heuristic
-
return tryCast(ScalarType.class, type)
- .flatMap(scalarType -> scalarType.getQualifier())
- .map(qualifier -> INNER_TYPE_QUALIFIER_REGEX.matcher(qualifier).matches())
+ .map(scalarType -> scalarType.outerType().isPresent())
.orElse(false);
}
private Type outerType(ScalarType type) {
- // TODO: implement separate type classes for top-level and inner types
-
- return ScalarType.of(type.getQualifier().get());
+ return type.outerType().get();
}
private static Type hoistedTypeName(ScalarType type) {
- return ScalarType.of(type.getQualifier().get() + "__" + type.getSimpleName());
+ List<String> typeNames = type.getTypeNames();
+ return new ScalarType(
+ type.getPackage(),
+ cons(typeNames.get(0) + "__" + typeNames.get(1), typeNames.subList(2, typeNames.size()))
+ );
}
private HoistResult hoistInnerTypes(TypeNode declaration) {
diff --git a/src/main/java/org/zwobble/couscous/transforms/SplitStaticsFromInterface.java b/src/main/java/org/zwobble/couscous/transforms/SplitStaticsFromInterface.java
index 3af4042..f8623fc 100644
--- a/src/main/java/org/zwobble/couscous/transforms/SplitStaticsFromInterface.java
+++ b/src/main/java/org/zwobble/couscous/transforms/SplitStaticsFromInterface.java
@@ -57,7 +57,7 @@ public class SplitStaticsFromInterface {
}
private static ScalarType staticTypeFor(ScalarType name) {
- return ScalarType.of(name.getQualifiedName() + "_static");
+ return ScalarType.topLevel(name.getQualifiedName() + "_static");
}
private static boolean isSplittable(TypeNode typeNode) {