Commit Graph

173 Commits

Author SHA1 Message Date
Robert Field a8e63b82f1 8012557: Implement lambda methods on interfaces as private
8016320: Method reference in subinterface of type I.super::foo produces exception at runtime

Now that the VM supports interface instance private methods, lambda methods and lambda bridges are always private. Access is now through invokespecial.

Reviewed-by: vromero, jlahoda
2013-10-10 23:26:56 -07:00
Robert Field 9a6f8e8463 8025548: langtools test tools/javac/lambda/methodReference/BridgeMethod.java incorrectly assumes no other methods generated in lambda class
Reviewed-by: vromero
2013-09-27 13:06:38 -07:00
Vicente Romero cae732b133 8024497: crash returning this-referencing lambda from default method
Reviewed-by: jjg, rfield
2013-09-27 10:24:56 +01:00
Sonali Goel e60e01be01 8011738: Write test to check for bootstrap attributes for lambda expressions in class file
Reviewed-by: mcimadamore
2013-09-26 15:04:15 -07:00
Andreas Lundblad 48774216f2 6386236: Please rename com.sun.tools.javac.util.ListBuffer.lb()
Static factory method ListBuffer.lb removed. Replaced by constructor calls.

Reviewed-by: jfranck, jjg
2013-09-23 10:42:38 +02:00
Vicente Romero 70e873ec73 8024696: Missing null check in bound method reference capture
Reviewed-by: jjg, briangoetz
2013-09-22 12:53:03 +01:00
Vicente Romero 204f4422ba 8023558: Javac creates invalid bootstrap methods for complex lambda/methodref case
Co-authored-by: Maurizio Cimadamore <maurizio.cimadamore@oracle.com>
Reviewed-by: jjg
2013-09-12 22:40:29 +01:00
Andreas Lundblad fae7d60062 8005222: Fixed bugs should have tests with bugid in @bug tag
Reviewed-by: jfranck, jjg
2013-09-10 13:47:51 +02:00
Jan Lahoda a9e5e17bd2 8019521: Enhanced rethrow disabled in lambdas
Fixing effectively final detection inside lambdas, small cleanup related to thrown types detection in lambdas

Reviewed-by: mcimadamore, jjg
2013-09-09 23:13:45 +02:00
Brian Goetz b03e5fc290 8015322: Javac template test framework
Putback of the javac template test framework from the Lambda repository

Reviewed-by: jjg
2013-09-09 17:11:55 -04:00
Vicente Romero 1704a9454c 8024154: Fix for 8016177: structural most specific and stuckness breaks 6 langtools tests
Reviewed-by: jjg, jfranck
2013-09-09 16:32:08 +01:00
Maurizio Cimadamore 4cc7a55aab 8023549: Compiler emitting spurious errors when constructor reference type is inferred and explicit type arguments are supplied
Reviewed-by: jjg, vromero
2013-09-04 00:01:05 +01:00
Maurizio Cimadamore 06caeea3d6 8023389: Javac fails to infer type for lambda used with intersection type and wildcards
Reviewed-by: jjg, vromero
2013-09-03 23:31:33 +01:00
Maurizio Cimadamore 0382c78ff1 8016177: structural most specific and stuckness
Reviewed-by: jjg, vromero
2013-09-02 22:38:36 +01:00
Henry Jen 8873ff4e48 8014566: Remove @ignore tags from MethodReference66 and InInterface when 8013875 is fixed
Reviewed-by: briangoetz, jjg
2013-08-28 10:17:23 -07:00
Jan Lahoda 59e0637339 8015809: More user friendly compile-time errors for uncaught exceptions in lambda expression
Producing individual errors for uncaught undeclared exceptions inside lambda expressions, rather than one error for the whole lambda

Reviewed-by: mcimadamore
2013-08-15 22:33:43 +02:00
Maurizio Cimadamore 58d92c516a 8021567: Javac doesn't report \"java: reference to method is ambiguous\" any more
Javac incorrectly forgets about constant folding results within lambdas

