/******************************************************************************* * Copyright (c) 2013, 2014 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Stephan Herrmann - Contribution for * Bug 427438 - [1.8][compiler] NPE at org.eclipse.jdt.internal.compiler.ast.ConditionalExpression.generateCode(ConditionalExpression.java:280) *******************************************************************************/ package org.eclipse.jdt.internal.compiler.ast; public enum ExpressionContext { /** Assignment context: potential poly-expressions are: method invocations, lambdas, reference expressions, conditional expressions and allocation expressions. This is the only Java 7 context where target type influenced evaluation of some expression. Context induced by: ReturnStatement, ArrayInitializer, Assignment, FieldDeclaration and LocalDeclaration. */ ASSIGNMENT_CONTEXT { public String toString() { return "assignment context"; //$NON-NLS-1$ } public boolean definesTargetType() { return true; } }, /** Invocation context: potential poly-expressions are: method invocations, lambdas, reference expressions, conditional expressions and allocation expressions. At this point, we don't distinguish between strict and loose invocation contexts - we may have to cross the bridge some day. Context induced by: AllocationExpression, QualifiedAllocationExpression, ExplicitConstructorCall, MessageSend CodeSnippetAllocationExpression and CodeSnippetMessageSend. */ INVOCATION_CONTEXT { public String toString() { return "invocation context"; //$NON-NLS-1$ } public boolean definesTargetType() { return true; } }, /** Casting context: potential poly-expressions are: lambdas and reference expressions Context induced by: CastExpression. */ CASTING_CONTEXT { public String toString() { return "casting context"; //$NON-NLS-1$ } public boolean definesTargetType() { return false; } }, /** Vanilla context (string, numeric): potential poly-expressions are: NONE. This is the nonpoly context in which expressions get evaluated, unless they feature in one of the above contexts. */ VANILLA_CONTEXT { public String toString() { return "vanilla context"; //$NON-NLS-1$ } public boolean definesTargetType() { return false; } }; public abstract boolean definesTargetType(); }