Before

…lines 1–12 unchanged (12 lines)
13 * Stephan Herrmann - Contributions for
14 * Bug 452788 - [1.8][compiler] Type not correctly inferred in lambda expression
15 *******************************************************************************/
16package org.eclipse.jdt.internal.compiler.ast;
17
18import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
19import org.eclipse.jdt.internal.compiler.lookup.InferenceContext18;
20import org.eclipse.jdt.internal.compiler.lookup.InvocationSite;
21import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
22import org.eclipse.jdt.internal.compiler.lookup.PolyTypeBinding;
23import org.eclipse.jdt.internal.compiler.lookup.Scope;
24import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
25
…lines 26–60 unchanged (35 lines)
61 /* Resolution: A poly expression must be prepared to be resolved multiple times and should manage matters in a side effect free fashion.
62 Typically, in invocation contexts, there is an initial resolution, multiple tentative resolutions and then a final resolution against
63 the ultimate target type.
64 */
65 public TypeBinding resolveType(BlockScope blockScope);
66 // Resolve expression tentatively - should have no lingering side-effects that may impact final resolution !
67 public Expression resolveExpressionExpecting(TypeBinding targetType, Scope scope, InferenceContext18 inferenceContext);
68
69}

After

…lines 1–12 unchanged (12 lines)
13 * Stephan Herrmann - Contributions for
14 * Bug 452788 - [1.8][compiler] Type not correctly inferred in lambda expression
15 *******************************************************************************/
16package org.eclipse.jdt.internal.compiler.ast;
17
18import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
19import org.eclipse.jdt.internal.compiler.lookup.InvocationSite;
20import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
21import org.eclipse.jdt.internal.compiler.lookup.PolyTypeBinding;
22import org.eclipse.jdt.internal.compiler.lookup.Scope;
23import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
24
25/**
…lines 26–59 unchanged (34 lines)
60 /* Resolution: A poly expression must be prepared to be resolved multiple times and should manage matters in a side effect free fashion.
61 Typically, in invocation contexts, there is an initial resolution, multiple tentative resolutions and then a final resolution against
62 the ultimate target type.
63 */
64 public TypeBinding resolveType(BlockScope blockScope);
65 // Resolve expression tentatively - should have no lingering side-effects that may impact final resolution !
66 public Expression resolveExpressionExpecting(TypeBinding targetType, Scope scope);
67
68}

Before

program
block_comment "/***********************************************************"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "org"
. "."
identifier "eclipse"
. "."
identifier "jdt"
. "."
identifier "internal"
. "."
identifier "compiler"
. "."
identifier "ast"
; ";"
import_declaration (+22 nodes collapsed)
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "org"
. "."
identifier "eclipse"
. "."
identifier "jdt"
. "."
identifier "internal"
. "."
identifier "compiler"
. "."
identifier "lookup"
. "."
identifier "InferenceContext18"
; ";"
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
block_comment "/**\n \tContract to be implemented by all poly expressions and"...
interface_declaration
modifiers
public "public"
interface "interface"
identifier "IPolyExpression"
interface_body
{ "{"
line_comment "// Expression context manipulation"
method_declaration
modifiers
public "public"
void_type "void"
identifier "setExpressionContext"
formal_parameters
( "("
formal_parameter
type_identifier "ExpressionContext"
identifier "context"
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "ExpressionContext"
identifier "getExpressionContext"
formal_parameters
( "("
) ")"
; ";"
line_comment "// Target type injection."
method_declaration
modifiers
public "public"
void_type "void"
identifier "setExpectedType"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "invocationTargetType"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "expectedType"
formal_parameters
( "("
) ")"
; ";"
line_comment "// Compatibility checks."
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPotentiallyCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
modifiers
final "final"
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isBoxingCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "sIsMoreSpecific"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "s"
, ","
formal_parameter
type_identifier "TypeBinding"
identifier "t"
, ","
formal_parameter
type_identifier "Scope"
identifier "skope"
) ")"
; ";"
line_comment "// Pertinence checks."
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPertinentToApplicability"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "MethodBinding"
identifier "method"
) ")"
; ";"
line_comment "// Polyness checks"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPolyExpression"
formal_parameters
( "("
formal_parameter
type_identifier "MethodBinding"
identifier "candidate"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPolyExpression"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isFunctionalType"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
array_type
type_identifier "Expression"
dimensions
[ "["
] "]"
identifier "getPolyExpressions"
formal_parameters
( "("
) ")"
; ";"
block_comment "/* Resolution: A poly expression must be prepared to be reso"...
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "resolveType"
formal_parameters
( "("
formal_parameter
type_identifier "BlockScope"
identifier "blockScope"
) ")"
; ";"
line_comment "// Resolve expression tentatively - should have no lingering"...
method_declaration
modifiers
public "public"
type_identifier "Expression"
identifier "resolveExpressionExpecting"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
, ","
formal_parameter
type_identifier "InferenceContext18"
identifier "inferenceContext"
) ")"
; ";"
} "}"

After

program
block_comment "/***********************************************************"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "org"
. "."
identifier "eclipse"
. "."
identifier "jdt"
. "."
identifier "internal"
. "."
identifier "compiler"
. "."
identifier "ast"
; ";"
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
import_declaration (+22 nodes collapsed)
block_comment "/**\n \tContract to be implemented by all poly expressions and"...
interface_declaration
modifiers
public "public"
interface "interface"
identifier "IPolyExpression"
interface_body
{ "{"
line_comment "// Expression context manipulation"
method_declaration
modifiers
public "public"
void_type "void"
identifier "setExpressionContext"
formal_parameters
( "("
formal_parameter
type_identifier "ExpressionContext"
identifier "context"
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "ExpressionContext"
identifier "getExpressionContext"
formal_parameters
( "("
) ")"
; ";"
line_comment "// Target type injection."
method_declaration
modifiers
public "public"
void_type "void"
identifier "setExpectedType"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "invocationTargetType"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "expectedType"
formal_parameters
( "("
) ")"
; ";"
line_comment "// Compatibility checks."
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPotentiallyCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
modifiers
final "final"
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isBoxingCompatibleWith"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "sIsMoreSpecific"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "s"
, ","
formal_parameter
type_identifier "TypeBinding"
identifier "t"
, ","
formal_parameter
type_identifier "Scope"
identifier "skope"
) ")"
; ";"
line_comment "// Pertinence checks."
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPertinentToApplicability"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "MethodBinding"
identifier "method"
) ")"
; ";"
line_comment "// Polyness checks"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPolyExpression"
formal_parameters
( "("
formal_parameter
type_identifier "MethodBinding"
identifier "candidate"
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isPolyExpression"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
boolean_type "boolean"
identifier "isFunctionalType"
formal_parameters
( "("
) ")"
; ";"
method_declaration
modifiers
public "public"
array_type
type_identifier "Expression"
dimensions
[ "["
] "]"
identifier "getPolyExpressions"
formal_parameters
( "("
) ")"
; ";"
block_comment "/* Resolution: A poly expression must be prepared to be reso"...
method_declaration
modifiers
public "public"
type_identifier "TypeBinding"
identifier "resolveType"
formal_parameters
( "("
formal_parameter
type_identifier "BlockScope"
identifier "blockScope"
) ")"
; ";"
line_comment "// Resolve expression tentatively - should have no lingering"...
method_declaration
modifiers
public "public"
type_identifier "Expression"
identifier "resolveExpressionExpecting"
formal_parameters
( "("
formal_parameter
type_identifier "TypeBinding"
identifier "targetType"
, ","
formal_parameter
type_identifier "Scope"
identifier "scope"
) ")"
; ";"
} "}"