Reviewed-by: jjg, vromero
2013-08-12 17:28:31 +01:00
Vicente Romero 22652f5354 8022622: javac, two tests are failing with compile time error after class Collector was modified
Reviewed-by: mcimadamore
2013-08-10 16:26:50 +01:00
Maurizio Cimadamore da6bbaf42b 8020843: javac crashes on accessibility check with method reference with typevar receiver
Method reference overload check doesn't walk through type-variable receivers

Reviewed-by: jjg
2013-07-25 14:51:40 +01:00
Maurizio Cimadamore 663170c654 8016081: field initialized with lambda in annotation types doesn't compile
Check for annotation attributes should skip over synthetic methods

Reviewed-by: jjg
2013-07-25 14:49:16 +01:00
Maurizio Cimadamore 67362236e8 8020804: javac crashes when speculative attribution infers intersection type with array component
Assertion is causing javac to crash because of lack of support for arrays in intersection types

Reviewed-by: jjg
2013-07-25 14:47:43 +01:00
Lana Steuck be00b8110f Merge 2013-07-17 10:40:53 -07:00
Maurizio Cimadamore eb4e8153b3 8020147: Spurious errors when compiling nested stuck lambdas
Scope of deferred types is not copied correctly; postAttr analyzer should not run on stuck expressions

Reviewed-by: jjg
2013-07-17 14:13:15 +01:00
Maurizio Cimadamore e92a56fade 8012238: Nested method capture and inference
8008200: java/lang/Class/asSubclass/BasicUnit.java fails to compile

Inference support should be more flexible w.r.t. nested method calls returning captured types

Reviewed-by: jjg, vromero
2013-07-17 14:11:41 +01:00
Maurizio Cimadamore 99b0413d48 8016175: Add bottom-up type-checking support for unambiguous method references
Type-checking of non-overloaded method references should be independent from target-type

Reviewed-by: jjg, vromero
2013-07-17 14:09:46 +01:00
Maurizio Cimadamore 941752ea25 8012242: Lambda compatibility and checked exceptions
Inference variables in 'throws' clause with no constraints should be inferred as RuntimeException

Reviewed-by: jjg, vromero
2013-07-17 14:04:01 +01:00
Maurizio Cimadamore 617386d568 8013404: Unclear spec for target typing with conditional operator (?:)
Fix previously ignored test

Reviewed-by: jjg, vromero
2013-07-11 15:37:02 +01:00
Robert Field d3d1da337a 8016281: The SAM method should be passed to the metafactory as a MethodType not a MethodHandle
8020010: Move lambda bridge creation from metafactory and VM to compiler

Langtools/javac component of the bridge support and MethodType vs. MethodHandle changes.

Reviewed-by: jjg, vromero, briangoetz, forax
2013-07-11 14:07:39 +01:00
Maurizio Cimadamore 28b5759093 8016059: Cannot compile following lambda
8016060: Lambda isn't compiled with return statement

Spurious error triggered during unnecessary recovery round

Reviewed-by: jjg, vromero
2013-07-05 11:03:04 +01:00
Maurizio Cimadamore 86f630b63e 8019480: Javac crashes when method is called on a type-variable receiver from lambda expression
Logic for shortcircuiting speculative attribution doesn't handle type-variable receivers

Reviewed-by: jjg, vromero
2013-07-05 11:02:17 +01:00
Maurizio Cimadamore 7e6f7dcca5 8017618: NullPointerException in RichDiagnosticFormatter for bad input program
RDF crashes when diagnostic contains type 'void'

Reviewed-by: jjg, vromero
2013-07-05 11:00:19 +01:00
Eric McCorkle 9b1ec513d5 8013357: javac accepts erroneous binary comparison operations
Javac does not report type errors on illegal Object == primitive comparisons

Reviewed-by: abuckley, mcimadamore
2013-06-27 17:45:56 -04:00
Chris Hegarty 700804c6f2 8017045: anti-delta fix for 8013789
Reviewed-by: alanb
2013-06-19 11:48:05 +01:00
Maurizio Cimadamore 1839512a15 8013789: Compiler should emit bridges in interfaces
Paired with 8015402: Lambda metafactory should not attempt to determine bridge methods

