package me.tomassetti.turin.parser.ast.expressions; import me.tomassetti.jvm.JvmMethodDefinition; import me.tomassetti.jvm.JvmType; import me.tomassetti.turin.resolvers.SymbolResolver; import me.tomassetti.turin.parser.ast.Node; import me.tomassetti.turin.typesystem.TypeUsage; import java.util.List; public abstract class Expression extends Node { public abstract TypeUsage calcType(); /** * When the expression corresponds to something invokable this method find which Jvm method corresponds to the call * with the given parameters. */ public JvmMethodDefinition findMethodFor(List<ActualParam> argsTypes, SymbolResolver resolver, boolean staticContext) { throw new UnsupportedOperationException("On " + this.getClass().getCanonicalName()); } /** * This expression represents a type? */ public boolean isType(SymbolResolver resolver) { return false; } public boolean canBeAssigned(SymbolResolver resolver) { return false; } public boolean canFieldBeAssigned(String field, SymbolResolver resolver) { throw new UnsupportedOperationException(this.getClass().getCanonicalName()); } }