painless: Use isAssignableFrom instead of relying on ClassCastException

This commit is contained in:
Uwe Schindler 2016-05-14 16:04:18 +02:00
parent 6e467a1bd2
commit c78bf8c867
3 changed files with 7 additions and 25 deletions

View File

@ -60,20 +60,12 @@ public final class LBrace extends ALink {
} else if (sort == Sort.DEF) {
return new LDefArray(line, location, index).copy(this).analyze(settings, definition, variables);
} else {
try {
before.clazz.asSubclass(Map.class);
if (Map.class.isAssignableFrom(before.clazz)) {
return new LMapShortcut(line, location, index).copy(this).analyze(settings, definition, variables);
} catch (final ClassCastException exception) {
// Do nothing.
}
try {
before.clazz.asSubclass(List.class);
if (List.class.isAssignableFrom(before.clazz)) {
return new LListShortcut(line, location, index).copy(this).analyze(settings, definition, variables);
} catch (final ClassCastException exception) {
// Do nothing.
}
}

View File

@ -82,20 +82,12 @@ public final class LField extends ALink {
final EConstant index = new EConstant(line, location, value);
index.analyze(settings, definition, variables);
try {
before.clazz.asSubclass(Map.class);
if (Map.class.isAssignableFrom(before.clazz)) {
return new LMapShortcut(line, location, index).copy(this).analyze(settings, definition, variables);
} catch (final ClassCastException exception) {
// Do nothing.
}
try {
before.clazz.asSubclass(List.class);
if (List.class.isAssignableFrom(before.clazz)) {
return new LListShortcut(line, location, index).copy(this).analyze(settings, definition, variables);
} catch (final ClassCastException exception) {
// Do nothing.
}
}
}

View File

@ -54,9 +54,7 @@ public final class STrap extends AStatement {
void analyze(final CompilerSettings settings, final Definition definition, final Variables variables) {
variable = variables.addVariable(location, type, name, true, false);
try {
variable.type.clazz.asSubclass(Exception.class);
} catch (final ClassCastException cce) {
if (!Exception.class.isAssignableFrom(variable.type.clazz)) {
throw new ClassCastException(error("Not an exception type [" + variable.type.name + "]."));
}