Reviewed-by: vromero
2013-06-17 20:29:31 -07:00
Maurizio Cimadamore 80407ef47d 8013576: Add stat support to LambdaToMethod
LambdaToMethod should emit info to help diagnose/test lambda metafactory problems

Reviewed-by: jjg, vromero
2013-06-10 15:57:32 +01:00
Maurizio Cimadamore 459b2cba93 8015648: Duplicate variable in lambda causes javac crash
Missing flag in synthetic lambda blog is causing duplicates symbol to go undetected

Reviewed-by: jjg, vromero
2013-06-06 15:37:23 +01:00
Maurizio Cimadamore abaf1a5c51 8015432: javac crashes with stack overflow when method called recursively from nested generic call
Check.checkMethod should only be called after inference has completed

Reviewed-by: jjg, vromero
2013-06-06 15:35:05 +01:00
Maurizio Cimadamore 07baf8072a 8008627: Compiler mishandles three-way return-type-substitutability
Compiler should not enforce an order in how ambiguous methods should be resolved

Reviewed-by: jjg, vromero
2013-06-06 15:33:40 +01:00
Maurizio Cimadamore 1c6a680e66 8008160: Five lambda TargetType tests have @ignore
Remove @ignore flags from tests that now pass

Reviewed-by: jjg
2013-06-04 11:31:12 +01:00
Maurizio Cimadamore d176f2abdf 8014494: javac crashes when varargs element of a method reference is inferred from the context
Varargs element is not refreshed after type-inference

Reviewed-by: jjg, vromero
2013-05-24 15:27:27 +01:00
Vicente Romero 6a02cd46e0 8005207: test has 2 @bug tags
Reviewed-by: mcimadamore
2013-05-21 13:50:56 +01:00
Robert Field 495e78ce52 8010006: NPE in javac with interface super in lambda
Reviewed-by: mcimadamore
2013-05-15 06:53:01 -07:00
Maurizio Cimadamore 4b1aa379e5 8013222: Javac issues spurious raw type warnings when lambda has implicit parameter types
Bad warnings and position for lambda inferred parameter types

Reviewed-by: jjg, vromero
2013-05-15 14:03:09 +01:00
Maurizio Cimadamore fc9e870275 8012685: Spurious raw types warning when using unbound method references
Spurious raw type warning when unbound method reference qualifier parameter types are inferred from target

Reviewed-by: jjg, vromero
2013-05-15 14:02:37 +01:00
Maurizio Cimadamore ec458693f7 8012003: Method diagnostics resolution need to be simplified in some cases
Unfold method resolution diagnostics when they mention errors in poly expressions

Reviewed-by: jjg, vromero
2013-05-15 14:00:31 +01:00
Robert Field c51505263f 8012556: Implement lambda methods on interfaces as static
8006140: Javac NPE compiling Lambda expression on initialization expression of static field in interface

Lambdas occurring in static contexts or those not needing instance information should be generated into static methods.  This has long been the case for classes.  However, as a work-around to the lack of support for statics on interfaces, interface lambda methods have been generated into default methods.  For lambdas in interface static contexts (fields and static methods) this causes an NPE in javac because there is no 'this'.  MethodHandles now support static methods on interfaces.  This changeset allows lambda methods to be generated as static interface methods.  An existing bug in Hotspot (8013875) is exposed in a test when the "-esa" flag is used.  This test and another test that already exposed this bug have been marked with @ignore.

Reviewed-by: mcimadamore
2013-05-14 11:11:09 -07:00
Robert Field 136b4bc9b2 8014023: When a method reference to a local class constructor is contained in a method whose number of parameters matches the number of constructor parameters compilation fails
Reviewed-by: mcimadamore
2013-05-07 06:39:34 -07:00
Jonathan Gibbons 155bd74411 8012728: Normalize @ignore comments on langtools tests
Reviewed-by: vromero, mcimadamore
2013-05-03 09:56:56 -07:00
Robert Field 0ab1bb68cc 8011591: BootstrapMethodError when capturing constructor ref to local classes
Reviewed-by: mcimadamore
2013-05-01 08:46:04 -07:00
Maurizio Cimadamore 8b680bdde2 8011392: Missing checkcast when casting to intersection type
Javac should emit a checkcast for each additional target type specified in an intersection type cast

Reviewed-by: jjg
2013-04-15 14:17:30 +01:00
Maurizio Cimadamore 8f2d47cf79 8011028: lang/INFR/infr001/infr00101md/infr00101md.java fails to compile after switch to JDK8-b82
Fix bug in Types.removeWildcards

Reviewed-by: jjg
2013-04-15 14:16:05 +01:00
Maurizio Cimadamore e59fd44a73 8011376: Spurious checked exception errors in nested method call
Fallback attribution logic doesn't work properly when lambda throws checked exceptions

Reviewed-by: jjg
2013-04-15 14:15:07 +01:00
Maurizio Cimadamore 2b94dbb504 8011377: Javac crashes when multiple lambdas are defined in an array
Wrong attribution environment used by DeferredAttr

Reviewed-by: jjg
2013-04-15 14:12:17 +01:00
Maurizio Cimadamore da9dd76b20 8010822: Intersection type cast for functional expressions does not follow spec EDR
Remove support for marker interfaces; redefine intersection type casts to be order-independent

Reviewed-by: jjg
2013-04-08 15:59:29 +01:00
Maurizio Cimadamore ea55015155 8009131: Overload: javac should discard methods that lead to errors in lambdas with implicit parameter types
Lambdas that have errors in their bodies should make enclosing overload resolution fail

Reviewed-by: jjg
2013-04-08 15:57:10 +01:00
Maurizio Cimadamore b4b6e4f82e 8010404: Lambda debugging: redundant LineNumberTable entry for lambda capture
Ignore indy entries in LineNumberTable

Reviewed-by: jjg
2013-04-08 15:53:08 +01:00
Maurizio Cimadamore 2b66afe14d 8010303: Graph inference: missing incorporation step causes spurious inference error
Multiple equality constraints on inference vars are not used to generate new inference constraints

Reviewed-by: jjg
2013-03-22 12:43:09 +00:00
Maurizio Cimadamore 710a687c15 8009820: AssertionError when compiling java code with two identical static imports
Speculative attribution is carried out twice with same method symbol in case of static imports

Reviewed-by: jjg
2013-03-22 12:41:13 +00:00
Maurizio Cimadamore cec722fe8f 8010101: Intersection type cast issues redundant unchecked warning
Code for checking intersection type cast is incorrectly swapping operands, leading to spurious warnings

Reviewed-by: jjg
2013-03-22 12:39:34 +00:00
Maurizio Cimadamore 2454c8c5ae 8009649: Lambda back-end should generate invokespecial for method handles referring to private instance methods
Private lambda methods should be accessed through invokespecial

Reviewed-by: jjg
2013-03-22 12:38:12 +00:00
Robert Field 46e9ef69a7 8010010: NPE generating serializedLambdaName for nested lambda
Reviewed-by: mcimadamore
2013-03-14 22:54:17 -07:00
Maurizio Cimadamore 22e2c128a2 8009545: Graph inference: dependencies between inference variables should be set during incorporation
Move all transitivity checks into the incorporation round

Reviewed-by: jjg
2013-03-12 16:02:43 +00:00
Maurizio Cimadamore 69ee819808 8008540: Constructor reference to non-reifiable array should be rejected
8008539: Spurious error when constructor reference mention an interface type
8008538: Constructor reference accepts wildcard parameterized types

Overhaul of Check.checkConstructorRefType

Reviewed-by: jjg
2013-03-12 16:02:13 +00:00
Robert Field 41447ec765 8009742: Bad lambda name for lambda in a static initializer or ctor
Reviewed-by: mcimadamore
2013-03-11 10:02:55 -07:00
Robert Field 867e1720c2 8009582: Method reference generic constructor gives: IllegalArgumentException: Invalid lambda deserialization
Reviewed-by: mcimadamore
2013-03-07 08:26:13 -08:00
Maurizio Cimadamore c9bae7b335 8009299: Javac crashes when compiling method reference to static interface method
Assertion in Check.checMethod is too strict

Reviewed-by: jjg
2013-03-06 15:29:30 +00:00
Maurizio Cimadamore e788a0e536 8009129: Illegal access error when calling method reference
Javac generates method handle referencing non public type

Reviewed-by: jjg, rfield
2013-03-05 14:19:49 +00:00
Maurizio Cimadamore 7a28d6291d 8009154: Missing cast in method reference bridge leads to NoSuchMethodError
Missing cast in generated method reference bridge

Reviewed-by: rfield, jjg
2013-03-05 14:16:07 +00:00
Maurizio Cimadamore 3cbe22f256 8009227: Certain diagnostics should not be deferred
Add new diagnostic flag to mark non deferrable diagnostics

Reviewed-by: jjg
2013-03-05 14:12:07 +00:00
Maurizio Cimadamore d0a0df54ed 8004962: Code generation crash with lambda and local classes
Translation info should be propagated from LambdaToMethod to Lower

Reviewed-by: jjg, rfield
2013-03-05 14:04:57 +00:00
Maurizio Cimadamore f932d844c1 8008537: Missing method reference lookup error when unbound search finds a static method
Static-ness check should be applied after member reference resolution

Reviewed-by: jjg
2013-02-28 14:05:52 +00:00
Maurizio Cimadamore 85067f7869 8008813: Structural most specific fails when method reference is passed to overloaded method
Bad logic for checking most specific method reference type

Reviewed-by: jjg
2013-02-28 14:05:44 +00:00
Maurizio Cimadamore 9c01455eb6 8008723: Graph Inference: bad graph calculation leads to assertion error
Dependencies are not propagated correctly through merged nodes during inference graph initialization

Reviewed-by: jjg
2013-02-28 14:00:52 +00:00
Maurizio Cimadamore 7776fdebe7 8008708: Regression: separate compilation causes crash in wildcards inference logic
Invalid use of WildcardType.bound in Types.removeWildcards

Reviewed-by: jjg
2013-02-22 18:19:51 +00:00
Sonali Goel 96495bc664 8008337: Write test to check for compiler error when static method in interface is called via super()
Reviewed-by: mcimadamore
2013-02-22 13:31:35 +00:00
Robert Field bcaa703a49 8008405: Now that metafactory is in place, add javac lambda serialization tests
Tests part of original langtools serialization review.

Reviewed-by: mcimadamore
2013-02-21 14:43:51 -08:00
Maurizio Cimadamore 73b1aee3f4 8008444: Inherited generic functional descriptors are merged incorrectly
Missing call to Types.createMethodWithThrownTypes

Reviewed-by: jjg
2013-02-21 15:27:05 +00:00
Maurizio Cimadamore 8c1621ee38 8008293: Declared bounds not considered when functional interface containing unbound wildcards is instantiated
Wildcards inference should re-use some of the bounds info generated during capture conversion

Reviewed-by: jjg
2013-02-21 15:25:03 +00:00
Maurizio Cimadamore 5bbf5f39fc 8005183: Missing accessor for constructor reference pointing to private inner class ctor
Compiler should add bridges when translating private constructor reference

Reviewed-by: jjg
2013-02-21 15:23:48 +00:00
Maurizio Cimadamore 937b7d2fba 8008276: assertion error in com.sun.tools.javac.comp.TransTypes.visitApply
DiagnosticFilter used during speculative attribution is too broad

Reviewed-by: jjg
2013-02-21 15:21:38 +00:00
Maurizio Cimadamore eb68b33185 8008227: Mixing lambdas with anonymous classes leads to NPE thrown by compiler
Disentangle cyclic dependency between static-ness of synthetic lambda method and static-ness of classes nested within lambdas

Reviewed-by: jjg
2013-02-21 15:19:29 +00:00
Robert Field b2a3c762ff 8004969: Generate $deserializeLambda$ method
8006763: super in method reference used in anonymous class - ClassFormatError is produced
8005632: Inner classes within lambdas cause build failures
8005653: Lambdas containing inner classes referencing external type variables do not correctly parameterize the inner classes

Reviewed-by: mcimadamore
2013-02-15 18:40:38 -08:00
Maurizio Cimadamore fd17a4290b 8008309: TargetType60 fails because of bad golden file
Bad golden file

Reviewed-by: jjg
2013-02-15 18:13:00 +00:00
Sonali Goel 30058417e1 8007427: Annotation element as '_' gives compiler error instead of a warning
8007401: Write test to check for generation of warnings when '_' is used as an identifier

Extended identifier production not used in annotation values

Reviewed-by: jjg
2013-02-15 16:31:19 +00:00
Maurizio Cimadamore f5df2a2562 8007535: Compiler crashes on @FunctionalInterface used on interface with two inherited methods with same signatures
Bad check in Types.interfaceCandidates

Reviewed-by: jjg
2013-02-15 16:30:31 +00:00
Maurizio Cimadamore b496912ee1 8007462: Fix provisional applicability for method references
Add speculative arity-based check to rule out potential candidates when stuck reference is passed to method

Reviewed-by: jjg
2013-02-15 16:29:58 +00:00
Maurizio Cimadamore e88e06a5e0 8007285: AbstractMethodError instead of compile-time error when method reference with super and abstract
Missing abstractness check on super rmethod references

Reviewed-by: jjg
2013-02-15 16:28:57 +00:00
Maurizio Cimadamore f8f9896cc7 8006749: compiler does not allow Object protected methods to be used in lambda
Check.checkFunctionalInterface should take into account 'fake' override

Reviewed-by: jjg
2013-02-15 16:28:07 +00:00
Maurizio Cimadamore 1ec5dfafe0 8007464: Add graph inference support
Add support for more aggressive type-inference scheme

Reviewed-by: jjg
2013-02-12 19:25:09 +00:00
Jim Holmlund 8985a7c2ac 8007504: Remove @ignore from tests that no longer need it
Reviewed-by: mcimadamore
2013-02-05 18:55:13 +00:00
Maurizio Cimadamore 5b1a78dc92 8006694: temporarily workaround combo tests are causing time out in several platforms
Reviewed-by: jjg
2013-01-23 20:57:40 +00:00
Maurizio Cimadamore 1f8b2abf80 8006684: Compiler produces java.lang.VerifyError: Bad type on operand stack
Lambda desugaring generates spurious references to 'this' in static contexts

Reviewed-by: jjg
2013-01-22 16:39:51 +00:00
Maurizio Cimadamore 948888218b 8006673: TargetType52 fails because of bad golden file
Fix golden file in negative test

Reviewed-by: jjg
2013-01-22 16:23:35 +00:00
Maurizio Cimadamore 422c8bd914 8006566: Remove transient lambda-related guards from JavacParser
Remove transitional internal flag for allowing intersection types in cast

Reviewed-by: jjg
2013-01-21 20:14:39 +00:00
Maurizio Cimadamore 442154dcf9 8005244: Implement overload resolution as per latest spec EDR
Add support for stuck expressions and provisional applicability

Reviewed-by: jjg
2013-01-21 20:13:56 +00:00
Maurizio Cimadamore 00ae27b2cf 8006561: Langtools test failure: missing diags/examples
Forgot to hg add tests

Reviewed-by: jjg
2013-01-18 15:38:14 +00:00
Maurizio Cimadamore 0a95b1d28c 8005852: Treatment of '_' as identifier
Warn when '_' is found in an identifier position

Reviewed-by: jjg
2013-01-17 18:15:20 +00:00
Maurizio Cimadamore 3b3feb3853 8005299: Add FunctionalInterface checking to javac
Javac should check that types annotated with @FunctionalInterface are indeed functional interfaces

Reviewed-by: jjg
2013-01-16 16:30:11 +00:00
Maurizio Cimadamore d19bc80ca1 8005854: Add support for array constructor references
Support constructor references of the kind int[]::new

Reviewed-by: jjg
2013-01-16 16:27:01 +00:00
Vicente Romero 9d4f6a0ebe 8005167: execution time of combo tests in javac should be improved
Reviewed-by: jjg, jjh
2013-01-08 13:47:57 +00:00