changeset 22173:dcb70d90c11d

Merging in changes in default branch
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Mon, 21 Sep 2015 11:21:03 +0200
parents b31dcacfc8ff (current diff) 7a6719b66a74 (diff)
children 0bcfe8c6088f
files truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/LayoutBuilder.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/AccessorTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/EngineSingleThreadedTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ExceptionDuringParsingTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/GlobalSymbolTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/JavaWrapper.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Breakpoint.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/SuspendedEvent.java truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTckTest.java truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLServer.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleTCK.java truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLServerContext.java
diffstat 464 files changed, 4797 insertions(+), 2786 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ArrayTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ArrayTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,22 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.api.dsl.test.ArrayTestFactory.TestNode1NodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class ArrayTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,22 +22,28 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.AssumptionArrayTestFactory;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.CacheAssumptionTestFactory;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.FieldTestFactory;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MethodTestFactory;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.NodeFieldTest2Factory;
 import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.StaticFieldTestFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
+import static com.oracle.truffle.api.dsl.test.TestHelper.getNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import java.util.HashMap;
+import java.util.Map;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 public class AssumptionsTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/BadLongOverflowSpecializationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/BadLongOverflowSpecializationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,15 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.BadLongOverflowSpecializationTestFactory.ImplicitCastExclusionFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class BadLongOverflowSpecializationTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/BinaryNodeTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/BinaryNodeTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,17 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.BinaryNodeTestFactory.AddNodeFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class BinaryNodeTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CachedTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CachedTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,13 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.BoundCacheFactory;
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.BoundCacheOverflowFactory;
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.TestBoundCacheOverflowContainsFactory;
@@ -39,7 +39,12 @@
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.TestGuardWithJustCachedParameterFactory;
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.TestMultipleCachesFactory;
 import com.oracle.truffle.api.dsl.test.CachedTestFactory.UnboundCacheFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertionsEnabled;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class CachedTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CodeFormatTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CodeFormatTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,11 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.CodeFormatTestFactory.LineWrappingTestFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Tests the generated code compiles without warnings for unusual large guard names.
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CompilerErrorTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CompilerErrorTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 
 public class CompilerErrorTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ContainsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ContainsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,23 +22,28 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.internal.DSLNode;
+import com.oracle.truffle.api.dsl.internal.SpecializedNode;
 import com.oracle.truffle.api.dsl.test.ContainsTestFactory.Contains1Factory;
 import com.oracle.truffle.api.dsl.test.ContainsTestFactory.Contains2Factory;
 import com.oracle.truffle.api.dsl.test.ContainsTestFactory.Contains3Factory;
 import com.oracle.truffle.api.dsl.test.ContainsTestFactory.Contains4Factory;
 import com.oracle.truffle.api.dsl.test.ContainsTestFactory.PolymorphicToMonomorphic0Factory;
 import com.oracle.truffle.api.dsl.test.TestHelper.ExecutionListener;
+import static com.oracle.truffle.api.dsl.test.TestHelper.array;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertRuns;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import static org.hamcrest.CoreMatchers.is;
+import org.junit.Assert;
+import static org.junit.Assert.assertThat;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class ContainsTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CreateCastTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/CreateCastTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,19 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.CreateCast;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.CreateCastTestFactory.CreateCastNode1Factory;
 import com.oracle.truffle.api.dsl.test.CreateCastTestFactory.CreateCastNode2Factory;
 import com.oracle.truffle.api.dsl.test.CreateCastTestFactory.CreateCastNode3Factory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import org.junit.Assert;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class CreateCastTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,11 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.DoubleEvaluatedNodeFactory;
 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.EvaluatedNodeFactory;
 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedGenerationFactory;
@@ -42,8 +43,11 @@
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class ExecuteEvaluatedTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteGroupingTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteGroupingTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,18 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static org.junit.Assert.*;
-
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.ExecuteGroupingTestFactory.ExecuteGrouping1NodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import static org.junit.Assert.assertEquals;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 /*
  * This test aims to test the reuse of execute methods with evaluated parameters as much as possible.
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteMethodTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteMethodTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
 
 public class ExecuteMethodTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExpectError.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExpectError.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import java.lang.annotation.*;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
  * This annotation is internally known by the dsl processor and used to expect errors for testing
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/FallbackTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/FallbackTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,19 +22,25 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.test.FallbackTestFactory.Fallback1Factory;
 import com.oracle.truffle.api.dsl.test.FallbackTestFactory.Fallback2Factory;
 import com.oracle.truffle.api.dsl.test.FallbackTestFactory.Fallback3Factory;
 import com.oracle.truffle.api.dsl.test.FallbackTestFactory.Fallback4Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.array;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertRuns;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class FallbackTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImplicitCastTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,20 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast0NodeFactory;
 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast1NodeFactory;
 import com.oracle.truffle.api.dsl.test.ImplicitCastTestFactory.ImplicitCast2NodeFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class ImplicitCastTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImportGuardsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ImportGuardsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,14 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.ImportStatic;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.ImportGuardsTestFactory.ImportGuards6Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.array;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertRuns;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import org.junit.Test;
 
 public class ImportGuardsTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/InsertBeforeTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/InsertBeforeTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 
 public class InsertBeforeTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/IntegerLiteralGuardsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/IntegerLiteralGuardsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,17 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.IntegerLiteralGuardsTestFactory.BinaryLiteralTestFactory;
 import com.oracle.truffle.api.dsl.test.IntegerLiteralGuardsTestFactory.DecimalLiteralTestFactory;
 import com.oracle.truffle.api.dsl.test.IntegerLiteralGuardsTestFactory.HexLiteralTestFactory;
 import com.oracle.truffle.api.dsl.test.IntegerLiteralGuardsTestFactory.OctalLiteralTestFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class IntegerLiteralGuardsTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/LazyClassLoadingTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/LazyClassLoadingTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import java.lang.reflect.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.LazyClassLoadingTestFactory.TestNodeFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class LazyClassLoadingTest {
     @Test
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/LimitTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/LimitTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,20 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.test.LimitTestFactory.ConstantLimitTestFactory;
 import com.oracle.truffle.api.dsl.test.LimitTestFactory.DefaultLimit3TestFactory;
 import com.oracle.truffle.api.dsl.test.LimitTestFactory.LocalLimitTestFactory;
 import com.oracle.truffle.api.dsl.test.LimitTestFactory.MethodLimitTestFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class LimitTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MergeSpecializationsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MergeSpecializationsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,21 +22,24 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-import java.util.concurrent.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.internal.SpecializationNode;
+import com.oracle.truffle.api.dsl.internal.SpecializedNode;
 import com.oracle.truffle.api.dsl.test.MergeSpecializationsTestFactory.TestCachedNodeFactory;
 import com.oracle.truffle.api.dsl.test.MergeSpecializationsTestFactory.TestNodeFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.util.Arrays;
+import java.util.concurrent.CountDownLatch;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 public class MergeSpecializationsTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MethodGuardsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MethodGuardsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,9 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardCompareWithFieldTestFactory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardComplexTestFactory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardEqualByteIntTestFactory;
@@ -49,7 +45,12 @@
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardStaticFieldTestFactory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardStaticFinalFieldCompareTestFactory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsTestFactory.GuardUnboundMethodTestFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
+import static com.oracle.truffle.api.dsl.test.TestHelper.getNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class MethodGuardsTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MethodGuardsWithArgumentsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/MethodGuardsWithArgumentsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,9 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArguments0Factory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArguments1Factory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArgumentsDouble0Factory;
@@ -34,8 +32,12 @@
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArgumentsDouble2Factory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArgumentsDouble3Factory;
 import com.oracle.truffle.api.dsl.test.MethodGuardsWithArgumentsTestFactory.MArgumentsSingle2Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class MethodGuardsWithArgumentsTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NameDuplicationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NameDuplicationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 
 public class NameDuplicationTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NegatedGuardsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NegatedGuardsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,14 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NegatedGuardsTestFactory.NegatedGuardNodeFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class NegatedGuardsTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NoTypeSystemTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NoTypeSystemTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.JustFrameTestNodeGen;
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.NoParameterTestNodeGen;
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.ObjectInterfaceNodeGen;
@@ -32,8 +31,11 @@
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.ObjectStringTestNodeGen;
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.PrimitiveTestNodeGen;
 import com.oracle.truffle.api.dsl.test.NoTypeSystemTestFactory.TypesNotInTypeSystemTestNodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class NoTypeSystemTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeChildNoNameTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeChildNoNameTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NodeChildNoNameTestFactory.OneArgNoNameFactory;
 import com.oracle.truffle.api.dsl.test.NodeChildNoNameTestFactory.ThreeArgsNoNameFactory;
 import com.oracle.truffle.api.dsl.test.NodeChildNoNameTestFactory.TwoArgsNoNameFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class NodeChildNoNameTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeChildTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeChildTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,14 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.IntFieldTestNodeFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class NodeChildTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeFieldTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NodeFieldTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,9 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.NodeFields;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.IntFieldNoGetterTestNodeFactory;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.IntFieldTestNodeFactory;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.MultipleFieldsTestNodeFactory;
@@ -35,7 +32,10 @@
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.RewriteTestNodeFactory;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.StringFieldTestNodeFactory;
 import com.oracle.truffle.api.dsl.test.NodeFieldTestFactory.TestContainerFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class NodeFieldTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NullLiteralGuardsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NullLiteralGuardsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,15 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NullLiteralGuardsTestFactory.CompareNotNullNodeFactory;
 import com.oracle.truffle.api.dsl.test.NullLiteralGuardsTestFactory.CompareObjectsNullNodeFactory;
 import com.oracle.truffle.api.dsl.test.NullLiteralGuardsTestFactory.CompareStringNullNodeFactory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createCallTarget;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 @SuppressWarnings("unused")
 public class NullLiteralGuardsTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NullTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/NullTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.NullTestFactory.NullTest1Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class NullTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/PolymorphicTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/PolymorphicTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,21 +22,26 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.PolymorphicTestFactory.Polymorphic1Factory;
 import com.oracle.truffle.api.dsl.test.PolymorphicTestFactory.Polymorphic2Factory;
 import com.oracle.truffle.api.dsl.test.PolymorphicTestFactory.Polymorphic3Factory;
 import com.oracle.truffle.api.dsl.test.TestHelper.ExecutionListener;
+import static com.oracle.truffle.api.dsl.test.TestHelper.array;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertRuns;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class PolymorphicTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/PolymorphicTest2.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/PolymorphicTest2.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,14 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.BinaryNodeTest.BinaryNode;
 import com.oracle.truffle.api.dsl.test.PolymorphicTest2Factory.Polymorphic1Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class PolymorphicTest2 {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ReachabilityTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ReachabilityTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,13 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import java.math.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.Abstract;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.BExtendsAbstract;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import java.math.BigInteger;
 
 public class ReachabilityTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ShortCircuitTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ShortCircuitTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,22 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.api.dsl.test.ShortCircuitTestFactory.DoubleChildNodeFactory;
 import com.oracle.truffle.api.dsl.test.ShortCircuitTestFactory.ShortCircuitWithImplicitCastNodeFactory;
 import com.oracle.truffle.api.dsl.test.ShortCircuitTestFactory.SingleChildNodeFactory;
 import com.oracle.truffle.api.dsl.test.ShortCircuitTestFactory.VarArgsNodeFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class ShortCircuitTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,23 +22,30 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.dsl.CreateCast;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.internal.SpecializationNode;
 import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection0Factory;
 import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection1Factory;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRoot;
+import static com.oracle.truffle.api.dsl.test.TestHelper.createRootPrefix;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.SourceSection;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class SourceSectionTest {
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationFallthroughTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationFallthroughTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,10 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.SpecializationFallthroughTestFactory.FallthroughTest0Factory;
 import com.oracle.truffle.api.dsl.test.SpecializationFallthroughTestFactory.FallthroughTest1Factory;
 import com.oracle.truffle.api.dsl.test.SpecializationFallthroughTestFactory.FallthroughTest2Factory;
@@ -34,8 +33,12 @@
 import com.oracle.truffle.api.dsl.test.SpecializationFallthroughTestFactory.FallthroughTest4Factory;
 import com.oracle.truffle.api.dsl.test.SpecializationFallthroughTestFactory.FallthroughTest5Factory;
 import com.oracle.truffle.api.dsl.test.TestHelper.ExecutionListener;
+import static com.oracle.truffle.api.dsl.test.TestHelper.array;
+import static com.oracle.truffle.api.dsl.test.TestHelper.assertRuns;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class SpecializationFallthroughTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestElseConnectionBug1Factory;
 import com.oracle.truffle.api.dsl.test.SpecializationGroupingTestFactory.TestElseConnectionBug2Factory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.SlowPathException;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Tests execution counts of guards. While we do not make guarantees for guard invocation except for
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,22 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.NodeFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 /**
  * Utility class to provide some test helper functions.
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestSerialization.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestSerialization.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import static com.oracle.truffle.api.dsl.test.TestHelper.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import static com.oracle.truffle.api.dsl.test.TestHelper.executeWith;
 import com.oracle.truffle.api.dsl.test.TestSerializationFactory.SerializedNodeFactory;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class TestSerialization {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemErrorsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,11 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
 import com.oracle.truffle.api.dsl.test.TypeSystemErrorsTest.Types1.Type1;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,21 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import java.math.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.GenerateNodeFactory;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import java.math.BigInteger;
 
 public class TypeSystemTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/UnsupportedSpecializationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/UnsupportedSpecializationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,20 @@
  */
 package com.oracle.truffle.api.dsl.test;
 
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
 import com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTestFactory.Unsupported1Factory;
 import com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTestFactory.Unsupported2Factory;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
 
 public class UnsupportedSpecializationTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/ExampleNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/ExampleNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
+import com.oracle.truffle.api.dsl.internal.SpecializedNode;
 import com.oracle.truffle.api.dsl.test.TestingLanguage;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
 
 @TypeSystemReference(ExampleTypes.class)
 @NodeChild(value = "args", type = ExampleNode[].class)
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/ExampleTypes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/ExampleTypes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.TypeSystem;
 import com.oracle.truffle.api.dsl.test.examples.FunctionCall.Function;
 import com.oracle.truffle.api.dsl.test.examples.Interop.TruffleObject;
 import com.oracle.truffle.api.dsl.test.examples.RubyCall.InternalMethod;
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/FunctionCall.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/FunctionCall.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,19 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createArguments;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createDummyTarget;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createTarget;
 import com.oracle.truffle.api.dsl.test.examples.FunctionCallFactory.FunctionCallNodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * This example illustrates how {@link Cached} can be used to implement function calls that use
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/Interop.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/Interop.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,17 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createArguments;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createTarget;
 import com.oracle.truffle.api.dsl.test.examples.InteropFactory.UseInteropNodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * This example aims to illustrate how the {@link Cached} annotation can be used to implement a
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/MathPow.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/MathPow.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,15 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createArguments;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createTarget;
 import com.oracle.truffle.api.dsl.test.examples.MathPowFactory.MathPowNodeGen;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * This example shows possible specializations for a simplified math pow node. It demonstrates how
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/RubyCall.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/RubyCall.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,23 +22,28 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.ImportStatic;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.internal.SpecializedNode;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createArguments;
+import static com.oracle.truffle.api.dsl.test.examples.ExampleNode.createTarget;
 import com.oracle.truffle.api.dsl.test.examples.RubyCallFactory.RubyDispatchNodeGen;
 import com.oracle.truffle.api.dsl.test.examples.RubyCallFactory.RubyHeadNodeGen;
 import com.oracle.truffle.api.dsl.test.examples.RubyCallFactory.RubyLookupNodeGen;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.Node.Child;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
+import java.util.HashMap;
+import java.util.Map;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * This example illustrates a simplified version of a Ruby function call semantics (RubyHeadNode).
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/StableDispatch.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/examples/StableDispatch.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,16 @@
  */
 package com.oracle.truffle.api.dsl.test.examples;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
 
 /**
  * This example is based on the SLDispatchNode of SimpleLanguage. It shows how to implement a simple
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/Compile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/Compile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,30 @@
  */
 package com.oracle.truffle.api.dsl.test.processor;
 
-import static org.junit.Assert.*;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import javax.tools.*;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticListener;
+import javax.tools.FileObject;
+import javax.tools.ForwardingJavaFileManager;
+import javax.tools.JavaFileManager;
+import javax.tools.JavaFileObject;
 import javax.tools.JavaFileObject.Kind;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 final class Compile implements DiagnosticListener<JavaFileObject> {
     private final List<Diagnostic<? extends JavaFileObject>> errors = new ArrayList<>();
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/LanguageRegistrationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,14 @@
  */
 package com.oracle.truffle.api.dsl.test.processor;
 
-import java.io.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.dsl.test.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.dsl.test.ExpectError;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.Source;
+import java.io.IOException;
 
 public class LanguageRegistrationTest {
 
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/TruffleProcessorTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/processor/TruffleProcessorTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,17 @@
  */
 package com.oracle.truffle.api.dsl.test.processor;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.tools.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.dsl.test.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.dsl.processor.verify.*;
+import com.oracle.truffle.api.dsl.test.ExpectError;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.dsl.processor.verify.VerifyTruffleProcessor;
+import java.util.Locale;
+import java.util.ServiceLoader;
+import javax.annotation.processing.Processor;
+import javax.tools.Diagnostic;
+import javax.tools.JavaFileObject;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 /**
  * Verify errors emitted by the processor.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Cached.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Cached.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,13 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.utilities.BranchProfile;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * <p>
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/CreateCast.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/CreateCast.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Specifies a factory method that creates a {@link Node} which is used to cast this child.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Fallback.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Fallback.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * <p>
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/GenerateNodeFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/GenerateNodeFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Annotate nodes or base classes of nodes to generate factory handlers implementing the
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/GeneratedBy.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/GeneratedBy.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Marks a type as being generated based on another class or method of a class.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ImplicitCast.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ImplicitCast.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.CLASS)
 @Target({ElementType.METHOD})
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Implies.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Implies.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Experimental API.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ImportStatic.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ImportStatic.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Imports all <code>public</code> and <code>static</code> methods and fields of the provided
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeAssumptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeAssumptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * @deprecated use {@link NodeField} with type {@link Assumption} instead.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeChild.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeChild.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * A {@link NodeChild} element defines an executable child for the enclosing {@link Node}. A
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeChildren.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeChildren.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.CLASS)
 @Target({ElementType.TYPE})
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,8 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.util.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.util.List;
 
 /**
  * Enables the dynamic creation of generated nodes. It provides an convenient way to instantiate
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeField.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeField.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * A {@link NodeField} element defines a field for the generated {@link Node}. A {@link Node}
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeFields.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/NodeFields.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * A {@link NodeFields} element defines a field for the generated {@link Node}. A {@link Node}
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ShortCircuit.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/ShortCircuit.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.CLASS)
 @Target({ElementType.METHOD})
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Specialization.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/Specialization.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,16 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.ExactMath;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * <p>
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeCast.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeCast.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Overrides the standard way of casting a certain type in a {@link TypeSystem}. This is useful for
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeCheck.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeCheck.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Overrides the standard way of checking for a certain type in a {@link TypeSystem}. This is useful
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystem.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystem.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * <p>
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystemReference.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystemReference.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * References a {@link TypeSystem} on a node. Must be applied on a {@link Node} class. At least one
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/UnsupportedSpecializationException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/UnsupportedSpecializationException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,10 @@
  */
 package com.oracle.truffle.api.dsl;
 
-import java.util.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * Thrown by the generated code of Truffle-DSL if no compatible Specialization could be found for
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * This is NOT public API. Do not use directly. This code may change without notice.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLOptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLOptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Internal DSL options to tune the generated code. These are expert options and not intended to be
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLShare.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/DSLShare.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,11 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import java.util.Arrays;
+import java.util.concurrent.Callable;
 
 /** Contains utility classes shared across generated DSLNode implementations. */
 public class DSLShare {
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/NodeFactoryBase.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/NodeFactoryBase.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,11 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import java.util.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.nodes.Node;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * This is NOT public API. Do not use directly. This code may change without notice.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SlowPathEvent.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SlowPathEvent.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Lazy rewrite event that implements {@link CharSequence} to be provided as message in
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializationNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,12 +24,10 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import java.lang.reflect.*;
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEvent0;
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEvent1;
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEvent2;
@@ -37,8 +35,19 @@
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEvent4;
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEvent5;
 import com.oracle.truffle.api.dsl.internal.SlowPathEvent.SlowPathEventN;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.nodes.ExplodeLoop;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeClass;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.concurrent.Callable;
 
 /**
  * Internal implementation dependent base class for generated specialized nodes.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializedNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SpecializedNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeInterface;
 
 /**
  * Implemented by DSL generated operation classes. This is internal implementation dependent API.
--- a/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SuppressFBWarnings.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/internal/SuppressFBWarnings.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,8 @@
  */
 package com.oracle.truffle.api.dsl.internal;
 
-import java.lang.annotation.*;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
  * Used to suppress <a href="http://findbugs.sourceforge.net">FindBugs</a> warnings.
--- a/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/JavaInteropSpeedTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/JavaInteropSpeedTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -28,10 +28,10 @@
 import com.oracle.truffle.api.interop.java.JavaInterop;
 import java.util.Random;
 import org.junit.AfterClass;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 
 public class JavaInteropSpeedTest {
     private static final int REPEAT = 10000;
@@ -92,7 +92,7 @@
         if (javaTime < 1) {
             javaTime = 1;
         }
-        if (interopTime > 5 * javaTime) {
+        if (interopTime > 6 * javaTime) {
             fail("Interop took too long: " + interopTime + " ms, while java only " + javaTime + " ms");
         }
     }
--- a/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/MethodMessageTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/MethodMessageTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,7 +27,9 @@
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.api.interop.java.MethodMessage;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
 public class MethodMessageTest {
--- a/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/PrimitiveArrayInteropTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/PrimitiveArrayInteropTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,9 +27,10 @@
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.java.JavaInterop;
 import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import org.junit.Before;
 import org.junit.Test;
-import static org.junit.Assert.*;
 
 public class PrimitiveArrayInteropTest {
     public Object[] stringArr;
--- a/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/PrimitiveRawArrayInteropTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java.test/src/com/oracle/truffle/api/interop/java/test/PrimitiveRawArrayInteropTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,9 +27,10 @@
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.java.JavaInterop;
 import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import org.junit.Before;
 import org.junit.Test;
-import static org.junit.Assert.*;
 
 public class PrimitiveRawArrayInteropTest {
     private Object[] objArr;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/InvokeMemberNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.api.interop.java;
+
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.interop.ForeignAccess;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.List;
+
+final class InvokeMemberNode extends RootNode {
+    InvokeMemberNode() {
+        super(JavaInteropLanguage.class, null, null);
+    }
+
+    @Override
+    public Object execute(VirtualFrame frame) {
+        JavaInterop.JavaObject receiver = (JavaInterop.JavaObject) ForeignAccess.getReceiver(frame);
+        final List<Object> args = ForeignAccess.getArguments(frame);
+        final Object nameOrIndex = args.get(0);
+        final int argsLength = args.size() - 1;
+        if (nameOrIndex instanceof Integer) {
+            throw new IllegalStateException();
+        } else {
+            String name = (String) nameOrIndex;
+            for (Method m : receiver.clazz.getMethods()) {
+                final boolean isStatic = (m.getModifiers() & Modifier.STATIC) != 0;
+                if (isStatic) {
+                    continue;
+                }
+                if (m.getName().equals(name) && m.getParameterCount() == argsLength) {
+                    Object[] arr = args.subList(1, args.size()).toArray();
+                    return JavaFunctionNode.execute(m, receiver.obj, arr);
+                }
+            }
+            throw new IllegalArgumentException(name);
+        }
+    }
+
+}
--- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaFunctionNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaFunctionNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -28,6 +28,7 @@
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.nodes.RootNode;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.List;
 
 final class JavaFunctionNode extends RootNode {
@@ -42,15 +43,19 @@
         return execute(receiver, args.toArray());
     }
 
+    static Object execute(JavaInterop.JavaFunctionObject receiver, Object[] args) {
+        return execute(receiver.method, receiver.obj, args);
+    }
+
     @SuppressWarnings("paramAssign")
-    static Object execute(JavaInterop.JavaFunctionObject receiver, Object[] args) {
+    static Object execute(Method method, Object obj, Object[] args) {
         for (int i = 0; i < args.length; i++) {
             if (args[i] instanceof JavaInterop.JavaObject) {
                 args[i] = ((JavaInterop.JavaObject) args[i]).obj;
             }
         }
         try {
-            Object ret = receiver.method.invoke(receiver.obj, args);
+            Object ret = method.invoke(obj, args);
             if (JavaInterop.isPrimitive(ret)) {
                 return ret;
             }
--- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaInterop.java	Mon Sep 21 11:21:03 2015 +0200
@@ -335,21 +335,29 @@
             }
 
             if (message == null) {
-                val = message(Message.READ, obj, name);
-                if (isPrimitive(val)) {
-                    return val;
+                Object ret;
+                try {
+                    List<Object> callArgs = new ArrayList<>(args.length);
+                    callArgs.add(name);
+                    callArgs.addAll(Arrays.asList(args));
+                    ret = message(Message.createInvoke(callArgs.size()), obj, callArgs.toArray());
+                } catch (IllegalArgumentException ex) {
+                    val = message(Message.READ, obj, name);
+                    if (isPrimitive(val)) {
+                        return val;
+                    }
+                    TruffleObject attr = (TruffleObject) val;
+                    if (Boolean.FALSE.equals(message(Message.IS_EXECUTABLE, attr))) {
+                        if (args.length == 0) {
+                            return toJava(attr, method);
+                        }
+                        throw new IllegalStateException(attr + " cannot be invoked with " + args.length + " parameters");
+                    }
+                    List<Object> callArgs = new ArrayList<>(args.length + 1);
+                    // callArgs.add(attr);
+                    callArgs.addAll(Arrays.asList(args));
+                    ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray());
                 }
-                TruffleObject attr = (TruffleObject) val;
-                if (Boolean.FALSE.equals(message(Message.IS_EXECUTABLE, attr))) {
-                    if (args.length == 0) {
-                        return toJava(attr, method);
-                    }
-                    throw new IllegalStateException(attr + " cannot be invoked with " + args.length + " parameters");
-                }
-                List<Object> callArgs = new ArrayList<>(args.length + 1);
-                // callArgs.add(attr);
-                callArgs.addAll(Arrays.asList(args));
-                Object ret = message(Message.createExecute(callArgs.size()), attr, callArgs.toArray());
                 return toJava(ret, method);
             }
             throw new IllegalStateException("Unknown message: " + message);
--- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaObjectForeignAccess.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/JavaObjectForeignAccess.java	Mon Sep 21 11:21:03 2015 +0200
@@ -78,7 +78,7 @@
 
     @Override
     public CallTarget accessInvoke(int argumentsLength) {
-        return Truffle.getRuntime().createCallTarget(new JavaObjectMethodNode());
+        return Truffle.getRuntime().createCallTarget(new InvokeMemberNode());
     }
 
     @Override
--- a/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/MethodMessage.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop.java/src/com/oracle/truffle/api/interop/java/MethodMessage.java	Mon Sep 21 11:21:03 2015 +0200
@@ -60,7 +60,7 @@
  * Then one can change the value of field <em>x</em> in <em>obj</em> from Java by calling:
  * 
  * <pre>
- * {@link JavaInterop#asJavaObject(java.lang.Class, com.oracle.truffle.api.interop.TruffleObject) JavaInterop.asJavaObject(ObjInterop.<b>class</b>, obj).x(10);
+ * {@link JavaInterop#asJavaObject(java.lang.Class, com.oracle.truffle.api.interop.TruffleObject) JavaInterop.asJavaObject}(ObjInterop.<b>class</b>, obj).x(10);
  * </pre>
  * 
  * the value of the <em>x</em> field is going to be <em>10</em> then.
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignAccess.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignAccess.java	Mon Sep 21 11:21:03 2015 +0200
@@ -87,6 +87,8 @@
      * @return return value, if any
      * @throws ClassCastException if the createNode has not been created by
      *             {@link Message#createNode()} method.
+     * @throws IllegalAccessError if the <code>receiver</code> does not support the
+     *             {@link Message#createNode() message represented} by <code>foreignNode</code>
      */
     public static Object execute(Node foreignNode, VirtualFrame frame, TruffleObject receiver, Object... arguments) {
         ForeignObjectAccessHeadNode fn = (ForeignObjectAccessHeadNode) foreignNode;
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignObjectAccessHeadNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ForeignObjectAccessHeadNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,7 +25,7 @@
 
 package com.oracle.truffle.api.interop;
 
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.nodes.Node;
 
 final class ForeignObjectAccessHeadNode extends Node {
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/Message.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/Message.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,10 @@
  */
 package com.oracle.truffle.api.interop;
 
+import com.oracle.truffle.api.TruffleLanguage.Env;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.interop.ForeignAccess.Factory;
 import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.api.interop.ForeignAccess.Factory;
 
 /**
  * Inter-operability is based on sending messages. Standard messages are defined as as constants
@@ -34,35 +36,123 @@
  */
 public abstract class Message {
     /**
+     * One can define their own extended message by subclassing. The expectation is that the
+     * subclass will have public constructor and its {@link #equals(java.lang.Object)} and
+     * {@link #hashCode()} methods will operate on the class equivalence. Only then the subclass
+     * will work properly with {@link #valueOf(java.lang.String)} and
+     * {@link #toString(com.oracle.truffle.api.interop.Message)} methods.
+     */
+    protected Message() {
+    }
+
+    /**
      * Message to read an object field. The
      * {@link Factory#access(com.oracle.truffle.api.interop.Message) target} created for this
-     * message accepts single {@link ForeignAccess#getArguments(com.oracle.truffle.api.frame.Frame)
-     * argument} identifying a field to read - e.g. either {@link String} or an {@link Integer} - if
-     * access to an array at particular index is requested.
+     * message accepts (in addition to a
+     * {@link ForeignAccess#getReceiver(com.oracle.truffle.api.frame.Frame) receiver}) a single
+     * {@link ForeignAccess#getArguments(com.oracle.truffle.api.frame.Frame) argument} identifying a
+     * field to read - e.g. either {@link String} or an {@link Integer} - if access to an array at
+     * particular index is requested. The code that wants to send this message should use:
+     * 
+     * <pre>
+     * {@link ForeignAccess}.{@link ForeignAccess#execute(com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame, com.oracle.truffle.api.interop.TruffleObject, java.lang.Object...) execute}(
+     *   {@link Message#READ}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, receiver, nameOfTheField
+     * );
+     * </pre>
+     * 
+     * Where <code>receiver</code> is the {@link TruffleObject foreign object} to access and
+     * <code>nameOfTheField</code> is the name (or index) of its field.
+     * <p>
+     * To achieve good performance it is essential to cache/keep reference to the
+     * {@link Message#createNode() created node}.
      */
     public static final Message READ = Read.INSTANCE;
 
     /**
      * Converts {@link TruffleObject truffle value} to Java primitive type. Primitive types are
-     * subclasses of {@link Number}, {@link Boolean}, {@link Character} and {@link String}. Related
-     * to {@link #IS_BOXED} message.
+     * subclasses of {@link Number}, {@link Boolean}, {@link Character} and {@link String}. Before
+     * sending the {@link #UNBOX} message, it is desirable to send the {@link #IS_BOXED} one and
+     * verify that the object can really be unboxed. To unbox an object, use:
+     * 
+     * <pre>
+     * {@link ForeignAccess}.{@link ForeignAccess#execute(com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame, com.oracle.truffle.api.interop.TruffleObject, java.lang.Object...) execute}(
+     *   {@link Message#UNBOX}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, objectToUnbox
+     * );
+     * </pre>
+     * 
+     * The returned value should be subclass of {@link Number}, {@link Boolean}, {@link Character}
+     * or {@link String}.
+     * <p>
+     * To achieve good performance it is essential to cache/keep reference to the
+     * {@link Message#createNode() created node}.
      */
     public static final Message UNBOX = Unbox.INSTANCE;
 
     /**
      * Message to write a field. The {@link Factory#access(com.oracle.truffle.api.interop.Message)
-     * target} created for this message accepts two
+     * target} created for this message accepts the object to modify as a
+     * {@link ForeignAccess#getReceiver(com.oracle.truffle.api.frame.Frame) receiver} and two
      * {@link ForeignAccess#getArguments(com.oracle.truffle.api.frame.Frame) arguments}. The first
      * one identifies a field to read - e.g. either {@link String} or an {@link Integer} - if access
      * to an array at particular index is requested. The second one is the value to assign to such
-     * field.
+     * field. Use following style to construct field modification message:
+     * 
+     * <pre>
+     * {@link ForeignAccess}.{@link ForeignAccess#execute(com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame, com.oracle.truffle.api.interop.TruffleObject, java.lang.Object...) execute}(
+     *   {@link Message#WRITE}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, receiver, nameOfTheField, newValue
+     * );
+     * </pre>
+     * 
+     * Where <code>receiver</code> is the {@link TruffleObject foreign object} to access,
+     * <code>nameOfTheField</code> is the name (or index) of its field and <code>newValue</code> is
+     * the value to assign to the receiver's field.
+     * <p>
+     * To achieve good performance it is essential to cache/keep reference to the
+     * {@link Message#createNode() created node}.
      */
     public static Message WRITE = Write.INSTANCE;
 
     /**
-     * Creates an execute message. All messages created by this method are
-     * {@link Object#equals(java.lang.Object) equal} to each other regardless of the value of
-     * <code>argumentsLength</code>.
+     * Creates a non-object oriented execution message. In contrast to {@link #createInvoke(int)}
+     * messages, which are more suitable for dealing with object oriented style of programming,
+     * messages created by this method are more suitable for execution where one can explicitly
+     * control all passed in arguments.
+     * <p>
+     * To inter-operate with a non-OOP language like <em>C</em> - for example to execute its
+     * function:
+     * 
+     * <pre>
+     * <b>double</b> add(<b>double</b> a, <b>double</b> b) {
+     *   <b>return</b> a + b;
+     * }
+     * </pre>
+     * 
+     * One can obtain reference to the <em>add</em> function (for example by
+     * {@link Env#importSymbol(java.lang.String) importing it as a global symbol}) and store it into
+     * variable <code>addFunction</code>. Then it's time to check the object is executable by
+     * sending it the {@link #IS_EXECUTABLE} message. If the answer is <code>true</code> one can:
+     *
+     * <pre>
+     * {@link ForeignAccess}.{@link ForeignAccess#execute(com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame, com.oracle.truffle.api.interop.TruffleObject, java.lang.Object...) execute}(
+     *   {@link Message#createExecute(int) Message.createExecute}(2).{@link Message#createNode()}, {@link VirtualFrame currentFrame}, addFunction, valueOfA, valueOfB
+     * );
+     * </pre>
+     *
+     * The <code>valueOfA</code> and <code>valueOfB</code> should be <code>double</code> or
+     * {@link Double} or at least be {@link #UNBOX unboxable} to such type.
+     * <p>
+     * One can use this method to talk to object oriented language as well, however one needs to pay
+     * attention to provide all necessary arguments manually - usually an OOP language requires the
+     * first argument to represent <code>this</code> or <code>self</code> and only then pass in the
+     * additional arguments. It may be easier to use {@link #createInvoke(int)} message which is
+     * more suitable for object oriented languages and handles (if supported) the arguments
+     * manipulation automatically.
+     * <p>
+     *
+     *
+     * <p>
+     * All messages created by this method are {@link Object#equals(java.lang.Object) equal} to each
+     * other regardless of the value of <code>argumentsLength</code>.
      *
      * @param argumentsLength number of parameters to pass to the target
      * @return execute message
@@ -72,21 +162,91 @@
     }
 
     /**
-     * Message to check for executability.
+     * Message to check executability of a
+     * {@link ForeignAccess#getReceiver(com.oracle.truffle.api.frame.Frame) foreign object}.
      * <p>
      * Calling {@link Factory#access(com.oracle.truffle.api.interop.Message) the target} created for
-     * this message should yield value of {@link Boolean}.
+     * this message accepts {@link ForeignAccess#getArguments(com.oracle.truffle.api.frame.Frame) no
+     * arguments} and a single non-null
+     * {@link ForeignAccess#getReceiver(com.oracle.truffle.api.frame.Frame) receiver}. The call
+     * should yield value of {@link Boolean}. Either {@link Boolean#TRUE} if the receiver can be
+     * executed (e.g. accepts {@link #createExecute(int)} message, or {@link Boolean#FALSE}
+     * otherwise. This is the way to send the <code>IS_EXECUTABLE</code> message:
+     * 
+     * <pre>
+     * {@link Boolean} canBeExecuted = ({@link Boolean}) {@link ForeignAccess}.execute(
+     *   {@link Message#IS_EXECUTABLE}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, receiver
+     * );
+     * </pre>
+     * <p>
+     * To achieve good performance it is essential to cache/keep reference to the
+     * {@link Message#createNode() created node}.
      */
     public static final Message IS_EXECUTABLE = IsExecutable.INSTANCE;
 
     /**
-     * Creates an execute message. All messages created by this method are
-     * {@link Object#equals(java.lang.Object) equal} to each other regardless of the value of
-     * <code>argumentsLength</code>. The expected behavior of this message is to perform
-     * {@link #READ} first and on the result invoke {@link #createExecute(int)}.
+     * Creates an object oriented execute message. Unlike {@link #createExecute(int)} the receiver
+     * of the message isn't the actual function to invoke, but an object. The object has the
+     * function as a field, or as a field of its class, or whatever is appropriate for an object
+     * oriented language.
+     * <p>
+     * Languages that don't support object oriented semantics do not and should not implement this
+     * message. When the invoke message isn't supported, the caller is expected to fall back into
+     * following basic operations:
+     * <ul>
+     * <li>sending {@link #READ} message to access the field</li>
+     * <li>verify the result {@link #IS_EXECUTABLE}, if so continue by</li>
+     * <li>sending {@link #createExecute(int) execute message}</li>
+     * </ul>
+     * <p>
+     * The last step is problematic, as it is not clear whether to pass just the execution
+     * arguments, or prefix them with the original receiver (aka <code>this</code> or
+     * <code>self</code>). Object oriented languages would in general welcome obtaining the
+     * receiving object as first argument, non-object languages like <em>C</em> would get confused
+     * by doing so. However it is not possible for the caller to find out what language one is
+     * sending message to - only the set of supported messages is known. As a result it is
+     * recommended for object oriented languages to support the {@link #createInvoke(int)} message
+     * and handle the semantics the way it is natural to them. Languages like <em>C</em> shouldn't
+     * implement {@link #createInvoke(int)} and just support primitive operations like
+     * {@link #createExecute(int)} and {@link #READ}.
+     * <p>
+     * When accessing a method of an object in an object oriented manner, one is supposed to send
+     * the {@link #createInvoke(int)} message first. Only when that fails, fallback to non-object
+     * oriented workflow with {@link #createExecute(int)}. Imagine there is a <em>Java</em> class
+     * with <code>add</code> method and its instance:
+     * 
+     * <pre>
+     * <b>public class</b> Arith {
+     *    <b>public double</b> add(double a, double b) {
+     *      <b>return</b> a + b;
+     *    }
+     * }
+     * Arith obj = <b>new</b> Arith();
+     * </pre>
+     * 
+     * To access <code>obj</code>'s <code>add</code> method one should use:
+     *
+     * <pre>
+     * <b>try</b> {
+     *   {@link ForeignAccess}.{@link ForeignAccess#execute(com.oracle.truffle.api.nodes.Node, com.oracle.truffle.api.frame.VirtualFrame, com.oracle.truffle.api.interop.TruffleObject, java.lang.Object...) execute}(
+     *     {@link Message#createInvoke(int) Message.createInvoke}(2).{@link Message#createNode()}, {@link VirtualFrame currentFrame}, obj, "add", valueOfA, valueOfB
+     *   );
+     * } <b>catch</b> ({@link IllegalArgumentException} ex) {
+     *   // access the language via {@link #createExecute(int)}
+     * }
+     * </pre>
+     * 
+     * The <code>valueOfA</code> and <code>valueOfB</code> should be <code>double</code> or
+     * {@link Double} or at least be {@link #UNBOX unboxable} to such type.
+     * <p>
+     * All messages created by this method are {@link Object#equals(java.lang.Object) equal} to each
+     * other regardless of the value of <code>argumentsLength</code>. The expected behavior of this
+     * message is to perform {@link #READ} first and on the result invoke
+     * {@link #createExecute(int)}.
      *
      * @param argumentsLength number of parameters to pass to the target
-     * @return read & execute message
+     * @return message combining read & execute messages tailored for use with object oriented
+     *         languages
      */
     public static Message createInvoke(int argumentsLength) {
         return Execute.create(Execute.INVOKE, argumentsLength);
@@ -100,7 +260,7 @@
      * receiver} and then perform its constructor with appropriate number of arguments.
      *
      * @param argumentsLength number of parameters to pass to the target
-     * @return read & execute message
+     * @return new instance message
      */
     public static Message createNew(int argumentsLength) {
         return Execute.create(Execute.NEW, argumentsLength);
@@ -110,10 +270,20 @@
      * Check for <code>null</code> message. The Truffle languages are suggested to have their own
      * object representing <code>null</code> like values in their languages. For purposes of
      * inter-operability it is essential to canonicalize such values from time to time - sending
-     * this message is a way to recognize such <code>null</code> representing values.
+     * this message is a way to recognize such <code>null</code> representing values:
+     * 
+     * <pre>
+     * {@link Boolean} isNull = ({@link Boolean}) {@link ForeignAccess}.execute(
+     *   {@link Message#IS_NULL}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, objectToCheckForNull
+     * );
+     * </pre>
+     *
      * <p>
      * Calling {@link Factory#access(com.oracle.truffle.api.interop.Message) the target} created for
      * this message should yield value of {@link Boolean}.
+     * <p>
+     * To achieve good performance it is essential to cache/keep reference to the
+     * {@link Message#createNode() created node}.
      */
     public static final Message IS_NULL = IsNull.INSTANCE;
 
@@ -135,13 +305,21 @@
     public static final Message GET_SIZE = GetSize.INSTANCE;
 
     /**
-     * Check for value being boxed. Can you value be converted to one of the basic Java types? Many
-     * languages have a special representation for types like number, string, etc. To ensure
-     * inter-operability, these types should support unboxing - if they do, they should handle this
-     * message.
-     * <p>
+     * Check for value being boxed. Can the {@link TruffleObject foreign object} be converted to one
+     * of the basic Java types? Many languages have a special representation for types like number,
+     * string, etc. To ensure inter-operability, these types should support unboxing - if they do,
+     * they should handle this message and return {@link Boolean#TRUE}. The way to check whether an
+     * object is boxed is:
+     * 
+     * <pre>
+     * {@link Boolean} isBoxed = ({@link Boolean}) {@link ForeignAccess}.execute(
+     *   {@link Message#IS_BOXED}.{@link Message#createNode()}, {@link VirtualFrame currentFrame}, objectToCheck
+     * );
+     * </pre>
+     * 
      * Calling {@link Factory#accessMessage(com.oracle.truffle.api.interop.Message) the target}
-     * created for this message should yield value of {@link Boolean}.
+     * created for this message should yield value of {@link Boolean}. If the object responds with
+     * {@link Boolean#TRUE}, it is safe to continue by sending it {@link #UNBOX} message.
      */
     public static final Message IS_BOXED = IsBoxed.INSTANCE;
 
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/ObjectAccessNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.interop;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 
 abstract class ObjectAccessNode extends Node {
 
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/DynamicObject.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/DynamicObject.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.object;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.interop.*;
+import com.oracle.truffle.api.TypedObject;
+import com.oracle.truffle.api.interop.TruffleObject;
 
 /**
  * Represents an object members of which can be dynamically added and removed at run time.
@@ -103,24 +103,6 @@
     public abstract void define(Object key, Object value, int flags, LocationFactory locationFactory);
 
     /**
-     * Change property flags.
-     *
-     * @param key property identifier
-     * @param newFlags flags to be set
-     * @return {@code true} if successful or {@code false} if property not found
-     */
-    public abstract boolean changeFlags(Object key, int newFlags);
-
-    /**
-     * Change property flags.
-     *
-     * @param key property identifier
-     * @param flagsUpdateFunction function updating old flags to new flags
-     * @return {@code true} if successful or {@code false} if property not found
-     */
-    public abstract boolean changeFlags(Object key, FlagsFunction flagsUpdateFunction);
-
-    /**
      * Delete property.
      *
      * @param key property identifier
@@ -167,14 +149,4 @@
      * @param currentShape the object's current shape (must equal {@link #getShape()})
      */
     public abstract DynamicObject copy(Shape currentShape);
-
-    /**
-     * Represents an operation on a single {@code int}-valued operand that produces an {@code int}
-     * -valued result.
-     *
-     * For Java 7 compatibility (equivalent to IntUnaryOperator).
-     */
-    public interface FlagsFunction {
-        int apply(int t);
-    }
 }
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/FinalLocationException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/FinalLocationException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.object;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.SlowPathException;
 
 /**
  * This exception is thrown on an attempt to assign a value to a final location.
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/IncompatibleLocationException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/IncompatibleLocationException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.object;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.SlowPathException;
 
 /**
  * This exception is thrown on an attempt to assign an incompatible value to a location.
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Layout.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,10 @@
  */
 package com.oracle.truffle.api.object;
 
-import java.util.*;
-
 import com.oracle.truffle.api.nodes.NodeUtil.FieldOffsetProvider;
 import com.oracle.truffle.api.object.Shape.Allocator;
+import java.util.EnumSet;
+import java.util.ServiceLoader;
 
 /**
  * Describes layout and behavior of a {@link DynamicObject} subclass and is used to create shapes.
@@ -51,16 +51,27 @@
         IntToLong,
     }
 
+    /**
+     * Create a new {@link LayoutBuilder}.
+     */
+    public static Builder newLayout() {
+        return new Builder();
+    }
+
+    /**
+     * Equivalent to {@code Layout.newLayout().build()}.
+     */
     public static Layout createLayout() {
         return createLayout(NONE);
     }
 
+    /**
+     * Equivalent to
+     * {@code Layout.newLayout().setAllowedImplicitCasts(allowedImplicitCasts).build()}.
+     */
+    @Deprecated
     public static Layout createLayout(EnumSet<ImplicitCast> allowedImplicitCasts) {
-        return new LayoutBuilder().setAllowedImplicitCasts(allowedImplicitCasts).build();
-    }
-
-    public static Layout createLayout(EnumSet<ImplicitCast> allowedImplicitCasts, FieldOffsetProvider fieldOffsetProvider) {
-        return new LayoutBuilder().setAllowedImplicitCasts(allowedImplicitCasts).setFieldOffsetProvider(fieldOffsetProvider).build();
+        return newLayout().setAllowedImplicitCasts(allowedImplicitCasts).build();
     }
 
     public abstract DynamicObject newInstance(Shape shape);
@@ -115,4 +126,55 @@
         }
         return bestLayoutFactory;
     }
+
+    /**
+     * Layout builder.
+     *
+     * @see Layout
+     */
+    public static final class Builder {
+        private EnumSet<ImplicitCast> allowedImplicitCasts;
+        private FieldOffsetProvider fieldOffsetProvider;
+
+        /**
+         * Create a new layout builder.
+         */
+        private Builder() {
+            this.allowedImplicitCasts = Layout.NONE;
+            this.fieldOffsetProvider = null;
+        }
+
+        /**
+         * Build {@link Layout} from the configuration in this builder.
+         */
+        public Layout build() {
+            return Layout.getFactory().createLayout(this);
+        }
+
+        /**
+         * Set the allowed implicit casts in this layout.
+         *
+         * @see Layout.ImplicitCast
+         */
+        public Builder setAllowedImplicitCasts(EnumSet<ImplicitCast> allowedImplicitCasts) {
+            this.allowedImplicitCasts = allowedImplicitCasts;
+            return this;
+        }
+
+        /**
+         * Set a custom field offset provider for this layout.
+         */
+        public Builder setFieldOffsetProvider(FieldOffsetProvider fieldOffsetProvider) {
+            this.fieldOffsetProvider = fieldOffsetProvider;
+            return this;
+        }
+
+        public EnumSet<ImplicitCast> getAllowedImplicitCasts() {
+            return allowedImplicitCasts;
+        }
+
+        public FieldOffsetProvider getFieldOffsetProvider() {
+            return fieldOffsetProvider;
+        }
+    }
 }
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/LayoutBuilder.java	Mon Sep 21 10:55:36 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.truffle.api.object;
-
-import java.util.*;
-
-import com.oracle.truffle.api.nodes.NodeUtil.FieldOffsetProvider;
-import com.oracle.truffle.api.object.Layout.ImplicitCast;
-
-/**
- * Layout builder.
- *
- * @see Layout
- */
-public class LayoutBuilder {
-    private EnumSet<ImplicitCast> allowedImplicitCasts;
-    private FieldOffsetProvider fieldOffsetProvider;
-
-    public LayoutBuilder() {
-        this.allowedImplicitCasts = Layout.NONE;
-        this.fieldOffsetProvider = null;
-    }
-
-    public Layout build() {
-        return Layout.getFactory().createLayout(this);
-    }
-
-    public LayoutBuilder setAllowedImplicitCasts(EnumSet<ImplicitCast> allowedImplicitCasts) {
-        this.allowedImplicitCasts = allowedImplicitCasts;
-        return this;
-    }
-
-    public LayoutBuilder setFieldOffsetProvider(FieldOffsetProvider fieldOffsetProvider) {
-        this.fieldOffsetProvider = fieldOffsetProvider;
-        return this;
-    }
-
-    public EnumSet<ImplicitCast> getAllowedImplicitCasts() {
-        return allowedImplicitCasts;
-    }
-
-    public FieldOffsetProvider getFieldOffsetProvider() {
-        return fieldOffsetProvider;
-    }
-}
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/LayoutFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/LayoutFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,7 +25,7 @@
 package com.oracle.truffle.api.object;
 
 public interface LayoutFactory {
-    Layout createLayout(LayoutBuilder layoutBuilder);
+    Layout createLayout(Layout.Builder layoutBuilder);
 
     Property createProperty(Object id, Location location);
 
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Location.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.object;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 
 /**
  * Property location.
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/ObjectType.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/ObjectType.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,11 @@
  */
 package com.oracle.truffle.api.object;
 
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.interop.*;
+import com.oracle.truffle.api.interop.TruffleObject;
 
 public class ObjectType {
     /**
--- a/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.object/src/com/oracle/truffle/api/object/Shape.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,9 @@
  */
 package com.oracle.truffle.api.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import java.util.EnumSet;
+import java.util.List;
 
 /**
  * Shape objects create a mapping of Property objects to Locations. Shapes are immutable; adding or
@@ -225,20 +225,6 @@
      */
     public abstract Object getMutex();
 
-    public abstract int getObjectArraySize();
-
-    public abstract int getObjectFieldSize();
-
-    public abstract int getPrimitiveArraySize();
-
-    public abstract int getPrimitiveFieldSize();
-
-    public abstract int getObjectArrayCapacity();
-
-    public abstract int getPrimitiveArrayCapacity();
-
-    public abstract boolean hasPrimitiveArray();
-
     /**
      * Are these two shapes related, i.e. do they have the same root?
      *
@@ -247,15 +233,35 @@
      */
     public abstract boolean isRelated(Shape other);
 
+    /**
+     * Try to merge two related shapes to a more general shape that has the same properties and can
+     * store at least the values of both shapes.
+     *
+     * @return this, other, or a new shape that is compatible with both shapes
+     */
     public abstract Shape tryMerge(Shape other);
 
+    /**
+     * Utility class to allocate locations in an object layout.
+     */
     public abstract static class Allocator {
         protected abstract Location locationForValue(Object value, boolean useFinal, boolean nonNull);
 
+        /**
+         * Create a new location compatible with the given initial value.
+         *
+         * @param value the initial value this location is going to be assigned
+         */
         public final Location locationForValue(Object value) {
             return locationForValue(value, false, value != null);
         }
 
+        /**
+         * Create a new location compatible with the given initial value.
+         *
+         * @param value the initial value this location is going to be assigned
+         * @param modifiers additional restrictions and semantics
+         */
         public final Location locationForValue(Object value, EnumSet<LocationModifier> modifiers) {
             assert value != null || !modifiers.contains(LocationModifier.NonNull);
             return locationForValue(value, modifiers.contains(LocationModifier.Final), modifiers.contains(LocationModifier.NonNull));
@@ -263,22 +269,45 @@
 
         protected abstract Location locationForType(Class<?> type, boolean useFinal, boolean nonNull);
 
+        /**
+         * Create a new location for a fixed type. It can only be assigned to values of this type.
+         *
+         * @param type the Java type this location must be compatible with (may be primitive)
+         */
         public final Location locationForType(Class<?> type) {
             return locationForType(type, false, false);
         }
 
+        /**
+         * Create a new location for a fixed type.
+         *
+         * @param type the Java type this location must be compatible with (may be primitive)
+         * @param modifiers additional restrictions and semantics
+         */
         public final Location locationForType(Class<?> type, EnumSet<LocationModifier> modifiers) {
             return locationForType(type, modifiers.contains(LocationModifier.Final), modifiers.contains(LocationModifier.NonNull));
         }
 
+        /**
+         * Creates a new location from a constant value. The value is stored in the shape rather
+         * than in the object.
+         */
         public abstract Location constantLocation(Object value);
 
+        /**
+         * Creates a new declared location with a default value. A declared location only assumes a
+         * type after the first set (initialization).
+         */
         public abstract Location declaredLocation(Object value);
 
+        /**
+         * Reserves space for the given location, so that it will not be available to subsequently
+         * allocated locations.
+         */
         public abstract Allocator addLocation(Location location);
 
         /**
-         * Creates an copy of this allocator.
+         * Creates an copy of this allocator state.
          */
         public abstract Allocator copy();
     }
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ArgumentsTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ArgumentsTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,14 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Passing Arguments</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/CallTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/CallTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,13 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Calling Another Tree</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ChildNodeTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ChildNodeTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,16 @@
  */
 package com.oracle.truffle.api.test;
 
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.Node.Child;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Iterator;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Creating a Child Node</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ChildrenNodesTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ChildrenNodesTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,15 @@
  */
 package com.oracle.truffle.api.test;
 
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Iterator;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Creating an Array of Children Nodes</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FinalFieldTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FinalFieldTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,14 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Using Final Fields in Node Classes</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameSlotTypeSpecializationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameSlotTypeSpecializationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,18 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Specializing Frame Slot Types</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,19 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Storing Values in Frame Slots</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/InterfaceChildFieldTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/InterfaceChildFieldTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,17 @@
  */
 package com.oracle.truffle.api.test;
 
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInterface;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Iterator;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test child fields declared with interface types instead of {@link Node} subclasses.
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReplaceTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReplaceTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,16 @@
  */
 package com.oracle.truffle.api.test;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Iterator;
+import org.junit.Assert;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * <h3>Replacing Nodes at Run Time</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReturnTypeSpecializationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReturnTypeSpecializationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,19 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Specializing Return Types</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/RootNodeTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/RootNodeTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,13 @@
  */
 package com.oracle.truffle.api.test;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.RootNode;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * <h3>Creating a Root Node</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ThreadSafetyTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ThreadSafetyTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,23 @@
  */
 package com.oracle.truffle.api.test;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Random;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Ignore;
+import org.junit.Test;
 
 /**
  * Test node rewriting in a tree shared across multiple threads (run with -ea).
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/TruffleRuntimeTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/TruffleRuntimeTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,25 @@
  */
 package com.oracle.truffle.api.test;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * <h3>Accessing the Truffle Runtime</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/AdvancedInstrumentTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/AdvancedInstrumentTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,20 @@
  */
 package com.oracle.truffle.api.test.instrument;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRoot;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestAdditionNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestAdvancedInstrumentCounterRoot;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestRootNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestValueNode;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 /**
  * Tests the kind of instrumentation where a client can provide an AST fragment to be
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/InstrumentationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/InstrumentationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,24 +22,37 @@
  */
 package com.oracle.truffle.api.test.instrument;
 
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeException;
 import com.oracle.truffle.api.instrument.ProbeFailure.Reason;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.instrument.SimpleInstrumentListener;
+import com.oracle.truffle.api.instrument.StandardInstrumentListener;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultSimpleInstrumentListener;
+import com.oracle.truffle.api.instrument.impl.DefaultStandardInstrumentListener;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeVisitor;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestAdditionNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestLanguageNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestLanguageWrapperNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestRootNode;
 import com.oracle.truffle.api.test.instrument.InstrumentationTestNodes.TestValueNode;
+import java.util.Iterator;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 /**
  * <h3>AST Instrumentation</h3>
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/InstrumentationTestNodes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/instrument/InstrumentationTestNodes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,17 @@
  */
 package com.oracle.truffle.api.test.instrument;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRoot;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.test.TestingLanguage;
 
 /**
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/interop/ForeignAccessSingleThreadedTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/interop/ForeignAccessSingleThreadedTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,11 +27,11 @@
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.nodes.Node;
-
-import org.junit.*;
-
+import org.junit.After;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ForeignAccessSingleThreadedTest implements ForeignAccess.Factory, TruffleObject {
     ForeignAccess fa;
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/interop/MessageStringTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/interop/MessageStringTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,7 +27,9 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Locale;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
 import org.junit.Test;
 
 public class MessageStringTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/NodeUtilTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/NodeUtilTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,15 @@
  */
 package com.oracle.truffle.api.test.nodes;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.test.TestingLanguage;
+import java.util.Iterator;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import org.junit.Test;
 
 public class NodeUtilTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/SafeReplaceTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/SafeReplaceTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,14 @@
  */
 package com.oracle.truffle.api.test.nodes;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.test.TestingLanguage;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 /**
  * Tests optional method for ensuring that a node replacement is type safe. Ordinary node
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/PostOrderDeserializerTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/PostOrderDeserializerTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,9 @@
  */
 package com.oracle.truffle.api.test.nodes.serial;
 
-import java.nio.*;
-import java.util.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.nodes.serial.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.serial.PostOrderDeserializer;
+import com.oracle.truffle.api.nodes.serial.VariableLengthIntBuffer;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.EmptyNode;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithArray;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithFields;
@@ -37,6 +33,12 @@
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithTwoArray;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithTwoChilds;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.StringNode;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 public class PostOrderDeserializerTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/PostOrderSerializerTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/PostOrderSerializerTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,19 @@
  */
 package com.oracle.truffle.api.test.nodes.serial;
 
-import org.junit.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.nodes.serial.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.serial.PostOrderSerializer;
+import com.oracle.truffle.api.nodes.serial.VariableLengthIntBuffer;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.EmptyNode;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithArray;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithFields;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithThreeChilds;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.NodeWithTwoArray;
 import com.oracle.truffle.api.test.nodes.serial.TestNodes.StringNode;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 public class PostOrderSerializerTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/TestNodes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/TestNodes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,8 @@
  */
 package com.oracle.truffle.api.test.nodes.serial;
 
-import java.util.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.util.Objects;
 
 final class TestNodes {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/TestSerializerConstantPool.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/TestSerializerConstantPool.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,10 @@
  */
 package com.oracle.truffle.api.test.nodes.serial;
 
-import java.util.*;
-
-import com.oracle.truffle.api.nodes.serial.*;
+import com.oracle.truffle.api.nodes.serial.SerializerConstantPool;
+import com.oracle.truffle.api.nodes.serial.UnsupportedConstantPoolTypeException;
+import java.util.HashMap;
+import java.util.Map;
 
 class TestSerializerConstantPool implements SerializerConstantPool {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/VariableLengthIntBufferTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/nodes/serial/VariableLengthIntBufferTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,12 @@
  */
 package com.oracle.truffle.api.test.nodes.serial;
 
-import java.nio.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.nodes.serial.*;
+import com.oracle.truffle.api.nodes.serial.VariableLengthIntBuffer;
+import java.nio.ByteBuffer;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 public class VariableLengthIntBufferTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/BytesSourceSectionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/BytesSourceSectionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,10 @@
  */
 package com.oracle.truffle.api.test.source;
 
-import static org.junit.Assert.*;
-
-import java.nio.charset.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.Source;
+import java.nio.charset.StandardCharsets;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class BytesSourceSectionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/SourceSectionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/SourceSectionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,12 @@
  */
 package com.oracle.truffle.api.test.source;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import org.junit.Ignore;
+import org.junit.Test;
 
 public class SourceSectionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/SourceTextTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/source/SourceTextTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,9 @@
  */
 package com.oracle.truffle.api.test.source;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.Source;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class SourceTextTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/AlwaysValidAssumptionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/AlwaysValidAssumptionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,10 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.utilities.AlwaysValidAssumption;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class AlwaysValidAssumptionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/AssumedValueTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/AssumedValueTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,9 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.AssumedValue;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
 
 public class AssumedValueTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/BinaryConditionProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/BinaryConditionProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,16 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.BinaryConditionProfile;
+import com.oracle.truffle.api.utilities.ConditionProfile;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class BinaryConditionProfileTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/BranchProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/BranchProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,9 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.BranchProfile;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class BranchProfileTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/CountingConditionProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/CountingConditionProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,16 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.ConditionProfile;
+import com.oracle.truffle.api.utilities.CountingConditionProfile;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class CountingConditionProfileTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/CyclicAssumptionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/CyclicAssumptionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,12 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class CyclicAssumptionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/ExactClassValueProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/ExactClassValueProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,18 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.ValueProfile;
 import java.lang.reflect.Method;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class ExactClassValueProfileTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/IdentityValueProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/IdentityValueProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,17 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.ValueProfile;
 import java.lang.reflect.Method;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class IdentityValueProfileTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/NeverValidAssumptionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/NeverValidAssumptionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,11 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.utilities.NeverValidAssumption;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 public class NeverValidAssumptionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/PrimitiveValueProfileTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/PrimitiveValueProfileTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,20 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-import org.junit.experimental.theories.*;
-import org.junit.runner.*;
-
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.utilities.PrimitiveValueProfile;
+import com.oracle.truffle.api.utilities.ValueProfile;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoint;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
 public class PrimitiveValueProfileTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/UnionAssumptionTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/utilities/UnionAssumptionTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,13 @@
  */
 package com.oracle.truffle.api.test.utilities;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.utilities.UnionAssumption;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class UnionAssumptionTest {
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/AccessorTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/AccessorTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -32,7 +32,9 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.concurrent.Executors;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/EngineSingleThreadedTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/EngineSingleThreadedTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -23,12 +23,13 @@
 package com.oracle.truffle.api.test.vm;
 
 import com.oracle.truffle.api.source.Source;
-import java.io.*;
-import java.net.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.vm.*;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import org.junit.Before;
+import org.junit.Test;
 
 public class EngineSingleThreadedTest {
     PolyglotEngine tvm;
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ExceptionDuringParsingTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ExceptionDuringParsingTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,7 +27,9 @@
 import static com.oracle.truffle.api.test.vm.ImplicitExplicitExportTest.L1;
 import com.oracle.truffle.api.vm.PolyglotEngine;
 import java.io.IOException;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
 import org.junit.Test;
 
 public class ExceptionDuringParsingTest {
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/GlobalSymbolTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/GlobalSymbolTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,12 @@
 
 import com.oracle.truffle.api.source.Source;
 import static com.oracle.truffle.api.test.vm.ImplicitExplicitExportTest.L3;
-import com.oracle.truffle.api.vm.*;
-import java.io.*;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import java.io.IOException;
 import java.util.concurrent.Executors;
-import org.junit.*;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import org.junit.Test;
 
 public class GlobalSymbolTest {
     @Test
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/ImplicitExplicitExportTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,19 +22,29 @@
  */
 package com.oracle.truffle.api.test.vm;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.RootNode;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.vm.*;
-import java.io.*;
-import java.util.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.Executors;
-import org.junit.*;
-import static org.junit.Assert.*;
+import org.junit.After;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ImplicitExplicitExportTest {
     private static Thread mainThread;
--- a/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/vm/InitializationTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,25 +22,37 @@
  */
 package com.oracle.truffle.api.test.vm;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
 import com.oracle.truffle.api.debug.Breakpoint;
 import com.oracle.truffle.api.debug.DebugSupportException;
 import com.oracle.truffle.api.debug.DebugSupportProvider;
 import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.debug.ExecutionEvent;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeNode;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.api.vm.EventConsumer;
 import com.oracle.truffle.api.vm.PolyglotEngine;
 import java.io.IOException;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 /**
  * Bug report validating test.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/JavaWrapper.java	Mon Sep 21 11:21:03 2015 +0200
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.api.vm;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+final class JavaWrapper implements InvocationHandler {
+    private final PolyglotEngine.Value value;
+    private final Object wrapper;
+    private final InvocationHandler chain;
+
+    public JavaWrapper(PolyglotEngine.Value value, Object wrapper, InvocationHandler chain) {
+        this.value = value;
+        this.chain = chain;
+        this.wrapper = wrapper;
+    }
+
+    static <T> T create(Class<T> representation, Object wrapper, PolyglotEngine.Value value) {
+        InvocationHandler chain = Proxy.getInvocationHandler(wrapper);
+        Object instance = Proxy.newProxyInstance(representation.getClassLoader(), new Class<?>[]{representation}, new JavaWrapper(value, wrapper, chain));
+        return representation.cast(instance);
+    }
+
+    @Override
+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+        if (method.getDeclaringClass() == Object.class) {
+            return method.invoke(this, args);
+        }
+        PolyglotEngine.Value retValue = value.invokeProxy(chain, wrapper, method, args);
+        if (method.getReturnType() == void.class) {
+            return null;
+        } else {
+            Object realValue = retValue.get();
+            if (realValue == null) {
+                return null;
+            }
+            if (Proxy.isProxyClass(realValue.getClass())) {
+                if (Proxy.getInvocationHandler(realValue) instanceof JavaWrapper) {
+                    return realValue;
+                }
+                final Class<?> type = method.getReturnType();
+                return create(type, realValue, retValue);
+            }
+            return realValue;
+        }
+    }
+
+}
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,22 +24,46 @@
  */
 package com.oracle.truffle.api.vm;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
 import com.oracle.truffle.api.TruffleLanguage.Registration;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.impl.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.debug.Debugger;
+import com.oracle.truffle.api.debug.ExecutionEvent;
+import com.oracle.truffle.api.debug.SuspendedEvent;
+import com.oracle.truffle.api.impl.Accessor;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.java.JavaInterop;
-import com.oracle.truffle.api.source.*;
-import java.io.*;
-import java.net.*;
-import java.nio.file.*;
-import java.util.*;
+import com.oracle.truffle.api.source.Source;
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.InterruptedIOException;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
-import java.util.logging.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Gate way into the world of {@link TruffleLanguage Truffle languages}. {@link #buildNew()
@@ -605,7 +629,8 @@
             if (representation.isInstance(obj)) {
                 return representation.cast(obj);
             }
-            return JavaInterop.asJavaObject(representation, (TruffleObject) obj);
+            T wrapper = JavaInterop.asJavaObject(representation, (TruffleObject) obj);
+            return JavaWrapper.create(representation, wrapper, this);
         }
 
         /**
@@ -637,6 +662,32 @@
         }
 
         @SuppressWarnings("try")
+        final Value invokeProxy(final InvocationHandler chain, final Object wrapper, final Method method, final Object[] args) throws IOException {
+            final Debugger[] fillIn = {debugger};
+            final CountDownLatch done = new CountDownLatch(1);
+            final Object[] res = {null, null};
+            executor.execute(new Runnable() {
+                @Override
+                public void run() {
+                    try (final Closeable c = SPI.executionStart(PolyglotEngine.this, fillIn, null)) {
+                        if (debugger == null) {
+                            debugger = fillIn[0];
+                        }
+                        res[0] = chain.invoke(wrapper, method, args);
+                    } catch (IOException ex) {
+                        res[1] = ex;
+                    } catch (Throwable ex) {
+                        res[1] = ex;
+                    } finally {
+                        done.countDown();
+                    }
+                }
+            });
+            exceptionCheck(res);
+            return new Value(language, res, done);
+        }
+
+        @SuppressWarnings("try")
         private void invokeImpl(Debugger[] fillIn, Object thiz, Object[] args, Object[] res, CountDownLatch done) {
             try (final Closeable c = SPI.executionStart(PolyglotEngine.this, fillIn, null)) {
                 if (debugger == null) {
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,15 @@
  */
 package com.oracle.truffle.api.vm;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.interop.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.interop.ForeignAccess;
+import com.oracle.truffle.api.interop.Message;
+import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
 
 final class SymbolInvokerImpl {
     @SuppressWarnings({"unchecked", "rawtypes"})
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/TruffleVM.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,14 @@
  */
 package com.oracle.truffle.api.vm;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.source.*;
-import java.io.*;
-import java.util.*;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.debug.ExecutionEvent;
+import com.oracle.truffle.api.debug.SuspendedEvent;
+import com.oracle.truffle.api.source.Source;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 
--- a/truffle/com.oracle.truffle.api/.checkstyle_checks.xml	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/.checkstyle_checks.xml	Mon Sep 21 11:21:03 2015 +0200
@@ -11,6 +11,10 @@
 <module name="Checker">
   <property name="severity" value="error"/>
   <module name="TreeWalker">
+    <module name="AvoidStarImport">
+      <property name="allowClassImports" value="false"/>
+      <property name="allowStaticMemberImports" value="false"/>
+    </module>
     <property name="tabWidth" value="4"/>
     <module name="FileContentsHolder"/>
     <module name="JavadocStyle">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.api/src/META-INF/upgrade/conditionprofile.hint	Mon Sep 21 11:21:03 2015 +0200
@@ -0,0 +1,6 @@
+'ConditionProfile fields have to be final to be useful':
+$mods$ $type $name = $init$; :: $name instanceof com.oracle.truffle.api.utilities.ConditionProfile && !hasModifier($name, javax.lang.model.element.Modifier.FINAL) && elementKindMatches($name, javax.lang.model.element.ElementKind.FIELD)
+=>
+'Add final':
+$mods$ final $type $name = $init$;
+;;
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Assumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Assumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,8 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * An assumption is a global boolean flag that starts with the value true (i.e., the assumption is
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerDirectives.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,12 @@
  */
 package com.oracle.truffle.api;
 
-import java.lang.annotation.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.concurrent.Callable;
 
 /**
  * Directives that influence the optimizations of the Truffle compiler. All of the operations have
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerOptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/CompilerOptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.RootNode;
 
 /**
  * Allows options to be set to control the compilation of a specific {@link RootNode}, without
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/ExecutionContext.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/ExecutionContext.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.impl.*;
+import com.oracle.truffle.api.impl.DefaultCompilerOptions;
 
 /**
  * Access to information and basic services in the runtime context for a Truffle-implemented guest
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/ReplaceObserver.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/ReplaceObserver.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * An observer that is notified whenever a child node is replaced.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/RootCallTarget.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/RootCallTarget.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.RootNode;
 
 /**
  * Represents the target of a call to a {@link RootNode}, i.e., to another tree of nodes. Instances
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/Truffle.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,10 @@
  */
 package com.oracle.truffle.api;
 
-import java.lang.reflect.*;
-import java.security.*;
-
-import com.oracle.truffle.api.impl.*;
+import com.oracle.truffle.api.impl.DefaultTruffleRuntime;
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
  * Class for obtaining the Truffle runtime singleton object of this virtual machine.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,13 +24,19 @@
  */
 package com.oracle.truffle.api;
 
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.impl.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.impl.Accessor;
+import com.oracle.truffle.api.impl.FindContextNode;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.api.source.*;
-import java.io.*;
-import java.lang.annotation.*;
+import com.oracle.truffle.api.source.Source;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 import java.util.Collections;
 import java.util.Map;
 import java.util.WeakHashMap;
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleOptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,10 @@
  */
 package com.oracle.truffle.api;
 
-import java.security.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
  * Class containing general Truffle options.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,18 @@
  */
 package com.oracle.truffle.api;
 
-import java.util.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameInstanceVisitor;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.nodes.LoopNode;
+import com.oracle.truffle.api.nodes.RepeatingNode;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Collection;
 
 /**
  * Interface representing a Truffle runtime object. The runtime is responsible for creating call
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Breakpoint.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Breakpoint.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,9 @@
  */
 package com.oracle.truffle.api.debug;
 
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.source.Source;
 import java.io.IOException;
 
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/DebugSupportProvider.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/DebugSupportProvider.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,14 @@
  */
 package com.oracle.truffle.api.debug;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRoot;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.Source;
 
 /**
  * Access to language-specific information and execution services to enable debugging.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/Debugger.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,16 +24,31 @@
  */
 package com.oracle.truffle.api.debug;
 
-import java.io.*;
-import java.util.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameInstanceVisitor;
+import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.impl.Accessor;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRoot;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTagTrap;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.Source;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * Represents debugging related state of a {@link com.oracle.truffle.api.vm.PolyglotEngine}.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineBreakpoint.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineBreakpoint.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.debug;
 
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.LineLocation;
 
 // TODO (mlvdv) generic?
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineBreakpointFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineBreakpointFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,23 +24,39 @@
  */
 package com.oracle.truffle.api.debug;
 
-import static com.oracle.truffle.api.debug.Breakpoint.State.*;
-
-import java.io.*;
-import java.util.*;
-import java.util.Map.Entry;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.Truffle;
+import static com.oracle.truffle.api.debug.Breakpoint.State.DISABLED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.DISABLED_UNRESOLVED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.DISPOSED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.ENABLED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.ENABLED_UNRESOLVED;
 import com.oracle.truffle.api.debug.Debugger.BreakpointCallback;
 import com.oracle.truffle.api.debug.Debugger.WarningLog;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultStandardInstrumentListener;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 //TODO (mlvdv) some common functionality could be factored out of this and TagBreakpointSupport
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineToProbesMap.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/LineToProbesMap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,12 +24,19 @@
  */
 package com.oracle.truffle.api.debug;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.InstrumentationTool;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeListener;
 import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * An {@link InstrumentationTool} that builds a map of every {@link Probe} attached to some AST,
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/SuspendedEvent.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/SuspendedEvent.java	Mon Sep 21 11:21:03 2015 +0200
@@ -29,9 +29,8 @@
 import com.oracle.truffle.api.frame.FrameInstance;
 import com.oracle.truffle.api.frame.FrameInstanceVisitor;
 import com.oracle.truffle.api.frame.MaterializedFrame;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
 import com.oracle.truffle.api.nodes.Node;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/TagBreakpoint.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/TagBreakpoint.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.debug;
 
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.SyntaxTag;
 
 // TODO (mlvdv) generic?
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/TagBreakpointFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/debug/TagBreakpointFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,22 +24,37 @@
  */
 package com.oracle.truffle.api.debug;
 
-import static com.oracle.truffle.api.debug.Breakpoint.State.*;
+import static com.oracle.truffle.api.debug.Breakpoint.State.DISABLED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.DISPOSED;
+import static com.oracle.truffle.api.debug.Breakpoint.State.ENABLED;
 
-import java.io.*;
-import java.util.*;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.debug.Debugger.BreakpointCallback;
 import com.oracle.truffle.api.debug.Debugger.WarningLog;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTagTrap;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultStandardInstrumentListener;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
 
 // TODO (mlvdv) some common functionality could be factored out of this and LineBreakpointSupport
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameDescriptor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,14 @@
  */
 package com.oracle.truffle.api.frame;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.Truffle;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
 
 /**
  * Descriptor of the slots of frame objects. Multiple frame instances are associated with one such
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameInstance.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameInstance.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.frame;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.nodes.Node;
 
 public interface FrameInstance {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameInstanceVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameInstanceVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.frame;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.TruffleRuntime;
 
 /**
  * Callback interface for {@link TruffleRuntime#iterateFrames}. Implementations of
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlot.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlot.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.frame;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotTypeException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/frame/FrameSlotTypeException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.frame;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.SlowPathException;
 
 /**
  * Exception thrown if the frame slot type does not match the access type.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/AbstractAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/AbstractAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 
 public abstract class AbstractAssumption implements Assumption {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/Accessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,14 +24,22 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.TruffleLanguage.Env;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.debug.Debugger;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.RootNode;
-import com.oracle.truffle.api.source.*;
-import java.io.*;
+import com.oracle.truffle.api.source.Source;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,9 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 
 /**
  * This is an implementation-specific class. Do not use or instantiate it. Instead, use
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,15 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
 
 /**
  * This is an implementation-specific class. Do not use or instantiate it. Instead, use
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCompilerOptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCompilerOptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerOptions;
 
 public class DefaultCompilerOptions implements CompilerOptions {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,13 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * This is runtime specific API. Do not use in a guest language.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultIndirectCallNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultIndirectCallNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,13 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * This is runtime specific API. Do not use in a guest language.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,9 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.LoopNode;
+import com.oracle.truffle.api.nodes.RepeatingNode;
 
 public final class DefaultLoopNode extends LoopNode {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultMaterializedFrame.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,12 @@
  */
 package com.oracle.truffle.api.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.MaterializedFrame;
 
 /**
  * This is an implementation-specific class. Do not use or instantiate it. Instead, use
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,28 @@
  */
 package com.oracle.truffle.api.impl;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerOptions;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameInstanceVisitor;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.nodes.LoopNode;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RepeatingNode;
+import com.oracle.truffle.api.nodes.RootNode;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 /**
  * Default implementation of the Truffle runtime if the virtual machine does not provide a better
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultVirtualFrame.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,14 @@
  */
 package com.oracle.truffle.api.impl;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import java.util.Arrays;
 
 /**
  * This is an implementation-specific class. Do not use or instantiate it. Instead, use
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ASTPrinter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ASTPrinter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,8 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import java.io.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import java.io.PrintWriter;
 
 /**
  * Access to AST-based debugging support, which is could be language implementation specific in the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ASTProber.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ASTProber.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Enables instrumentation by attaching {@linkplain Probe Probes} to some nodes in a (newly created,
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentResultListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentResultListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,8 +25,8 @@
 package com.oracle.truffle.api.instrument;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Listener for receiving the result a client-provided {@linkplain AdvancedInstrumentRoot AST
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentRoot.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentRoot.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Root of a client-provided AST fragment that can be executed efficiently, subject to full Truffle
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentRootFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/AdvancedInstrumentRootFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Creator of {@linkplain AdvancedInstrumentRoot AST fragments} suitable for efficient execution,
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Instrument.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Instrument.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,12 +24,14 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.instrument.InstrumentationNode.TruffleEvents;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 
 // TODO (mlvdv) these statics should not be global.  Move them to some kind of context.
 // TODO (mlvdv) migrate factory (together with Probe)? break out nested classes?
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/InstrumentationNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/InstrumentationNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * A marker interface for Truffle {@linkplain Node nodes} that internally implement the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/KillException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/KillException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
 
 /**
  * Controls breaking out of an execution context, such as a shell or eval.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Probe.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Probe.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,17 +24,24 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import java.io.*;
-import java.lang.ref.*;
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
+import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.impl.Accessor;
 import com.oracle.truffle.api.instrument.InstrumentationNode.TruffleEvents;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeVisitor;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
+import java.io.PrintStream;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 //TODO (mlvdv) these statics should not be global.  Move them to some kind of context.
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,7 +25,7 @@
 package com.oracle.truffle.api.instrument;
 
 import com.oracle.truffle.api.instrument.ProbeFailure.Reason;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * An exception thrown when {@link Node#probe()} fails because of an implementation failure.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeFailure.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeFailure.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,7 +25,9 @@
 package com.oracle.truffle.api.instrument;
 
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
+import com.oracle.truffle.api.nodes.NodeUtil;
 
 /**
  * Description of a failed attempt to instrument an AST node.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.Source;
 
 /**
  * An observer of events related to {@link Probe}s: creating and tagging.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/ProbeNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,11 +27,13 @@
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.TruffleLanguage;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.instrument.Instrument.AbstractInstrumentNode;
 import com.oracle.truffle.api.instrument.InstrumentationNode.TruffleEvents;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Implementation class & interface for enabling the attachment of {@linkplain Probe Probes} to
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/QuitException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/QuitException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
 
 /**
  * Controls breaking out of all executions and ending Truffle execution.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/SimpleInstrumentListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/SimpleInstrumentListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * A receiver of Truffle execution events that can act on behalf of an external client.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/StandardInstrumentListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/StandardInstrumentListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,9 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * A receiver of Truffle execution events that can act on behalf of an external client.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/SyntaxTagTrap.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/SyntaxTagTrap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * A trap that can be set to interrupt execution at probed nodes carrying a specific tag.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Visualizer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/Visualizer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,9 @@
  */
 package com.oracle.truffle.api.instrument;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * Visualization services for the benefit of instrumentation-based tools, possibly specialized for
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultASTPrinter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultASTPrinter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,14 +24,18 @@
  */
 package com.oracle.truffle.api.instrument.impl;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.ASTPrinter;
+import com.oracle.truffle.api.instrument.InstrumentationNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeClass;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.source.SourceSection;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
 
 /**
  * A language-agnostic for printing out various pieces of a Truffle AST.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultProbeListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultProbeListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,10 @@
  */
 package com.oracle.truffle.api.instrument.impl;
 
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeListener;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.source.Source;
 
 public abstract class DefaultProbeListener implements ProbeListener {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultSimpleInstrumentListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultSimpleInstrumentListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,8 @@
  */
 package com.oracle.truffle.api.instrument.impl;
 
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.SimpleInstrumentListener;
 
 /**
  * A listener for Truffle execution events that provides a no-op implementation of every event.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultStandardInstrumentListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultStandardInstrumentListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,10 @@
  */
 package com.oracle.truffle.api.instrument.impl;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardInstrumentListener;
+import com.oracle.truffle.api.nodes.Node;
 
 /**
  * A listener for AST {@linkplain StandardInstrumentListener execution events} that provides a no-op
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultVisualizer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/instrument/impl/DefaultVisualizer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,13 @@
  */
 package com.oracle.truffle.api.instrument.impl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.instrument.ASTPrinter;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.SourceSection;
 
 public class DefaultVisualizer implements Visualizer {
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/DirectCallNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/DirectCallNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,11 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.VirtualFrame;
 
 /**
  * Represents a direct call to a {@link CallTarget}. Direct calls are calls for which the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/ExplodeLoop.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/ExplodeLoop.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Specifies for a method that the loops with constant number of invocations should be fully
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,19 +24,35 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.io.*;
-import java.lang.annotation.*;
-import java.net.*;
-import java.util.*;
-
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-
-import org.w3c.dom.*;
-
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Utility class for creating output for the ideal graph visualizer.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/IndirectCallNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/IndirectCallNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,9 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.frame.VirtualFrame;
 
 /**
  * Represents an indirect call to a {@link CallTarget}. Indirect calls are calls for which the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 
 /**
  * Experimental API: may change significantly without notice.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,17 +24,30 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.lang.annotation.*;
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
+import com.oracle.truffle.api.ReplaceObserver;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.TruffleOptions;
 import com.oracle.truffle.api.impl.Accessor;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeException;
+import com.oracle.truffle.api.instrument.ProbeFailure;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.JSONHelper;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.Callable;
 
 /**
  * Abstract base class for all Truffle nodes.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeClass.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeClass.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,13 +24,16 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.lang.reflect.*;
-import java.security.*;
-import java.util.*;
-
 import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.nodes.Node.Children;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * Information about a {@link Node} class. A single instance of this class is allocated for every
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeCost.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeCost.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 
 /**
  * Represents a rough estimate for the cost of a {@link Node}. This estimate can be used by runtime
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeFieldAccessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,13 +24,11 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.lang.reflect.*;
-
-import sun.misc.*;
-
 import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.nodes.Node.Children;
 import com.oracle.truffle.api.nodes.NodeUtil.FieldOffsetProvider;
+import java.lang.reflect.Field;
+import sun.misc.Unsafe;
 
 /**
  * Information about a field in a {@link Node} class.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeInfo.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeInfo.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,10 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Annotation for providing additional information on nodes.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,18 +24,29 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import java.io.*;
-import java.lang.annotation.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-import sun.misc.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.TruffleOptions;
+import com.oracle.truffle.api.instrument.Probe;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTag;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.SourceSection;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Objects;
+import sun.misc.Unsafe;
 
 /**
  * Utility class that manages the special access methods for node instances.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RepeatingNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RepeatingNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 
 /**
  * Experimental API: may change significantly without notice.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,11 +25,19 @@
 package com.oracle.truffle.api.nodes;
 
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.impl.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.CompilerOptions;
+import com.oracle.truffle.api.ExecutionContext;
+import com.oracle.truffle.api.LoopCountReceiver;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.TruffleRuntime;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.impl.DefaultCompilerOptions;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * A root node is a node with a method to execute it given only a frame as a parameter. Therefore, a
@@ -197,8 +205,8 @@
 
     /**
      * Helper method to create a root node that always returns the same value. Certain operations
-     * (expecially {@link com.oracle.api.truffle.api.interop inter-operability} API) require return
-     * of stable {@link RootNode root nodes}. To simplify creation of such nodes, here is a factory
+     * (expecially {@link com.oracle.truffle.api.interop inter-operability} API) require return of
+     * stable {@link RootNode root nodes}. To simplify creation of such nodes, here is a factory
      * method that can create {@link RootNode} that returns always the same value.
      *
      * @param constant the constant to return
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/SlowPathException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/SlowPathException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 
 /**
  * An exception thrown to enter a slow path. The Truffle optimizer has special knowledge of this
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/UnexpectedResultException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/UnexpectedResultException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 
 /**
  * An exception that should be thrown if the return value cannot be represented as a value of the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderDeserializer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,14 +24,16 @@
  */
 package com.oracle.truffle.api.nodes.serial;
 
-import java.lang.reflect.*;
-import java.util.*;
-
-import sun.misc.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeClass;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.source.SourceSection;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import sun.misc.Unsafe;
 
 /**
  * Experimental API. May change without notice.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/PostOrderSerializer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,16 +24,15 @@
  */
 package com.oracle.truffle.api.nodes.serial;
 
-import static com.oracle.truffle.api.nodes.serial.PostOrderDeserializer.*;
-
-import java.lang.reflect.*;
-import java.nio.*;
-
-import sun.misc.*;
-
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeClass;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
-import com.oracle.truffle.api.source.*;
+import static com.oracle.truffle.api.nodes.serial.PostOrderDeserializer.getFieldOffset;
+import com.oracle.truffle.api.source.SourceSection;
+import java.lang.reflect.Field;
+import java.nio.ByteBuffer;
+import sun.misc.Unsafe;
 
 /**
  * Experimental API. May change without notice.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/VariableLengthIntBuffer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/serial/VariableLengthIntBuffer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.nodes.serial;
 
-import java.nio.*;
+import java.nio.ByteBuffer;
 
 /**
  * Experimental API. May change without notice. Simple variable length unsigned int buffer backed by
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/script/TruffleScriptEngineFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/script/TruffleScriptEngineFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,8 @@
  */
 package com.oracle.truffle.api.script;
 
-import javax.script.*;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
 
 @Deprecated
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/source/Source.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/source/Source.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,17 +24,33 @@
  */
 package com.oracle.truffle.api.source;
 
-import java.io.*;
-import java.lang.ref.*;
-import java.net.*;
-import java.nio.*;
-import java.nio.charset.*;
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.TruffleLanguage.Registration;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
 import java.nio.file.Files;
 import java.nio.file.spi.FileTypeDetector;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AlwaysValidAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AlwaysValidAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 
 /**
  * An assumption that is always valid. Used as a placeholder where an assumption is needed but never
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AssumedValue.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/AssumedValue.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 
 /**
  * A value that the compiler can assume is constant, but can be changed by invalidation.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/BinaryConditionProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/BinaryConditionProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/BranchProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/BranchProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,9 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCloneable;
 
 /**
  * Utility class to speculate on branches to be never visited. If the {@link #enter()} method is
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ConditionProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ConditionProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.nodes.NodeCloneable;
 
 /**
  * Abstract utility class to speculate on conditions. Condition profiles are intended to be used as
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CountingConditionProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CountingConditionProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/CyclicAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,10 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import java.util.concurrent.atomic.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.Truffle;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Holds an {@link Assumption}, and knows how to recreate it with the same properties on
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ExactClassValueProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ExactClassValueProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 
 /**
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/IdentityValueProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/IdentityValueProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,9 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
+import java.util.Objects;
 
 /**
  * Represents a {@link ValueProfile} that speculates on the object identity of a value.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/JSONHelper.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/JSONHelper.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,12 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import java.util.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.SourceSection;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Helper function that allows to dump the AST during creation to a JSON format.
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/NeverValidAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/NeverValidAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 
 /**
  * An assumption that is never valid. Used as a placeholder where an assumption is needed that
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/PrimitiveValueProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/PrimitiveValueProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,9 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
+import java.util.Objects;
 
 /**
  * Represents a {@link ValueProfile} that speculates on the primitive equality or object identity of
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/UnionAssumption.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/UnionAssumption.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,8 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
 
 /**
  * An assumption that combines two other assumptions. A check on this assumption checks both of the
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ValueProfile.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ValueProfile.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.api.utilities;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.NodeCloneable;
 
 /**
  * Utility class to speculate on certain properties of values.
--- a/truffle/com.oracle.truffle.dsl.processor/.checkstyle_checks.xml	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/.checkstyle_checks.xml	Mon Sep 21 11:21:03 2015 +0200
@@ -11,6 +11,10 @@
 <module name="Checker">
   <property name="severity" value="error"/>
   <module name="TreeWalker">
+    <module name="AvoidStarImport">
+      <property name="allowClassImports" value="false"/>
+      <property name="allowStaticMemberImports" value="false"/>
+    </module>	  
     <property name="tabWidth" value="4"/>
     <module name="FileContentsHolder"/>
     <module name="JavadocStyle">
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.generator.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.java.transform.*;
-import com.oracle.truffle.dsl.processor.model.*;
-import com.oracle.truffle.dsl.processor.parser.*;
+import com.oracle.truffle.dsl.processor.generator.CodeTypeElementFactory;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.transform.FixWarningsVisitor;
+import com.oracle.truffle.dsl.processor.java.transform.GenerateOverrideVisitor;
+import com.oracle.truffle.dsl.processor.model.Template;
+import com.oracle.truffle.dsl.processor.parser.AbstractParser;
+import java.util.HashSet;
+import java.util.Set;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.DeclaredType;
 
 /**
  * THIS IS NOT PUBLIC API.
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/CodeWriter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/CodeWriter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,15 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.io.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.tools.*;
-
-import com.oracle.truffle.dsl.processor.java.compiler.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.java.transform.*;
+import com.oracle.truffle.dsl.processor.java.compiler.CompilerFactory;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.transform.AbstractCodeWriter;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.Writer;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.tools.JavaFileObject;
 
 public final class CodeWriter extends AbstractCodeWriter {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ExpectError.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ExpectError.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,15 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.tools.Diagnostic.*;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic.Kind;
 
 public class ExpectError {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/LanguageRegistrationProcessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,26 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.io.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.*;
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.TruffleLanguage.Registration;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 import javax.tools.Diagnostic.Kind;
-import javax.tools.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.TruffleLanguage.Registration;
+import javax.tools.FileObject;
+import javax.tools.StandardLocation;
 
 @SupportedAnnotationTypes("com.oracle.truffle.api.TruffleLanguage.Registration")
 public final class LanguageRegistrationProcessor extends AbstractProcessor {
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/Log.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/Log.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
+import com.oracle.truffle.dsl.processor.java.model.GeneratedElement;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
 import javax.tools.Diagnostic.Kind;
 
-import com.oracle.truffle.dsl.processor.java.model.*;
-
 /**
  * THIS IS NOT PUBLIC API.
  */
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ProcessorContext.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ProcessorContext.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,23 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror;
+import com.oracle.truffle.dsl.processor.model.Template;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.WildcardType;
+import javax.lang.model.util.Types;
 
 /**
  * THIS IS NOT PUBLIC API.
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleProcessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,19 +22,26 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.*;
-import javax.lang.model.element.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext.ProcessCallback;
+import com.oracle.truffle.dsl.processor.generator.NodeCodeGenerator;
+import com.oracle.truffle.dsl.processor.generator.TypeSystemCodeGenerator;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.parser.AbstractParser;
+import com.oracle.truffle.dsl.processor.parser.NodeParser;
+import com.oracle.truffle.dsl.processor.parser.TypeSystemParser;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
 import javax.tools.Diagnostic.Kind;
 
-import com.oracle.truffle.dsl.processor.ProcessorContext.ProcessCallback;
-import com.oracle.truffle.dsl.processor.generator.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.parser.*;
-
 /**
  * THIS IS NOT PUBLIC API.
  */
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/TruffleTypes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,22 +22,37 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.tools.Diagnostic.Kind;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.TruffleOptions;
+import com.oracle.truffle.api.dsl.GenerateNodeFactory;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.dsl.internal.DSLMetadata;
+import com.oracle.truffle.api.dsl.internal.DSLNode;
+import com.oracle.truffle.api.dsl.internal.DSLShare;
+import com.oracle.truffle.api.dsl.internal.NodeFactoryBase;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.nodes.Node.Children;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import java.util.ArrayList;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.tools.Diagnostic.Kind;
 
 /**
  * THIS IS NOT PUBLIC API.
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpression.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpression.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,15 @@
  */
 package com.oracle.truffle.dsl.processor.expression;
 
-import java.util.*;
-import java.util.concurrent.atomic.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public abstract class DSLExpression {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpressionResolver.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/DSLExpressionResolver.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,21 +22,30 @@
  */
 package com.oracle.truffle.dsl.processor.expression;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.dsl.processor.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Binary;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Call;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.DSLExpressionVisitor;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.IntLiteral;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Negate;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Variable;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 
 public class DSLExpressionResolver implements DSLExpressionVisitor {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Parser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Parser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,15 +25,16 @@
 
 package com.oracle.truffle.dsl.processor.expression;
 
-import java.io.*;
-import java.nio.charset.*;
-import java.util.*;
-
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Binary;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Call;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.IntLiteral;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Negate;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Variable;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
 
 // Checkstyle: stop
 // @formatter:off
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Scanner.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Scanner.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,8 +25,11 @@
 
 package com.oracle.truffle.dsl.processor.expression;
 
-import java.io.*;
-import java.util.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.util.HashMap;
+import java.util.Map;
 
 // Checkstyle: stop
 // @formatter:off
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/CodeTypeElementFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,8 +22,8 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
 
 public abstract class CodeTypeElementFactory<M> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/DSLExpressionGenerator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/DSLExpressionGenerator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,19 +22,24 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.expression.*;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Binary;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Call;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.DSLExpressionVisitor;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.IntLiteral;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Negate;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Variable;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Map;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeKind;
 
 public class DSLExpressionGenerator implements DSLExpressionVisitor {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/GeneratorUtils.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/GeneratorUtils.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,22 +22,36 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.dsl.GeneratedBy;
 import com.oracle.truffle.api.dsl.internal.DSLOptions.TypeBoxingOptimization;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.fromTypeMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationValue;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeNames;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.model.Template;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 
 public class GeneratorUtils {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/ImplicitCastNodeFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/ImplicitCastNodeFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,23 +22,31 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.*;
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.isTypeBoxingOptimized;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getTypeId;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.java.model.GeneratedTypeMirror;
+import com.oracle.truffle.dsl.processor.model.ImplicitCastData;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.util.List;
+import javax.lang.model.element.Element;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.type.TypeMirror;
 
 public class ImplicitCastNodeFactory {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,20 +22,25 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Types;
 
 public class NodeCodeGenerator extends CodeTypeElementFactory<NodeData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,20 +22,27 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeNames;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.ArrayCodeTypeMirror;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import java.util.List;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 class NodeFactoryFactory {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,36 +22,96 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.*;
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
 import com.oracle.truffle.api.dsl.internal.DSLOptions.ImplicitCastOptimization;
 import com.oracle.truffle.api.dsl.internal.DSLOptions.TypeBoxingOptimization;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.dsl.internal.SpecializationNode;
+import com.oracle.truffle.api.dsl.internal.SpecializedNode;
+import com.oracle.truffle.api.dsl.internal.SuppressFBWarnings;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.nodes.InvalidAssumptionException;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.nodes.Node.Children;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.expression.*;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Variable;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.createClass;
+import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.createTransferToInterpreterAndInvalidate;
+import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.isTypeBoxingOptimized;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.compareType;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.fromTypeMirror;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getTypeId;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isObject;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isSubtypeBoxed;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isVoid;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.needsCastTo;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.setVisibility;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.typeEquals;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationValue;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeNames;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.ArrayCodeTypeMirror;
-import com.oracle.truffle.dsl.processor.model.*;
-import com.oracle.truffle.dsl.processor.parser.*;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.java.model.GeneratedTypeMirror;
+import com.oracle.truffle.dsl.processor.model.AssumptionExpression;
+import com.oracle.truffle.dsl.processor.model.CacheExpression;
+import com.oracle.truffle.dsl.processor.model.CreateCastData;
+import com.oracle.truffle.dsl.processor.model.ExecutableTypeData;
+import com.oracle.truffle.dsl.processor.model.GuardExpression;
+import com.oracle.truffle.dsl.processor.model.ImplicitCastData;
+import com.oracle.truffle.dsl.processor.model.NodeChildData;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import com.oracle.truffle.dsl.processor.model.NodeFieldData;
+import com.oracle.truffle.dsl.processor.model.Parameter;
+import com.oracle.truffle.dsl.processor.model.ShortCircuitData;
+import com.oracle.truffle.dsl.processor.model.SpecializationData;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import com.oracle.truffle.dsl.processor.parser.SpecializationGroup;
 import com.oracle.truffle.dsl.processor.parser.SpecializationGroup.TypeGuard;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.ABSTRACT;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.PROTECTED;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 
 public class NodeGenFactory {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemCodeGenerator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemCodeGenerator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,20 +22,33 @@
  */
 package com.oracle.truffle.dsl.processor.generator;
 
-import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.*;
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import static com.oracle.truffle.dsl.processor.generator.GeneratorUtils.createTransferToInterpreterAndInvalidate;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.createConstantName;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getSimpleName;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeBuilder;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.java.model.GeneratedTypeMirror;
+import com.oracle.truffle.dsl.processor.model.ImplicitCastData;
+import com.oracle.truffle.dsl.processor.model.TypeCastData;
+import com.oracle.truffle.dsl.processor.model.TypeCheckData;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.util.List;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PROTECTED;
+import static javax.lang.model.element.Modifier.PUBLIC;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
 
 public class TypeSystemCodeGenerator extends CodeTypeElementFactory<TypeSystemData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,44 @@
  */
 package com.oracle.truffle.dsl.processor.java;
 
-import java.io.*;
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.CompileErrorException;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror;
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.ExecutableType;
+import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.WildcardType;
+import javax.lang.model.util.AbstractAnnotationValueVisitor7;
+import javax.lang.model.util.ElementFilter;
 
 /**
  * THIS IS NOT PUBLIC API.
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/AbstractCompiler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/AbstractCompiler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.dsl.processor.java.compiler;
 
-import java.lang.reflect.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 
 public abstract class AbstractCompiler implements Compiler {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/Compiler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/Compiler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.java.compiler;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
+import java.util.List;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
 
 public interface Compiler {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/CompilerFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/CompilerFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.java.compiler;
 
-import javax.lang.model.element.*;
+import javax.lang.model.element.Element;
 
 public class CompilerFactory {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JDTCompiler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JDTCompiler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,19 @@
  */
 package com.oracle.truffle.dsl.processor.java.compiler;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
 
 public class JDTCompiler extends AbstractCompiler {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JavaCCompiler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/compiler/JavaCCompiler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,14 @@
  */
 package com.oracle.truffle.dsl.processor.java.compiler;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.List;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
 
 public class JavaCCompiler extends AbstractCompiler {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeAnnotationMirror.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeAnnotationMirror.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.DeclaredType;
 
 public class CodeAnnotationMirror implements AnnotationMirror {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeAnnotationValue.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeAnnotationValue.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import java.util.List;
+import java.util.Objects;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.AnnotationValueVisitor;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class CodeAnnotationValue implements AnnotationValue {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeCompilationUnit.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeCompilationUnit.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,14 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import java.util.Collections;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 
 public class CodeCompilationUnit extends CodeElement<TypeElement> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,22 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.io.*;
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.java.transform.*;
+import com.oracle.truffle.dsl.processor.java.transform.AbstractCodeWriter;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
 
 public abstract class CodeElement<E extends Element> implements Element, GeneratedElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeElementScanner.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeElementScanner.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,14 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.util.*;
+import java.util.List;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.util.ElementScanner7;
 
 public abstract class CodeElementScanner<R, P> extends ElementScanner7<R, P> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeExecutableElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeExecutableElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,23 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class CodeExecutableElement extends CodeElement<Element> implements ExecutableElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeImport.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeImport.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
+import java.util.Objects;
 
 public class CodeImport implements Comparable<CodeImport> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeNames.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeNames.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,9 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
+import java.util.HashMap;
+import java.util.Map;
+import javax.lang.model.element.Name;
 
 public abstract class CodeNames {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTree.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTree.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,9 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.type.*;
+import java.util.ArrayList;
+import java.util.List;
+import javax.lang.model.type.TypeMirror;
 
 public class CodeTree {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTreeBuilder.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTreeBuilder.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,20 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import static com.oracle.truffle.dsl.processor.java.model.CodeTreeKind.*;
+import static com.oracle.truffle.dsl.processor.java.model.CodeTreeKind.GROUP;
+import static com.oracle.truffle.dsl.processor.java.model.CodeTreeKind.NEW_LINE;
+import static com.oracle.truffle.dsl.processor.java.model.CodeTreeKind.REMOVE_LAST;
 
-import java.util.*;
+import java.util.List;
 
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
 
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
 
 public class CodeTreeBuilder {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTypeElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTypeElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,24 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.NestingKind;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.TypeParameterElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 
 public class CodeTypeElement extends CodeElement<Element> implements TypeElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTypeMirror.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeTypeMirror.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.TypeVisitor;
+import javax.lang.model.type.WildcardType;
 
 public class CodeTypeMirror implements TypeMirror {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeVariableElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/CodeVariableElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public final class CodeVariableElement extends CodeElement<Element> implements VariableElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import javax.lang.model.element.*;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
 
 public interface GeneratedElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedPackageElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedPackageElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,14 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import java.util.Collections;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ElementVisitor;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.type.TypeMirror;
 
 public final class GeneratedPackageElement extends CodeElement<Element> implements PackageElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedTypeElement.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedTypeElement.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,10 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
+import java.util.Set;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.PackageElement;
 
 public final class GeneratedTypeElement extends CodeTypeElement {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedTypeMirror.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/model/GeneratedTypeMirror.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,10 @@
  */
 package com.oracle.truffle.dsl.processor.java.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-
 import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror;
+import java.util.Collections;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
 
 public final class GeneratedTypeMirror extends DeclaredCodeTypeMirror {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,39 @@
  */
 package com.oracle.truffle.dsl.processor.java.transform;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-
-import java.io.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName;
+import com.oracle.truffle.dsl.processor.java.model.CodeElementScanner;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeImport;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeKind;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.AbstractAnnotationValueVisitor7;
+import javax.lang.model.util.ElementFilter;
 
 public abstract class AbstractCodeWriter extends CodeElementScanner<Void, Void> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/FixWarningsVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/FixWarningsVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,30 @@
  */
 package com.oracle.truffle.dsl.processor.java.transform;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static javax.lang.model.element.Modifier.*;
-
-import java.io.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.modifiers;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationValue;
+import com.oracle.truffle.dsl.processor.java.model.CodeElementScanner;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.Modifier;
+import static javax.lang.model.element.Modifier.FINAL;
+import static javax.lang.model.element.Modifier.PRIVATE;
+import static javax.lang.model.element.Modifier.STATIC;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
 
 public class FixWarningsVisitor extends CodeElementScanner<Void, Void> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/GenerateOverrideVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/GenerateOverrideVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,15 @@
  */
 package com.oracle.truffle.dsl.processor.java.transform;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isDeclaredMethodInSuperType;
+import com.oracle.truffle.dsl.processor.java.model.CodeAnnotationMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeElementScanner;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
 
 public class GenerateOverrideVisitor extends CodeElementScanner<Void, Void> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,37 @@
  */
 package com.oracle.truffle.dsl.processor.java.transform;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.findNearestEnclosingType;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getDeclaredTypes;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getPackageName;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getSuperTypes;
+import com.oracle.truffle.dsl.processor.java.model.CodeElementScanner;
+import com.oracle.truffle.dsl.processor.java.model.CodeExecutableElement;
+import com.oracle.truffle.dsl.processor.java.model.CodeImport;
+import com.oracle.truffle.dsl.processor.java.model.CodeTree;
+import com.oracle.truffle.dsl.processor.java.model.CodeTreeKind;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.WildcardType;
+import javax.lang.model.util.AbstractAnnotationValueVisitor7;
+import javax.lang.model.util.ElementFilter;
 
 public final class OrganizedImports {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/AnnotatedParameterSpec.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/AnnotatedParameterSpec.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.Collections;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
 
 public final class AnnotatedParameterSpec extends ParameterSpec {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/AssumptionExpression.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/AssumptionExpression.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.expression.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
 
 public final class AssumptionExpression extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/CacheExpression.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/CacheExpression.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.expression.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
 
 public final class CacheExpression extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/CreateCastData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/CreateCastData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
+import java.util.List;
 
 public class CreateCastData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ExecutableTypeData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,20 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isSubtypeBoxed;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.isVoid;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.typeEquals;
+import java.util.ArrayList;
+import java.util.List;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeMirror;
 
 public class ExecutableTypeData extends MessageContainer implements Comparable<ExecutableTypeData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/GuardExpression.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/GuardExpression.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.expression.*;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
 import com.oracle.truffle.dsl.processor.expression.DSLExpression.Negate;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.Objects;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
 
 public final class GuardExpression extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ImplicitCastData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ImplicitCastData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.type.*;
+import javax.lang.model.type.TypeMirror;
 
 public class ImplicitCastData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/MessageContainer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/MessageContainer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,21 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
+import com.oracle.truffle.dsl.processor.Log;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
 import javax.tools.Diagnostic.Kind;
 
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-
 public abstract class MessageContainer implements Iterable<MessageContainer> {
 
     private final List<Message> messages = new ArrayList<>();
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/MethodSpec.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/MethodSpec.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import javax.lang.model.type.TypeMirror;
 
 public class MethodSpec {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeChildData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeChildData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,12 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.type.TypeMirror;
 
 public class NodeChildData extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
 import com.oracle.truffle.dsl.processor.model.NodeChildData.Cardinality;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 
 public class NodeData extends Template implements Comparable<NodeData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeExecutionData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeExecutionData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,12 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.type.*;
-
 import com.oracle.truffle.dsl.processor.model.NodeChildData.Cardinality;
+import java.util.ArrayList;
+import java.util.List;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
 
 public class NodeExecutionData {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeFieldData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/NodeFieldData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,8 +22,11 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class NodeFieldData extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/Parameter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/Parameter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,8 +22,8 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public final class Parameter {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ParameterSpec.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ParameterSpec.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
 import com.oracle.truffle.dsl.processor.model.MethodSpec.TypeDef;
+import java.util.Arrays;
+import java.util.Collection;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class ParameterSpec {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ShortCircuitData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/ShortCircuitData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
 
 public class ShortCircuitData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/SpecializationData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/SpecializationData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,17 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.expression.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
 
 public final class SpecializationData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/SpecializationThrowsData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/SpecializationThrowsData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,8 +22,10 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.type.TypeMirror;
 
 public class SpecializationThrowsData extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/Template.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/Template.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
 
 public abstract class Template extends MessageContainer {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TemplateMethod.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,20 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.util.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.util.FilteredIterable;
+import com.oracle.truffle.dsl.processor.util.Predicate;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 
 /**
  * Note: this class has a natural ordering that is inconsistent with equals.
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeCastData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeCastData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.type.*;
+import javax.lang.model.type.TypeMirror;
 
 public class TypeCastData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeCheckData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeCheckData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import javax.lang.model.type.*;
+import javax.lang.model.type.TypeMirror;
 
 public class TypeCheckData extends TemplateMethod {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/model/TypeSystemData.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,17 @@
  */
 package com.oracle.truffle.dsl.processor.model;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
 
 public class TypeSystemData extends Template {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/AbstractParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/AbstractParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,18 +22,25 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
+import com.oracle.truffle.dsl.processor.CompileErrorException;
+import com.oracle.truffle.dsl.processor.Log;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.MessageContainer;
+import com.oracle.truffle.dsl.processor.model.MessageContainer.Message;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
 import javax.tools.Diagnostic.Kind;
 
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
-import com.oracle.truffle.dsl.processor.model.MessageContainer.Message;
-
 /**
  * THIS IS NOT PUBLIC API.
  */
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/CreateCastParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/CreateCastParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,21 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.CreateCast;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.CreateCastData;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeChildData;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.lang.annotation.Annotation;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class CreateCastParser extends NodeMethodParser<CreateCastData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/FallbackParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/FallbackParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.SpecializationData;
 import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.lang.annotation.Annotation;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
 
 public class FallbackParser extends NodeMethodParser<SpecializationData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ImplicitCastParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ImplicitCastParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,20 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.ImplicitCastData;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.Parameter;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.type.TypeMirror;
 
 public class ImplicitCastParser extends TypeSystemMethodParser<ImplicitCastData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/MethodSpecParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/MethodSpecParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,23 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.hasError;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.Parameter;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.Template;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.ArrayType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
 
 public final class MethodSpecParser {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeMethodParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,19 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import com.oracle.truffle.dsl.processor.model.NodeFieldData;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.util.Arrays;
+import java.util.Collection;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.TypeMirror;
 
 public abstract class NodeMethodParser<E extends TemplateMethod> extends TemplateMethodParser<NodeData, E> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,29 +22,77 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.CreateCast;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.GenerateNodeFactory;
+import com.oracle.truffle.api.dsl.GeneratedBy;
+import com.oracle.truffle.api.dsl.ImportStatic;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.NodeFields;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.dsl.processor.CompileErrorException;
+import com.oracle.truffle.dsl.processor.Log;
+import com.oracle.truffle.dsl.processor.expression.DSLExpression;
+import com.oracle.truffle.dsl.processor.expression.DSLExpressionResolver;
+import com.oracle.truffle.dsl.processor.expression.InvalidExpressionException;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.java.compiler.CompilerFactory;
+import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.ArrayCodeTypeMirror;
+import com.oracle.truffle.dsl.processor.java.model.CodeVariableElement;
+import com.oracle.truffle.dsl.processor.model.AssumptionExpression;
+import com.oracle.truffle.dsl.processor.model.CacheExpression;
+import com.oracle.truffle.dsl.processor.model.ExecutableTypeData;
+import com.oracle.truffle.dsl.processor.model.GuardExpression;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeChildData;
+import com.oracle.truffle.dsl.processor.model.NodeChildData.Cardinality;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import com.oracle.truffle.dsl.processor.model.NodeFieldData;
+import com.oracle.truffle.dsl.processor.model.Parameter;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.ShortCircuitData;
+import com.oracle.truffle.dsl.processor.model.SpecializationData;
+import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind;
+import com.oracle.truffle.dsl.processor.model.SpecializationThrowsData;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 import javax.tools.Diagnostic.Kind;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.expression.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.compiler.*;
-import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.ArrayCodeTypeMirror;
-import com.oracle.truffle.dsl.processor.java.model.*;
-import com.oracle.truffle.dsl.processor.model.*;
-import com.oracle.truffle.dsl.processor.model.NodeChildData.Cardinality;
-import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind;
-
 @DSLOptions
 public class NodeParser extends AbstractParser<NodeData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ShortCircuitParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ShortCircuitParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,20 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.NodeExecutionData;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.ShortCircuitData;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.lang.annotation.Annotation;
+import java.util.HashSet;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
 
 public class ShortCircuitParser extends NodeMethodParser<ShortCircuitData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/SpecializationGroup.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/SpecializationGroup.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,15 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.util.*;
-
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.model.GuardExpression;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.SpecializationData;
 import com.oracle.truffle.dsl.processor.model.TemplateMethod.TypeSignature;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import javax.lang.model.type.TypeMirror;
 
 /**
  * Class creates groups of specializations to optimize the layout of generated executeAndSpecialize
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/SpecializationMethodParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/SpecializationMethodParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,27 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.AnnotatedParameterSpec;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.NodeData;
+import com.oracle.truffle.dsl.processor.model.SpecializationData;
 import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind;
+import com.oracle.truffle.dsl.processor.model.SpecializationThrowsData;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.TypeMirror;
 
 public class SpecializationMethodParser extends NodeMethodParser<SpecializationData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TemplateMethodParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TemplateMethodParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,23 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.Template;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
 
 public abstract class TemplateMethodParser<T extends Template, E extends TemplateMethod> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeCastParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeCastParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,18 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeCastData;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.TypeMirror;
 
 class TypeCastParser extends TypeSystemMethodParser<TypeCastData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeCheckParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeCheckParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,14 +22,17 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.model.MethodSpec;
+import com.oracle.truffle.dsl.processor.model.ParameterSpec;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeCheckData;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.type.TypeMirror;
 
 class TypeCheckParser extends TypeSystemMethodParser<TypeCheckData> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemMethodParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemMethodParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-
-import com.oracle.truffle.dsl.processor.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.dsl.processor.ProcessorContext;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.TemplateMethod;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.type.TypeMirror;
 
 abstract class TypeSystemMethodParser<E extends TemplateMethod> extends TemplateMethodParser<TypeSystemData, E> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,17 +22,33 @@
  */
 package com.oracle.truffle.dsl.processor.parser;
 
-import java.lang.annotation.*;
-import java.util.*;
-
-import javax.lang.model.element.*;
-import javax.lang.model.type.*;
-import javax.lang.model.util.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.model.*;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.dsl.processor.java.ElementUtils;
+import com.oracle.truffle.dsl.processor.model.ImplicitCastData;
+import com.oracle.truffle.dsl.processor.model.Template;
+import com.oracle.truffle.dsl.processor.model.TypeCastData;
+import com.oracle.truffle.dsl.processor.model.TypeCheckData;
+import com.oracle.truffle.dsl.processor.model.TypeSystemData;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Types;
 
 @DSLOptions
 public class TypeSystemParser extends AbstractParser<TypeSystemData> {
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/util/Filterator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/util/Filterator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,8 @@
  */
 package com.oracle.truffle.dsl.processor.util;
 
-import java.util.*;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
 
 public class Filterator<T> implements Iterator<T> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/util/FilteredIterable.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/util/FilteredIterable.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.dsl.processor.util;
 
-import java.util.*;
+import java.util.Iterator;
 
 public class FilteredIterable<E> implements Iterable<E> {
 
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/verify/VerifyTruffleProcessor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/verify/VerifyTruffleProcessor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,20 +22,27 @@
  */
 package com.oracle.truffle.dsl.processor.verify;
 
-import static com.oracle.truffle.dsl.processor.java.ElementUtils.*;
-import static java.util.Collections.*;
-
-import java.io.*;
-import java.util.*;
-
-import javax.annotation.processing.*;
-import javax.lang.model.*;
-import javax.lang.model.element.*;
-import javax.tools.Diagnostic.Kind;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.nodes.Node.Child;
-import com.oracle.truffle.dsl.processor.*;
+import com.oracle.truffle.dsl.processor.ExpectError;
+import static com.oracle.truffle.dsl.processor.java.ElementUtils.getElementHierarchy;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import static java.util.Collections.reverse;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.FilerException;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.tools.Diagnostic.Kind;
 
 @SupportedAnnotationTypes({"com.oracle.truffle.api.CompilerDirectives.TruffleBoundary", "com.oracle.truffle.api.nodes.Node.Child"})
 public class VerifyTruffleProcessor extends AbstractProcessor {
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicAllocator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicAllocator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,20 +22,27 @@
  */
 package com.oracle.truffle.object.basic;
 
-import static com.oracle.truffle.object.basic.BasicLocations.*;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.BooleanLocation;
+import com.oracle.truffle.api.object.DoubleLocation;
+import com.oracle.truffle.api.object.IntLocation;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.LongLocation;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.object.LayoutImpl;
 import com.oracle.truffle.object.LocationImpl.InternalLongLocation;
 import com.oracle.truffle.object.Locations.ConstantLocation;
 import com.oracle.truffle.object.Locations.DeclaredDualLocation;
 import com.oracle.truffle.object.Locations.DualLocation;
 import com.oracle.truffle.object.Locations.ValueLocation;
+import com.oracle.truffle.object.ObjectStorageOptions;
+import com.oracle.truffle.object.ShapeImpl;
 import com.oracle.truffle.object.basic.BasicLocations.BooleanLocationDecorator;
 import com.oracle.truffle.object.basic.BasicLocations.DoubleLocationDecorator;
 import com.oracle.truffle.object.basic.BasicLocations.IntLocationDecorator;
+import static com.oracle.truffle.object.basic.BasicLocations.LONG_SIZE;
 import com.oracle.truffle.object.basic.BasicLocations.LongArrayLocation;
 import com.oracle.truffle.object.basic.BasicLocations.LongFieldLocation;
+import static com.oracle.truffle.object.basic.BasicLocations.OBJECT_SIZE;
 import com.oracle.truffle.object.basic.BasicLocations.ObjectArrayLocation;
 
 public abstract class BasicAllocator extends ShapeImpl.BaseAllocator {
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLayout.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLayout.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,19 @@
  */
 package com.oracle.truffle.object.basic;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.ObjectType;
+import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.api.object.Shape.Allocator;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.object.LayoutImpl;
+import com.oracle.truffle.object.LayoutStrategy;
 import com.oracle.truffle.object.LocationImpl.InternalLongLocation;
 import com.oracle.truffle.object.Locations.DualLocation;
 import com.oracle.truffle.object.basic.BasicLocations.ObjectFieldLocation;
 import com.oracle.truffle.object.basic.BasicLocations.SimpleObjectFieldLocation;
+import java.util.EnumSet;
 
 public class BasicLayout extends LayoutImpl {
     private final ObjectLocation[] objectFields;
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLocations.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/BasicLocations.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,21 @@
  */
 package com.oracle.truffle.object.basic;
 
-import java.lang.invoke.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.object.BooleanLocation;
+import com.oracle.truffle.api.object.DoubleLocation;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.FinalLocationException;
+import com.oracle.truffle.api.object.IncompatibleLocationException;
+import com.oracle.truffle.api.object.IntLocation;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.LongLocation;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.object.LocationImpl;
 import com.oracle.truffle.object.LocationImpl.InternalLongLocation;
+import java.lang.invoke.MethodHandle;
 
 /**
  * Property location.
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultLayoutFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultLayoutFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,14 @@
  */
 package com.oracle.truffle.object.basic;
 
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.LayoutFactory;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.object.PropertyImpl;
 
 public class DefaultLayoutFactory implements LayoutFactory {
-    public Layout createLayout(LayoutBuilder layoutBuilder) {
+    public Layout createLayout(Layout.Builder layoutBuilder) {
         return BasicLayout.createLayoutImpl(layoutBuilder.getAllowedImplicitCasts(), new DefaultStrategy());
     }
 
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultStrategy.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DefaultStrategy.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,17 @@
  */
 package com.oracle.truffle.object.basic;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.object.LayoutImpl;
+import com.oracle.truffle.object.LayoutStrategy;
+import com.oracle.truffle.object.LocationImpl;
+import com.oracle.truffle.object.ShapeImpl;
 import com.oracle.truffle.object.ShapeImpl.BaseAllocator;
+import java.util.Objects;
 
 class DefaultStrategy implements LayoutStrategy {
     public boolean updateShape(DynamicObject object) {
@@ -41,8 +47,8 @@
 
     private static boolean assertLocationInRange(Shape shape, Location location) {
         BasicLayout layout = (BasicLayout) shape.getLayout();
-        assert (shape.getPrimitiveFieldSize() + ((LocationImpl) location).primitiveFieldCount() <= layout.getPrimitiveFieldCount());
-        assert (shape.getObjectFieldSize() + ((LocationImpl) location).objectFieldCount() <= layout.getObjectFieldCount());
+        assert (((ShapeImpl) shape).getPrimitiveFieldSize() + ((LocationImpl) location).primitiveFieldCount() <= layout.getPrimitiveFieldCount());
+        assert (((ShapeImpl) shape).getObjectFieldSize() + ((LocationImpl) location).objectFieldCount() <= layout.getObjectFieldCount());
         return true;
     }
 
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DynamicObjectBasic.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/DynamicObjectBasic.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,12 +22,15 @@
  */
 package com.oracle.truffle.object.basic;
 
-import java.lang.annotation.*;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.object.DynamicObjectImpl;
+import com.oracle.truffle.object.ObjectStorageOptions;
+import com.oracle.truffle.object.ShapeImpl;
 import com.oracle.truffle.object.basic.BasicLocations.SimpleLongFieldLocation;
 import com.oracle.truffle.object.basic.BasicLocations.SimpleObjectFieldLocation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 public class DynamicObjectBasic extends DynamicObjectImpl {
     @Retention(RetentionPolicy.RUNTIME)
@@ -91,8 +94,8 @@
     @Override
     protected final void growPrimitiveStore(Shape oldShape, Shape newShape) {
         assert ((ShapeImpl) newShape).hasPrimitiveArray();
-        int oldPrimitiveCapacity = oldShape.getPrimitiveArrayCapacity();
-        int newPrimitiveCapacity = newShape.getPrimitiveArrayCapacity();
+        int oldPrimitiveCapacity = ((ShapeImpl) oldShape).getPrimitiveArrayCapacity();
+        int newPrimitiveCapacity = ((ShapeImpl) newShape).getPrimitiveArrayCapacity();
         if (newPrimitiveCapacity == 0) {
             // due to obsolescence, we might have to reserve an empty primitive array slot
             this.setPrimitiveStore(null, newShape);
@@ -116,10 +119,10 @@
     @Override
     protected final void resizeObjectStore(Shape oldShape, Shape newShape) {
         Object[] newObjectStore = null;
-        int destinationCapacity = newShape.getObjectArrayCapacity();
+        int destinationCapacity = ((ShapeImpl) newShape).getObjectArrayCapacity();
         if (destinationCapacity != 0) {
             newObjectStore = new Object[destinationCapacity];
-            int sourceCapacity = oldShape.getObjectArrayCapacity();
+            int sourceCapacity = ((ShapeImpl) oldShape).getObjectArrayCapacity();
             if (sourceCapacity != 0) {
                 Object[] oldObjectStore = getObjectStore(newShape);
                 for (int i = 0; i < Math.min(sourceCapacity, destinationCapacity); ++i) {
@@ -148,12 +151,12 @@
 
     @Override
     protected final void resizePrimitiveStore(Shape oldShape, Shape newShape) {
-        assert newShape.hasPrimitiveArray();
+        assert ((ShapeImpl) newShape).hasPrimitiveArray();
         long[] newPrimitiveArray = null;
-        int destinationCapacity = newShape.getPrimitiveArrayCapacity();
+        int destinationCapacity = ((ShapeImpl) newShape).getPrimitiveArrayCapacity();
         if (destinationCapacity != 0) {
             newPrimitiveArray = new long[destinationCapacity];
-            int sourceCapacity = oldShape.getPrimitiveArrayCapacity();
+            int sourceCapacity = ((ShapeImpl) oldShape).getPrimitiveArrayCapacity();
             if (sourceCapacity != 0) {
                 long[] oldPrimitiveArray = this.getPrimitiveStore(newShape);
                 for (int i = 0; i < Math.min(sourceCapacity, destinationCapacity); ++i) {
@@ -184,11 +187,11 @@
     @Override
     protected final boolean checkExtensionArrayInvariants(Shape newShape) {
         assert getShape() == newShape;
-        assert (getObjectStore(newShape) == null && newShape.getObjectArrayCapacity() == 0) ||
-                        (getObjectStore(newShape) != null && getObjectStore(newShape).length == newShape.getObjectArrayCapacity());
-        if (newShape.hasPrimitiveArray()) {
-            assert (getPrimitiveStore(newShape) == null && newShape.getPrimitiveArrayCapacity() == 0) ||
-                            (getPrimitiveStore(newShape) != null && getPrimitiveStore(newShape).length == newShape.getPrimitiveArrayCapacity());
+        assert (getObjectStore(newShape) == null && ((ShapeImpl) newShape).getObjectArrayCapacity() == 0) ||
+                        (getObjectStore(newShape) != null && getObjectStore(newShape).length == ((ShapeImpl) newShape).getObjectArrayCapacity());
+        if (((ShapeImpl) newShape).hasPrimitiveArray()) {
+            assert (getPrimitiveStore(newShape) == null && ((ShapeImpl) newShape).getPrimitiveArrayCapacity() == 0) ||
+                            (getPrimitiveStore(newShape) != null && getPrimitiveStore(newShape).length == ((ShapeImpl) newShape).getPrimitiveArrayCapacity());
         }
         return true;
     }
@@ -200,7 +203,7 @@
         if (this.getObjectStore(currentShape) != null) {
             clone.setObjectStore(this.getObjectStore(currentShape).clone(), currentShape);
         }
-        if (currentShape.hasPrimitiveArray() && this.getPrimitiveStore(currentShape) != null) {
+        if (((ShapeImpl) currentShape).hasPrimitiveArray() && this.getPrimitiveStore(currentShape) != null) {
             clone.setPrimitiveStore(this.getPrimitiveStore(currentShape).clone(), currentShape);
         }
         return clone;
--- a/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/ShapeBasic.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object.basic/src/com/oracle/truffle/object/basic/ShapeBasic.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,8 +22,12 @@
  */
 package com.oracle.truffle.object.basic;
 
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.ObjectType;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.object.PropertyMap;
+import com.oracle.truffle.object.ShapeImpl;
+import com.oracle.truffle.object.Transition;
 
 public final class ShapeBasic extends ShapeImpl {
     public ShapeBasic(Layout layout, Object sharedData, ObjectType operations, int id) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ConsListPropertyMap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -0,0 +1,400 @@
+/*
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.object;
+
+import com.oracle.truffle.api.object.Property;
+import java.util.AbstractSet;
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * Implementation of {@link PropertyMap} as a reverse-order cons (snoc) list.
+ */
+final class ConsListPropertyMap extends PropertyMap {
+    private final ConsListPropertyMap car;
+    private final Property cdr;
+    private final int size;
+
+    private static final ConsListPropertyMap EMPTY = new ConsListPropertyMap();
+
+    private ConsListPropertyMap() {
+        this.car = null;
+        this.cdr = null;
+        this.size = 0;
+    }
+
+    private ConsListPropertyMap(ConsListPropertyMap parent, Property added) {
+        this.car = Objects.requireNonNull(parent);
+        this.cdr = added;
+        this.size = parent.size + 1;
+    }
+
+    public static ConsListPropertyMap empty() {
+        return EMPTY;
+    }
+
+    public int size() {
+        return size;
+    }
+
+    public boolean isEmpty() {
+        return size() == 0;
+    }
+
+    public boolean containsKey(Object key) {
+        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
+            if (entry.getKey().equals(key)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean containsValue(Object value) {
+        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
+            if (entry.getValue().equals(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public Property get(Object key) {
+        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
+            if (entry.getKey().equals(key)) {
+                return entry.getValue();
+            }
+        }
+        return null;
+    }
+
+    public Set<Object> keySet() {
+        return new AbstractSet<Object>() {
+            @Override
+            public Iterator<Object> iterator() {
+                return ConsListPropertyMap.this.orderedKeyIterator();
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    public Collection<Property> values() {
+        return new AbstractSet<Property>() {
+            @Override
+            public Iterator<Property> iterator() {
+                return ConsListPropertyMap.this.orderedValueIterator();
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    public Set<Map.Entry<Object, Property>> entrySet() {
+        return new AbstractSet<Map.Entry<Object, Property>>() {
+            @Override
+            public Iterator<Map.Entry<Object, Property>> iterator() {
+                @SuppressWarnings("unchecked")
+                Map.Entry<Object, Property>[] entries = (Map.Entry<Object, Property>[]) new Map.Entry<?, ?>[size()];
+                Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
+                for (int pos = size() - 1; pos >= 0; pos--) {
+                    entries[pos] = iterator.next();
+                }
+                return Arrays.asList(entries).iterator();
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    public Set<Map.Entry<Object, Property>> reverseOrderEntrySet() {
+        return new AbstractSet<Map.Entry<Object, Property>>() {
+            @Override
+            public Iterator<Map.Entry<Object, Property>> iterator() {
+                return new Iterator<Map.Entry<Object, Property>>() {
+                    ConsListPropertyMap current = ConsListPropertyMap.this;
+
+                    public Entry<Object, Property> next() {
+                        if (hasNext()) {
+                            try {
+                                return new MapEntryImpl(current.cdr);
+                            } finally {
+                                current = current.car;
+                            }
+                        } else {
+                            throw new NoSuchElementException();
+                        }
+                    }
+
+                    public boolean hasNext() {
+                        return current != empty();
+                    }
+
+                    public void remove() {
+                        throw new UnsupportedOperationException();
+                    }
+                };
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    @Override
+    public Iterator<Object> orderedKeyIterator() {
+        Object[] keys = new Object[size()];
+        Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
+        for (int pos = size() - 1; pos >= 0; pos--) {
+            keys[pos] = iterator.next().getKey();
+        }
+        return Arrays.asList(keys).iterator();
+    }
+
+    @Override
+    public Iterator<Object> reverseOrderedKeyIterator() {
+        return reverseOrderKeys().iterator();
+    }
+
+    public Set<Object> reverseOrderKeys() {
+        return new AbstractSet<Object>() {
+            @Override
+            public Iterator<Object> iterator() {
+                return new Iterator<Object>() {
+                    ConsListPropertyMap current = ConsListPropertyMap.this;
+
+                    public Object next() {
+                        if (hasNext()) {
+                            try {
+                                return current.cdr.getKey();
+                            } finally {
+                                current = current.car;
+                            }
+                        } else {
+                            throw new NoSuchElementException();
+                        }
+                    }
+
+                    public boolean hasNext() {
+                        return current != empty();
+                    }
+
+                    public void remove() {
+                        throw new UnsupportedOperationException();
+                    }
+                };
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    @Override
+    public Iterator<Property> orderedValueIterator() {
+        Property[] values = new Property[size()];
+        Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
+        for (int pos = size() - 1; pos >= 0; pos--) {
+            values[pos] = iterator.next().getValue();
+        }
+        return Arrays.asList(values).iterator();
+    }
+
+    @Override
+    public Iterator<Property> reverseOrderedValueIterator() {
+        return reverseOrderValues().iterator();
+    }
+
+    public Set<Property> reverseOrderValues() {
+        return new AbstractSet<Property>() {
+            @Override
+            public Iterator<Property> iterator() {
+                return new Iterator<Property>() {
+                    ConsListPropertyMap current = ConsListPropertyMap.this;
+
+                    public Property next() {
+                        if (hasNext()) {
+                            try {
+                                return current.cdr;
+                            } finally {
+                                current = current.car;
+                            }
+                        } else {
+                            throw new NoSuchElementException();
+                        }
+                    }
+
+                    public boolean hasNext() {
+                        return current != empty();
+                    }
+
+                    public void remove() {
+                        throw new UnsupportedOperationException();
+                    }
+                };
+            }
+
+            @Override
+            public int size() {
+                return ConsListPropertyMap.this.size();
+            }
+        };
+    }
+
+    private static final class MapEntryImpl implements Map.Entry<Object, Property> {
+        private final Property backingProperty;
+
+        public MapEntryImpl(Property backingProperty) {
+            this.backingProperty = backingProperty;
+        }
+
+        public Object getKey() {
+            return backingProperty.getKey();
+        }
+
+        public Property getValue() {
+            return backingProperty;
+        }
+
+        public Property setValue(Property value) {
+            throw unmodifiableException();
+        }
+    }
+
+    public PropertyMap copyAndPut(Object key, Property value) {
+        if (!value.getKey().equals(key)) {
+            throw new IllegalArgumentException("Key must equal extracted key of property.");
+        }
+
+        return putCopy(value);
+    }
+
+    public ImmutableMap<Object, Property> copyAndRemove(Object key) {
+        Deque<Property> shelve = new ArrayDeque<>();
+        ConsListPropertyMap current = this;
+        while (!current.isEmpty()) {
+            if (current.getLastProperty().getKey().equals(key)) {
+                ConsListPropertyMap newMap = current.getParentMap();
+                for (Property property : shelve) {
+                    newMap = newMap.putCopy(property);
+                }
+                return newMap;
+            } else {
+                shelve.push(current.getLastProperty());
+                current = current.getParentMap();
+            }
+        }
+        return this;
+    }
+
+    @Override
+    public ConsListPropertyMap putCopy(Property value) {
+        return new ConsListPropertyMap(this, value);
+    }
+
+    @Override
+    public ConsListPropertyMap removeCopy(Property value) {
+        Deque<Property> shelve = new ArrayDeque<>();
+        ConsListPropertyMap current = this;
+        while (!current.isEmpty()) {
+            if (current.getLastProperty().equals(value)) {
+                ConsListPropertyMap newMap = current.getParentMap();
+                for (Property property : shelve) {
+                    newMap = newMap.putCopy(property);
+                }
+                return newMap;
+            } else {
+                shelve.push(current.getLastProperty());
+                current = current.getParentMap();
+            }
+        }
+        return this;
+    }
+
+    @Override
+    public ConsListPropertyMap replaceCopy(Property oldValue, Property newValue) {
+        Deque<Property> shelve = new ArrayDeque<>();
+        ConsListPropertyMap current = this;
+        while (!current.isEmpty()) {
+            if (current.getLastProperty().equals(oldValue)) {
+                ConsListPropertyMap newMap = current.getParentMap();
+                newMap = newMap.putCopy(newValue);
+                for (Property property : shelve) {
+                    newMap = newMap.putCopy(property);
+                }
+                return newMap;
+            } else {
+                shelve.push(current.getLastProperty());
+                current = current.getParentMap();
+            }
+        }
+        return this;
+    }
+
+    public ConsListPropertyMap getOwningMap(Property value) {
+        ConsListPropertyMap current = this;
+        while (!current.isEmpty()) {
+            if (current.getLastProperty().equals(value)) {
+                return current;
+            }
+            current = current.getParentMap();
+        }
+        return null;
+    }
+
+    @Override
+    public ConsListPropertyMap getParentMap() {
+        return car;
+    }
+
+    @Override
+    public Property getLastProperty() {
+        return cdr;
+    }
+
+    @Override
+    public String toString() {
+        return values().toString();
+    }
+
+}
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Debug.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Debug.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,12 @@
  */
 package com.oracle.truffle.object;
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.object.debug.*;
+import com.oracle.truffle.object.debug.JSONShapeVisitor;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.Collection;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 class Debug {
     private static Collection<ShapeImpl> allShapes;
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DebugCounter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DebugCounter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,9 @@
  */
 package com.oracle.truffle.object;
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.atomic.*;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicLong;
 
 public final class DebugCounter {
     private static final ArrayList<DebugCounter> allCounters = new ArrayList<>();
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DebugShapeVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DebugShapeVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,9 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.Shape;
+import java.util.Collections;
+import java.util.Map;
 
 public abstract class DebugShapeVisitor<R> implements ShapeVisitor<R> {
     public R visitShape(Shape shape) {
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,15 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.interop.*;
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.interop.ForeignAccess;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.LocationFactory;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.object.Locations.ValueLocation;
-import com.oracle.truffle.object.debug.*;
+import com.oracle.truffle.object.debug.ShapeProfiler;
+import java.util.List;
 
 public abstract class DynamicObjectImpl extends DynamicObject implements Cloneable {
     private ShapeImpl shape;
@@ -184,7 +186,6 @@
         }
     }
 
-    @Override
     @TruffleBoundary
     public boolean changeFlags(Object id, int newFlags) {
         Shape oldShape = getShape();
@@ -201,24 +202,6 @@
         }
     }
 
-    @Override
-    @TruffleBoundary
-    public boolean changeFlags(Object id, FlagsFunction updateFunction) {
-        Shape oldShape = getShape();
-        Property existing = oldShape.getProperty(id);
-        if (existing != null) {
-            int newFlags = updateFunction.apply(existing.getFlags());
-            if (existing.getFlags() != newFlags) {
-                Property newProperty = existing.copyWithFlags(newFlags);
-                Shape newShape = oldShape.replaceProperty(existing, newProperty);
-                this.setShape(newShape);
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
-
     public String debugDump(int level) {
         return debugDump(0, level);
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ImmutableMap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.object;
+
+import java.util.Map;
+
+/**
+ * An immutable {@link Map}. Does not permit null keys or values.
+ */
+public interface ImmutableMap<K, V> extends Map<K, V> {
+
+    /**
+     * Creates an immutable copy of this map with the given entry put in the map.
+     */
+    ImmutableMap<K, V> copyAndPut(final K key, final V value);
+
+    /**
+     * Creates an immutable copy of this map with the given entry removed from the map.
+     */
+    ImmutableMap<K, V> copyAndRemove(final K key);
+
+}
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LayoutImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LayoutImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,18 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.BooleanLocation;
+import com.oracle.truffle.api.object.DoubleLocation;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.IntLocation;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.LocationModifier;
+import com.oracle.truffle.api.object.LongLocation;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.ObjectType;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.api.object.Shape.Allocator;
 import com.oracle.truffle.object.LocationImpl.EffectivelyFinalLocation;
 import com.oracle.truffle.object.LocationImpl.TypedObjectLocation;
@@ -33,6 +42,7 @@
 import com.oracle.truffle.object.Locations.DualLocation;
 import com.oracle.truffle.object.Locations.ValueLocation;
 import com.oracle.truffle.object.ShapeImpl.BaseAllocator;
+import java.util.EnumSet;
 
 public abstract class LayoutImpl extends Layout {
     private static final int INT_TO_DOUBLE_FLAG = 1;
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LayoutStrategy.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LayoutStrategy.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,11 @@
  */
 package com.oracle.truffle.object;
 
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.object.ShapeImpl.BaseAllocator;
 
 public interface LayoutStrategy {
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LocationImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/LocationImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,17 @@
  */
 package com.oracle.truffle.object;
 
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.BooleanLocation;
+import com.oracle.truffle.api.object.DoubleLocation;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.FinalLocationException;
+import com.oracle.truffle.api.object.IncompatibleLocationException;
+import com.oracle.truffle.api.object.IntLocation;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.LongLocation;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.api.object.TypedLocation;
 
 public abstract class LocationImpl extends Location {
 
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,16 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.FinalLocationException;
+import com.oracle.truffle.api.object.IncompatibleLocationException;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.api.object.TypedLocation;
+import java.util.Objects;
 
 /**
  * Property location.
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ObjectStorageOptions.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ObjectStorageOptions.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.object;
 
-import static com.oracle.truffle.api.object.Layout.*;
+import static com.oracle.truffle.api.object.Layout.OPTION_PREFIX;
 
 public class ObjectStorageOptions {
     // Shape configuration
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/PropertyImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/PropertyImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,10 +22,17 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.FinalLocationException;
+import com.oracle.truffle.api.object.HiddenKey;
+import com.oracle.truffle.api.object.IncompatibleLocationException;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.LocationModifier;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.object.Locations.DeclaredLocation;
+import java.util.EnumSet;
+import java.util.Objects;
 
 /**
  * Property objects represent the mapping between property identifiers (keys) and storage locations.
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/PropertyMap.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/PropertyMap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,336 +22,58 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
-
-public final class PropertyMap implements Map<Object, Property> {
-    private final PropertyMap car;
-    private final Property cdr;
-    private final int size;
-
-    private static final PropertyMap EMPTY = new PropertyMap();
+import com.oracle.truffle.api.object.Property;
+import java.util.Iterator;
+import java.util.Map;
 
-    private PropertyMap() {
-        this.car = null;
-        this.cdr = null;
-        this.size = 0;
-    }
-
-    private PropertyMap(PropertyMap parent, Property added) {
-        this.car = Objects.requireNonNull(parent);
-        this.cdr = added;
-        this.size = parent.size + 1;
-    }
+/**
+ * Immutable property map.
+ */
+public abstract class PropertyMap implements ImmutableMap<Object, Property> {
 
     public static PropertyMap empty() {
-        return EMPTY;
-    }
-
-    public int size() {
-        return size;
+        return ConsListPropertyMap.empty();
     }
 
-    public boolean isEmpty() {
-        return size() == 0;
-    }
+    public abstract Iterator<Object> orderedKeyIterator();
+
+    public abstract Iterator<Object> reverseOrderedKeyIterator();
 
-    public boolean containsKey(Object key) {
-        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
-            if (entry.getKey().equals(key)) {
-                return true;
-            }
-        }
-        return false;
-    }
+    public abstract Iterator<Property> orderedValueIterator();
+
+    public abstract Iterator<Property> reverseOrderedValueIterator();
+
+    public abstract Property getLastProperty();
 
-    public boolean containsValue(Object value) {
-        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
-            if (entry.getValue().equals(value)) {
-                return true;
-            }
-        }
-        return false;
-    }
+    public abstract PropertyMap putCopy(final Property element);
+
+    public abstract PropertyMap replaceCopy(final Property oldValue, final Property newValue);
 
-    public Property get(Object key) {
-        for (Map.Entry<Object, Property> entry : reverseOrderEntrySet()) {
-            if (entry.getKey().equals(key)) {
-                return entry.getValue();
-            }
-        }
-        return null;
-    }
+    public abstract PropertyMap removeCopy(final Property value);
 
-    public Property put(Object key, Property value) {
+    public abstract PropertyMap getParentMap();
+
+    @Override
+    public Property put(final Object key, final Property value) {
         throw unmodifiableException();
     }
 
-    public Property remove(Object key) {
+    @Override
+    public void putAll(final Map<? extends Object, ? extends Property> m) {
         throw unmodifiableException();
     }
 
-    public void putAll(Map<? extends Object, ? extends Property> m) {
+    @Override
+    public Property remove(final Object key) {
         throw unmodifiableException();
     }
 
+    @Override
     public void clear() {
         throw unmodifiableException();
     }
 
-    public Set<Object> keySet() {
-        return new AbstractSet<Object>() {
-            @Override
-            public Iterator<Object> iterator() {
-                Object[] keys = new Object[size()];
-                Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
-                for (int pos = size() - 1; pos >= 0; pos--) {
-                    keys[pos] = iterator.next().getKey();
-                }
-                return Arrays.asList(keys).iterator();
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    public Collection<Property> values() {
-        return new AbstractSet<Property>() {
-            @Override
-            public Iterator<Property> iterator() {
-                Property[] values = new Property[size()];
-                Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
-                for (int pos = size() - 1; pos >= 0; pos--) {
-                    values[pos] = iterator.next().getValue();
-                }
-                return Arrays.asList(values).iterator();
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    public Set<Map.Entry<Object, Property>> entrySet() {
-        return new AbstractSet<Map.Entry<Object, Property>>() {
-            @Override
-            public Iterator<Map.Entry<Object, Property>> iterator() {
-                @SuppressWarnings("unchecked")
-                Map.Entry<Object, Property>[] entries = (Map.Entry<Object, Property>[]) new Map.Entry<?, ?>[size()];
-                Iterator<Map.Entry<Object, Property>> iterator = reverseOrderEntrySet().iterator();
-                for (int pos = size() - 1; pos >= 0; pos--) {
-                    entries[pos] = iterator.next();
-                }
-                return Arrays.asList(entries).iterator();
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    public Set<Map.Entry<Object, Property>> reverseOrderEntrySet() {
-        return new AbstractSet<Map.Entry<Object, Property>>() {
-            @Override
-            public Iterator<Map.Entry<Object, Property>> iterator() {
-                return new Iterator<Map.Entry<Object, Property>>() {
-                    PropertyMap current = PropertyMap.this;
-
-                    public Entry<Object, Property> next() {
-                        if (hasNext()) {
-                            try {
-                                return new MapEntryImpl(current.cdr);
-                            } finally {
-                                current = current.car;
-                            }
-                        } else {
-                            throw new NoSuchElementException();
-                        }
-                    }
-
-                    public boolean hasNext() {
-                        return current != empty();
-                    }
-
-                    public void remove() {
-                        throw new UnsupportedOperationException();
-                    }
-                };
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    public Set<Object> reverseOrderKeys() {
-        return new AbstractSet<Object>() {
-            @Override
-            public Iterator<Object> iterator() {
-                return new Iterator<Object>() {
-                    PropertyMap current = PropertyMap.this;
-
-                    public Object next() {
-                        if (hasNext()) {
-                            try {
-                                return current.cdr.getKey();
-                            } finally {
-                                current = current.car;
-                            }
-                        } else {
-                            throw new NoSuchElementException();
-                        }
-                    }
-
-                    public boolean hasNext() {
-                        return current != empty();
-                    }
-
-                    public void remove() {
-                        throw new UnsupportedOperationException();
-                    }
-                };
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    public Set<Property> reverseOrderValues() {
-        return new AbstractSet<Property>() {
-            @Override
-            public Iterator<Property> iterator() {
-                return new Iterator<Property>() {
-                    PropertyMap current = PropertyMap.this;
-
-                    public Property next() {
-                        if (hasNext()) {
-                            try {
-                                return current.cdr;
-                            } finally {
-                                current = current.car;
-                            }
-                        } else {
-                            throw new NoSuchElementException();
-                        }
-                    }
-
-                    public boolean hasNext() {
-                        return current != empty();
-                    }
-
-                    public void remove() {
-                        throw new UnsupportedOperationException();
-                    }
-                };
-            }
-
-            @Override
-            public int size() {
-                return PropertyMap.this.size();
-            }
-        };
-    }
-
-    private static final class MapEntryImpl implements Map.Entry<Object, Property> {
-        private final Property backingProperty;
-
-        public MapEntryImpl(Property backingProperty) {
-            this.backingProperty = backingProperty;
-        }
-
-        public Object getKey() {
-            return backingProperty.getKey();
-        }
-
-        public Property getValue() {
-            return backingProperty;
-        }
-
-        public Property setValue(Property value) {
-            throw unmodifiableException();
-        }
-    }
-
-    private static UnsupportedOperationException unmodifiableException() {
-        throw new UnsupportedOperationException("unmodifiable");
-    }
-
-    public PropertyMap putCopy(Property value) {
-        return new PropertyMap(this, value);
-    }
-
-    public PropertyMap removeCopy(Property value) {
-        Deque<Property> shelve = new ArrayDeque<>();
-        PropertyMap current = this;
-        while (!current.isEmpty()) {
-            if (current.getLastProperty().equals(value)) {
-                PropertyMap newMap = current.getParentMap();
-                for (Property property : shelve) {
-                    newMap = newMap.putCopy(property);
-                }
-                return newMap;
-            } else {
-                shelve.push(current.getLastProperty());
-                current = current.getParentMap();
-            }
-        }
-        return this;
-    }
-
-    public PropertyMap replaceCopy(Property oldValue, Property newValue) {
-        Deque<Property> shelve = new ArrayDeque<>();
-        PropertyMap current = this;
-        while (!current.isEmpty()) {
-            if (current.getLastProperty().equals(oldValue)) {
-                PropertyMap newMap = current.getParentMap();
-                newMap = newMap.putCopy(newValue);
-                for (Property property : shelve) {
-                    newMap = newMap.putCopy(property);
-                }
-                return newMap;
-            } else {
-                shelve.push(current.getLastProperty());
-                current = current.getParentMap();
-            }
-        }
-        return this;
-    }
-
-    public PropertyMap getOwningMap(Property value) {
-        PropertyMap current = this;
-        while (!current.isEmpty()) {
-            if (current.getLastProperty().equals(value)) {
-                return current;
-            }
-            current = current.getParentMap();
-        }
-        return null;
-    }
-
-    PropertyMap getParentMap() {
-        return car;
-    }
-
-    public Property getLastProperty() {
-        return cdr;
-    }
-
-    @Override
-    public String toString() {
-        return values().toString();
+    protected static RuntimeException unmodifiableException() {
+        throw new UnsupportedOperationException();
     }
 }
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeImpl.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,16 +22,24 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.interop.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.interop.ForeignAccess;
+import com.oracle.truffle.api.nodes.ExplodeLoop;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.DynamicObjectFactory;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.ObjectLocation;
+import com.oracle.truffle.api.object.ObjectType;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.api.object.ShapeListener;
+import com.oracle.truffle.api.utilities.NeverValidAssumption;
 import com.oracle.truffle.object.LocationImpl.InternalLongLocation;
 import com.oracle.truffle.object.LocationImpl.LocationVisitor;
 import com.oracle.truffle.object.Locations.ConstantLocation;
@@ -45,6 +53,15 @@
 import com.oracle.truffle.object.Transition.PropertyTransition;
 import com.oracle.truffle.object.Transition.RemovePropertyTransition;
 import com.oracle.truffle.object.Transition.ReservePrimitiveArrayTransition;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Shape objects create a mapping of Property objects to indexes. The mapping of those indexes to an
@@ -99,6 +116,7 @@
      *
      * @param parent predecessor shape
      * @param transitionFromParent direct transition from parent shape
+     *
      * @see #ShapeImpl(Layout, ShapeImpl, ObjectType, Object, PropertyMap, Transition,
      *      BaseAllocator, int)
      */
@@ -109,7 +127,7 @@
         this.propertyMap = Objects.requireNonNull(propertyMap);
         this.root = parent != null ? parent.getRoot() : this;
         this.parent = parent;
-        this.transitionFromParent = transitionFromParent;
+
         this.objectArraySize = objectArraySize;
         this.objectArrayCapacity = capacityFromSize(objectArraySize);
         this.objectFieldSize = objectFieldSize;
@@ -129,11 +147,11 @@
         this.validAssumption = createValidAssumption();
 
         this.id = id;
-        shapeCount.inc();
-
+        this.transitionFromParent = transitionFromParent;
         this.sharedData = sharedData;
         this.extraData = objectType.createShapeData(this);
 
+        shapeCount.inc();
         debugRegisterShape(this);
     }
 
@@ -150,7 +168,13 @@
     }
 
     private static int makePropertyCount(ShapeImpl parent, PropertyMap propertyMap) {
-        return parent.propertyCount + ((propertyMap.size() > parent.propertyMap.size() && !propertyMap.getLastProperty().isHidden() && !propertyMap.getLastProperty().isShadow()) ? 1 : 0);
+        if (propertyMap.size() > parent.propertyMap.size()) {
+            Property lastProperty = propertyMap.getLastProperty();
+            if (!lastProperty.isHidden() && !lastProperty.isShadow()) {
+                return parent.propertyCount + 1;
+            }
+        }
+        return parent.propertyCount;
     }
 
     @Override
@@ -178,37 +202,30 @@
         }
     }
 
-    @Override
     public final int getObjectArraySize() {
         return objectArraySize;
     }
 
-    @Override
     public final int getObjectFieldSize() {
         return objectFieldSize;
     }
 
-    @Override
     public final int getPrimitiveFieldSize() {
         return primitiveFieldSize;
     }
 
-    @Override
     public final int getObjectArrayCapacity() {
         return objectArrayCapacity;
     }
 
-    @Override
     public final int getPrimitiveArrayCapacity() {
         return primitiveArrayCapacity;
     }
 
-    @Override
     public final int getPrimitiveArraySize() {
         return primitiveArraySize;
     }
 
-    @Override
     public final boolean hasPrimitiveArray() {
         return hasPrimitiveArray;
     }
@@ -439,7 +456,9 @@
     @Override
     public final List<Property> getPropertyList(Pred<Property> filter) {
         LinkedList<Property> props = new LinkedList<>();
-        next: for (Property currentProperty : this.propertyMap.reverseOrderValues()) {
+        next: for (Iterator<Property> it = this.propertyMap.reverseOrderedValueIterator(); it.hasNext();) {
+            Property currentProperty = it.next();
+
             if (!currentProperty.isHidden() && filter.test(currentProperty)) {
                 if (currentProperty.getLocation() instanceof DeclaredLocation) {
                     for (Iterator<Property> iter = props.iterator(); iter.hasNext();) {
@@ -471,7 +490,8 @@
     @Override
     public final List<Property> getPropertyListInternal(boolean ascending) {
         LinkedList<Property> props = new LinkedList<>();
-        for (Property current : this.propertyMap.reverseOrderValues()) {
+        for (Iterator<Property> it = this.propertyMap.reverseOrderedValueIterator(); it.hasNext();) {
+            Property current = it.next();
             if (ascending) {
                 props.addFirst(current);
             } else {
@@ -490,7 +510,8 @@
     @Override
     public final List<Object> getKeyList(Pred<Property> filter) {
         LinkedList<Object> keys = new LinkedList<>();
-        for (Property currentProperty : this.propertyMap.reverseOrderValues()) {
+        for (Iterator<Property> it = this.propertyMap.reverseOrderedValueIterator(); it.hasNext();) {
+            Property currentProperty = it.next();
             if (!currentProperty.isHidden() && filter.test(currentProperty) && !currentProperty.isShadow()) {
                 keys.addFirst(currentProperty.getKey());
             }
@@ -576,7 +597,7 @@
         }
 
         sb.append("{");
-        for (Iterator<Property> iterator = propertyMap.reverseOrderValues().iterator(); iterator.hasNext();) {
+        for (Iterator<Property> iterator = propertyMap.reverseOrderedValueIterator(); iterator.hasNext();) {
             Property p = iterator.next();
             sb.append(p);
             if (iterator.hasNext()) {
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/ShapeVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.object;
 
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.Shape;
 
 public interface ShapeVisitor<R> {
     R visitShape(Shape shape);
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Transition.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Transition.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,9 +22,9 @@
  */
 package com.oracle.truffle.object;
 
-import java.util.*;
-
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.object.ObjectType;
+import com.oracle.truffle.api.object.Property;
+import java.util.Objects;
 
 public abstract class Transition {
     @Override
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/GraphvizShapeVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/GraphvizShapeVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,11 +22,14 @@
  */
 package com.oracle.truffle.object.debug;
 
-import java.util.*;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.object.DebugShapeVisitor;
+import com.oracle.truffle.object.ShapeImpl;
+import com.oracle.truffle.object.Transition;
+import java.util.HashSet;
+import java.util.Map;
 import java.util.Map.Entry;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import java.util.Set;
 
 public class GraphvizShapeVisitor extends DebugShapeVisitor<GraphvizShapeVisitor> {
     private final Set<Shape> drawn;
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/JSONShapeVisitor.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/JSONShapeVisitor.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,15 +22,19 @@
  */
 package com.oracle.truffle.object.debug;
 
-import java.util.*;
-import java.util.Map.Entry;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.api.object.TypedLocation;
+import com.oracle.truffle.api.utilities.JSONHelper;
 import com.oracle.truffle.api.utilities.JSONHelper.JSONArrayBuilder;
 import com.oracle.truffle.api.utilities.JSONHelper.JSONObjectBuilder;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.object.DebugShapeVisitor;
+import com.oracle.truffle.object.Locations;
+import com.oracle.truffle.object.Transition;
 import com.oracle.truffle.object.Transition.PropertyTransition;
+import java.util.Map;
+import java.util.Map.Entry;
 
 public class JSONShapeVisitor extends DebugShapeVisitor<JSONObjectBuilder> {
     @Override
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/ShapeProfiler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/debug/ShapeProfiler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -22,13 +22,18 @@
  */
 package com.oracle.truffle.object.debug;
 
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import java.util.concurrent.*;
-
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.object.*;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.object.ObjectStorageOptions;
+import com.oracle.truffle.object.ShapeImpl;
+import java.io.PrintWriter;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 public class ShapeProfiler {
     private static final String LINE_SEPARATOR = "***********************************************";
@@ -116,12 +121,12 @@
 
         public void profile(Shape shape) {
             jsObjects++;
-            oac += shape.getObjectArrayCapacity();
-            oas += shape.getObjectArraySize();
-            ofs += shape.getObjectFieldSize();
-            pac += shape.getPrimitiveArrayCapacity();
-            pas += shape.getPrimitiveArraySize();
-            pfs += shape.getPrimitiveFieldSize();
+            oac += ((ShapeImpl) shape).getObjectArrayCapacity();
+            oas += ((ShapeImpl) shape).getObjectArraySize();
+            ofs += ((ShapeImpl) shape).getObjectFieldSize();
+            pac += ((ShapeImpl) shape).getPrimitiveArrayCapacity();
+            pas += ((ShapeImpl) shape).getPrimitiveArraySize();
+            pfs += ((ShapeImpl) shape).getPrimitiveFieldSize();
         }
 
         public void add(ShapeStats stats) {
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLSimpleTestSuite.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLSimpleTestSuite.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,8 +40,8 @@
  */
 package com.oracle.truffle.sl.test;
 
-import org.junit.*;
-import org.junit.runner.*;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
 @RunWith(SLTestRunner.class)
 @SLTestSuite({"truffle/com.oracle.truffle.sl.test/tests", "tests"})
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTckTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTckTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -41,9 +41,9 @@
 package com.oracle.truffle.sl.test;
 
 import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.tck.TruffleTCK;
-import com.oracle.truffle.api.vm.PolyglotEngine;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
 /**
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestRunner.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,26 +40,39 @@
  */
 package com.oracle.truffle.sl.test;
 
-import java.io.*;
-import java.net.*;
-import java.nio.charset.*;
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.util.*;
-
-import org.junit.*;
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.manipulation.*;
-import org.junit.runner.notification.*;
-import org.junit.runners.*;
-import org.junit.runners.model.*;
-
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.vm.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.builtins.*;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import com.oracle.truffle.sl.SLLanguage;
+import com.oracle.truffle.sl.builtins.SLBuiltinNode;
 import com.oracle.truffle.sl.test.SLTestRunner.TestCase;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.internal.TextListener;
+import org.junit.runner.Description;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Result;
+import org.junit.runner.manipulation.Filter;
+import org.junit.runner.manipulation.NoTestsRemainException;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.InitializationError;
 
 public final class SLTestRunner extends ParentRunner<TestCase> {
 
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestSuite.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/SLTestSuite.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,10 @@
  */
 package com.oracle.truffle.sl.test;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE)
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestRunner.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,28 +40,43 @@
  */
 package com.oracle.truffle.sl.test.instrument;
 
-import java.io.*;
-import java.nio.charset.*;
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.util.*;
-
-import org.junit.*;
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.manipulation.*;
-import org.junit.runner.notification.*;
-import org.junit.runners.*;
-import org.junit.runners.model.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.impl.DefaultSimpleInstrumentListener;
 import com.oracle.truffle.api.source.Source;
-import com.oracle.truffle.api.vm.*;
-import com.oracle.truffle.sl.nodes.instrument.*;
-import com.oracle.truffle.sl.nodes.local.*;
-import com.oracle.truffle.sl.test.*;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import com.oracle.truffle.sl.nodes.instrument.SLStandardASTProber;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode;
+import com.oracle.truffle.sl.test.SLTestRunner;
 import com.oracle.truffle.sl.test.instrument.SLInstrumentTestRunner.InstrumentTestCase;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.nio.file.FileSystems;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.internal.TextListener;
+import org.junit.runner.Description;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Result;
+import org.junit.runner.manipulation.Filter;
+import org.junit.runner.manipulation.NoTestsRemainException;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.InitializationError;
 
 /**
  * This class builds and executes the tests for instrumenting SL. Although much of this class is
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestSuite.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLInstrumentTestSuite.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,10 @@
  */
 package com.oracle.truffle.sl.test.instrument;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE)
--- a/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLSimpleInstrumentTestSuite.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.test/src/com/oracle/truffle/sl/test/instrument/SLSimpleInstrumentTestSuite.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,8 +40,8 @@
  */
 package com.oracle.truffle.sl.test.instrument;
 
-import org.junit.*;
-import org.junit.runner.*;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
 @RunWith(SLInstrumentTestRunner.class)
 @SLInstrumentTestSuite({"truffle/com.oracle.truffle.sl.test/tests_instrumentation", "tests_instrumentation"})
--- a/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,15 +40,16 @@
  */
 package com.oracle.truffle.sl.tools.debug;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.QuitException;
 import com.oracle.truffle.api.source.Source;
-import com.oracle.truffle.api.vm.*;
-import com.oracle.truffle.tools.debug.shell.*;
-import com.oracle.truffle.tools.debug.shell.client.*;
-import com.oracle.truffle.tools.debug.shell.server.*;
+import com.oracle.truffle.api.vm.PolyglotEngine;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import com.oracle.truffle.tools.debug.shell.client.SimpleREPLClient;
+import com.oracle.truffle.tools.debug.shell.server.REPLHandler;
+import com.oracle.truffle.tools.debug.shell.server.REPLServerContext;
+import java.io.File;
+import java.util.ArrayList;
 
 /**
  * Instantiation of the "server handler" part of the "REPL*" debugger for the simple language.
--- a/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLServer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLServer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -44,18 +44,23 @@
 import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.debug.ExecutionEvent;
 import com.oracle.truffle.api.debug.SuspendedEvent;
-
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.vm.*;
+import com.oracle.truffle.api.instrument.QuitException;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.vm.EventConsumer;
+import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.api.vm.PolyglotEngine.Language;
-import com.oracle.truffle.sl.*;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.nodes.instrument.SLDefaultVisualizer;
-import com.oracle.truffle.tools.debug.shell.*;
-import com.oracle.truffle.tools.debug.shell.client.*;
-import com.oracle.truffle.tools.debug.shell.server.*;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import com.oracle.truffle.tools.debug.shell.REPLServer;
+import com.oracle.truffle.tools.debug.shell.client.SimpleREPLClient;
+import com.oracle.truffle.tools.debug.shell.server.REPLHandler;
+import com.oracle.truffle.tools.debug.shell.server.REPLServerContext;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Instantiation of the "server" side of the "REPL*" debugger for the Simple language.
--- a/truffle/com.oracle.truffle.sl/.checkstyle_checks.xml	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/.checkstyle_checks.xml	Mon Sep 21 11:21:03 2015 +0200
@@ -11,6 +11,10 @@
 <module name="Checker">
   <property name="severity" value="error"/>
   <module name="TreeWalker">
+    <module name="AvoidStarImport">
+      <property name="allowClassImports" value="false"/>
+      <property name="allowStaticMemberImports" value="false"/>
+    </module>
     <property name="tabWidth" value="4"/>
     <module name="FileContentsHolder"/>
     <module name="JavadocStyle">
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,16 @@
  */
 package com.oracle.truffle.sl;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameInstanceVisitor;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * SL does not need a sophisticated error checking and reporting mechanism, so all unexpected
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,24 +40,69 @@
  */
 package com.oracle.truffle.sl;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.debug.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.vm.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.TruffleLanguage.Env;
+import com.oracle.truffle.api.debug.DebugSupportException;
+import com.oracle.truffle.api.debug.DebugSupportProvider;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.frame.MaterializedFrame;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener;
+import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ToolSupportProvider;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.nodes.GraphPrintVisitor;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.api.vm.PolyglotEngine.Value;
-import com.oracle.truffle.sl.builtins.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.call.*;
-import com.oracle.truffle.sl.nodes.controlflow.*;
-import com.oracle.truffle.sl.nodes.expression.*;
-import com.oracle.truffle.sl.nodes.instrument.*;
-import com.oracle.truffle.sl.nodes.local.*;
-import com.oracle.truffle.sl.parser.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.sl.builtins.SLBuiltinNode;
+import com.oracle.truffle.sl.builtins.SLDefineFunctionBuiltin;
+import com.oracle.truffle.sl.builtins.SLNanoTimeBuiltin;
+import com.oracle.truffle.sl.builtins.SLPrintlnBuiltin;
+import com.oracle.truffle.sl.builtins.SLReadlnBuiltin;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.nodes.SLTypes;
+import com.oracle.truffle.sl.nodes.call.SLDispatchNode;
+import com.oracle.truffle.sl.nodes.call.SLInvokeNode;
+import com.oracle.truffle.sl.nodes.call.SLUndefinedFunctionException;
+import com.oracle.truffle.sl.nodes.controlflow.SLBlockNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLBreakNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLContinueNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLIfNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLReturnNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLWhileNode;
+import com.oracle.truffle.sl.nodes.expression.SLAddNode;
+import com.oracle.truffle.sl.nodes.expression.SLBigIntegerLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLDivNode;
+import com.oracle.truffle.sl.nodes.expression.SLEqualNode;
+import com.oracle.truffle.sl.nodes.expression.SLFunctionLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLLessOrEqualNode;
+import com.oracle.truffle.sl.nodes.expression.SLLessThanNode;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalAndNode;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalOrNode;
+import com.oracle.truffle.sl.nodes.expression.SLMulNode;
+import com.oracle.truffle.sl.nodes.expression.SLStringLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLSubNode;
+import com.oracle.truffle.sl.nodes.instrument.SLDefaultVisualizer;
+import com.oracle.truffle.sl.nodes.instrument.SLStandardASTProber;
+import com.oracle.truffle.sl.nodes.local.SLReadLocalVariableNode;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode;
+import com.oracle.truffle.sl.parser.Parser;
+import com.oracle.truffle.sl.parser.SLNodeFactory;
+import com.oracle.truffle.sl.parser.Scanner;
+import com.oracle.truffle.sl.runtime.SLContext;
+import com.oracle.truffle.sl.runtime.SLFunction;
+import com.oracle.truffle.sl.runtime.SLFunctionRegistry;
+import com.oracle.truffle.sl.runtime.SLNull;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertFalseBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertFalseBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,12 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLAssertionError;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * Asserts a given value to be <code>false</code> and throws an {@link AssertionError} if the value
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertTrueBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertTrueBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,12 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLAssertionError;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * Asserts a given value to be <code>true</code> and throws an {@link AssertionError} if the value
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLBuiltinNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLBuiltinNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,13 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.GenerateNodeFactory;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.runtime.SLContext;
+import com.oracle.truffle.sl.runtime.SLFunctionRegistry;
 
 /**
  * Base class for all builtin functions. It contains the Truffle DSL annotation {@link NodeChild}
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLDefineFunctionBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLDefineFunctionBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -41,11 +41,12 @@
 package com.oracle.truffle.sl.builtins;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.parser.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.parser.Parser;
+import com.oracle.truffle.sl.runtime.SLContext;
 
 /**
  * Builtin function to define (or redefine) functions. The provided source code is parsed the same
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLHelloEqualsWorldBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLHelloEqualsWorldBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -41,12 +41,14 @@
 package com.oracle.truffle.sl.builtins;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
 import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * This builtin sets the variable named "hello" in the caller frame to the string "world".
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNanoTimeBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNanoTimeBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,9 +40,9 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Builtin function that returns the value of a high-resolution time, in nanoseconds.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNewObjectBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNewObjectBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,9 +40,9 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Built-in function to create a new object. Objects in SL are simply made up of name/value pairs.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLPrintlnBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLPrintlnBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,12 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import java.io.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.runtime.SLContext;
+import java.io.PrintWriter;
 
 /**
  * Builtin function to write a value to the {@link SLContext#getOutput() standard output}. The
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLReadlnBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLReadlnBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,14 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import java.io.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLException;
+import com.oracle.truffle.sl.runtime.SLContext;
+import java.io.BufferedReader;
+import java.io.IOException;
 
 /**
  * Builtin function that reads a String from the {@link SLContext#getInput() standard input}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,20 @@
  */
 package com.oracle.truffle.sl.builtins;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameInstance;
 import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.frame.FrameInstanceVisitor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Returns a string representation of the current stack. This includes the {@link CallTarget}s and
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLBinaryNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLBinaryNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,8 +40,9 @@
  */
 package com.oracle.truffle.sl.nodes;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeChildren;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Utility base class for operations that take two arguments (per convention called "left" and
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLExpressionNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLExpressionNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,14 @@
  */
 package com.oracle.truffle.sl.nodes;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.dsl.TypeSystemReference;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.instrument.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.instrument.SLExpressionWrapperNode;
+import com.oracle.truffle.sl.runtime.SLFunction;
 
 /**
  * Base class for all SL nodes that produce a value and therefore benefit from type specialization.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLRootNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLRootNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -41,13 +41,15 @@
 package com.oracle.truffle.sl.nodes;
 
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.sl.SLLanguage;
-import com.oracle.truffle.sl.builtins.*;
-import com.oracle.truffle.sl.nodes.controlflow.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.sl.builtins.SLBuiltinNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLFunctionBodyNode;
+import com.oracle.truffle.sl.runtime.SLContext;
 
 /**
  * The root of all SL execution trees. It is a Truffle requirement that the tree root extends the
@@ -75,6 +77,7 @@
 
     @Override
     public Object execute(VirtualFrame frame) {
+        assert SLLanguage.INSTANCE.findContext0(SLLanguage.INSTANCE.createFindContextNode0()) != null;
         return bodyNode.executeGeneric(frame);
     }
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLStatementNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLStatementNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes;
 
-import java.io.*;
-
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.instrument.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.instrument.SLStatementWrapperNode;
+import java.io.File;
 
 /**
  * The base class of all Truffle nodes for SL. All nodes (even expressions) can be used as
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,16 @@
  */
 package com.oracle.truffle.sl.nodes;
 
-import java.math.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.dsl.internal.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.TypeCast;
+import com.oracle.truffle.api.dsl.TypeCheck;
+import com.oracle.truffle.api.dsl.TypeSystem;
+import com.oracle.truffle.api.dsl.internal.DSLOptions;
+import com.oracle.truffle.sl.SLLanguage;
+import com.oracle.truffle.sl.runtime.SLFunction;
+import com.oracle.truffle.sl.runtime.SLNull;
+import java.math.BigInteger;
 
 /**
  * The type system of SL, as explained in {@link SLLanguage}. Based on the {@link TypeSystem}
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyCacheNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyCacheNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -41,10 +41,15 @@
 package com.oracle.truffle.sl.nodes.access;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.LongLocation;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 public abstract class SLReadPropertyCacheNode extends Node {
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,14 @@
  */
 package com.oracle.truffle.sl.nodes.access;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.ConditionProfile;
+import com.oracle.truffle.sl.SLException;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.runtime.SLContext;
 
 /**
  * The node for accessing a property of an object. When executed, this node first evaluates the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyCacheNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyCacheNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,18 @@
  */
 package com.oracle.truffle.sl.nodes.access;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.Assumption;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.object.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.FinalLocationException;
+import com.oracle.truffle.api.object.IncompatibleLocationException;
+import com.oracle.truffle.api.object.Location;
+import com.oracle.truffle.api.object.Property;
+import com.oracle.truffle.api.object.Shape;
 
 public abstract class SLWritePropertyCacheNode extends Node {
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,14 @@
  */
 package com.oracle.truffle.sl.nodes.access;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.ConditionProfile;
+import com.oracle.truffle.sl.SLException;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.runtime.SLContext;
 
 /**
  * The node for setting a property of an object. When executed, this node first evaluates the value
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLDispatchNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLDispatchNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,14 @@
  */
 package com.oracle.truffle.sl.nodes.call;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.DirectCallNode;
+import com.oracle.truffle.api.nodes.IndirectCallNode;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.sl.runtime.SLFunction;
 
 public abstract class SLDispatchNode extends Node {
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLInvokeNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLInvokeNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,18 +40,21 @@
  */
 package com.oracle.truffle.sl.nodes.call;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.dsl.NodeChild;
 import com.oracle.truffle.api.dsl.NodeChildren;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.nodes.ExplodeLoop;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.runtime.SLContext;
+import com.oracle.truffle.sl.runtime.SLFunction;
 
 /**
  * The node for function invocation in SL. Since SL has first class functions, the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBlockNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBlockNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerAsserts;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.ExplodeLoop;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 /**
  * A statement node that just executes a list of other statements.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBreakException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBreakException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,7 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
 
 /**
  * Exception thrown by the {@link SLBreakNode break statement} and caught by the {@link SLWhileNode
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBreakNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLBreakNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,10 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 /**
  * Implementation of the SL break statement. We need to unwind an unknown number of interpreter
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLContinueException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLContinueException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,7 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
 
 /**
  * Exception thrown by the {@link SLContinueNode continue statement} and caught by the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLContinueNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLContinueNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,10 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 /**
  * Implementation of the SL continue statement. We need to unwind an unknown number of interpreter
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,14 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.BranchProfile;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * The body of a user-defined SL function. This is the node referenced by a {@link SLRootNode} for
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLIfNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLIfNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,17 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.BinaryConditionProfile;
+import com.oracle.truffle.api.utilities.ConditionProfile;
+import com.oracle.truffle.api.utilities.CountingConditionProfile;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 @NodeInfo(shortName = "if", description = "The node implementing a condional statement")
 public final class SLIfNode extends SLStatementNode {
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLRepeatingNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLRepeatingNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,15 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RepeatingNode;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.BranchProfile;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 public final class SLRepeatingNode extends Node implements RepeatingNode {
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLReturnException.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLReturnException.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,7 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.nodes.ControlFlowException;
 
 /**
  * Exception thrown by the {@link SLReturnNode return statement} and caught by the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLReturnNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLReturnNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * Implementation of the SL return statement. We need to unwind an unknown number of interpreter
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLWhileNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLWhileNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.controlflow;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.LoopNode;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 @NodeInfo(shortName = "while", description = "The node implementing a while loop")
 public final class SLWhileNode extends SLStatementNode {
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLAddNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLAddNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,15 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.ExactMath;
+import com.oracle.truffle.api.dsl.ImplicitCast;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import com.oracle.truffle.sl.nodes.SLTypes;
+import java.math.BigInteger;
 
 /**
  * SL node that performs the "+" operation, which performs addition on arbitrary precision numbers,
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLBigIntegerLiteralNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLBigIntegerLiteralNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,11 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import java.math.BigInteger;
 
 /**
  * Constant literal for a arbitrary-precision number that exceeds the range of
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.CompilerDirectives.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import java.math.BigInteger;
 
 /**
  * This class is similar to the extensively documented {@link SLAddNode}. Divisions by 0 throw the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,15 +40,16 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.CompilerDirectives.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import com.oracle.truffle.sl.runtime.SLFunction;
+import com.oracle.truffle.sl.runtime.SLNull;
+import java.math.BigInteger;
 
 /**
  * The {@code ==} operator of SL is defined on all types. Therefore, we need a
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLFunctionLiteralNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLFunctionLiteralNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,18 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLLanguage;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.runtime.SLContext;
+import com.oracle.truffle.sl.runtime.SLFunction;
+import com.oracle.truffle.sl.runtime.SLFunctionRegistry;
 
 /**
  * Constant literal for a {@link SLFunction function} value, created when a function name occurs as
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.CompilerDirectives.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import java.math.BigInteger;
 
 /**
  * This class is similar to the {@link SLLessThanNode}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.CompilerDirectives.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import java.math.BigInteger;
 
 /**
  * This class is similar to the extensively documented {@link SLAddNode}. The only difference: the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalAndNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalAndNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
 
 /**
  * This class declares specializations similar to the extensively documented {@link SLAddNode}. It
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalNotNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalNotNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * Example of a simple unary node that uses type specialization. See {@link SLAddNode} for
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalOrNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLogicalOrNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.ShortCircuit;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
 
 /**
  * This class is similar to the {@link SLLogicalAndNode}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLongLiteralNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLongLiteralNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,11 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * Constant literal for a primitive {@code long} value. The unboxed value can be returned when the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLMulNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLMulNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.ExactMath;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import java.math.BigInteger;
 
 /**
  * This class is similar to the extensively documented {@link SLAddNode}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLParenExpressionNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLParenExpressionNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,11 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * A {@link SLExpressionNode} that represents a parenthesized expression; it simply returns the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLStringLiteralNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLStringLiteralNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,10 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * Constant literal for a String value.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.expression;
 
-import java.math.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.CompilerDirectives.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
+import com.oracle.truffle.api.ExactMath;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLBinaryNode;
+import java.math.BigInteger;
 
 /**
  * This class is similar to the extensively documented {@link SLAddNode}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/demo/SLAddWithoutSpecializationNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/demo/SLAddWithoutSpecializationNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,14 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.expression.demo;
 
-import java.math.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.expression.*;
+import com.oracle.truffle.api.ExactMath;
+import com.oracle.truffle.api.dsl.UnsupportedSpecializationException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.expression.SLAddNode;
+import java.math.BigInteger;
 
 /**
  * This is an example how the add operation would be implemented without specializations and without
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLASTPrinter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLASTPrinter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,15 @@
  */
 package com.oracle.truffle.sl.nodes.instrument;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.instrument.InstrumentationNode;
+import com.oracle.truffle.api.instrument.impl.DefaultASTPrinter;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeClass;
+import com.oracle.truffle.api.nodes.NodeFieldAccessor;
 import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
+import com.oracle.truffle.api.nodes.NodeUtil;
+import java.io.PrintWriter;
+import java.util.ArrayList;
 
 /**
  * SLASTPrinter is used to print for SL's internal Truffle AST. This is used by
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLDefaultVisualizer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLDefaultVisualizer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,15 @@
  */
 package com.oracle.truffle.sl.nodes.instrument;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.instrument.ASTPrinter;
+import com.oracle.truffle.api.instrument.impl.DefaultVisualizer;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * SLDefaultVisualizer provides methods to get the names of SL's internal Truffle AST nodes.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLExpressionWrapperNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLExpressionWrapperNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,19 @@
  */
 package com.oracle.truffle.sl.nodes.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.UnexpectedResultException;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLTypesGen;
+import com.oracle.truffle.sl.runtime.SLFunction;
 
 /**
  * A Truffle node that can be inserted into a Simple AST (assumed not to have executed yet) to
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStandardASTProber.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStandardASTProber.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,13 +40,18 @@
  */
 package com.oracle.truffle.sl.nodes.instrument;
 
-import static com.oracle.truffle.api.instrument.StandardSyntaxTag.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.controlflow.*;
-import com.oracle.truffle.sl.nodes.local.*;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.InstrumentationNode;
+import com.oracle.truffle.api.instrument.Probe;
+import static com.oracle.truffle.api.instrument.StandardSyntaxTag.ASSIGNMENT;
+import static com.oracle.truffle.api.instrument.StandardSyntaxTag.START_LOOP;
+import static com.oracle.truffle.api.instrument.StandardSyntaxTag.STATEMENT;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeVisitor;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLWhileNode;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode;
 
 /**
  * A visitor which traverses a completely parsed Simple AST (presumed not yet executed) and enables
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStatementWrapperNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/instrument/SLStatementWrapperNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,16 @@
  */
 package com.oracle.truffle.sl.nodes.instrument;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
 
 /**
  * A Truffle node that can be inserted into a Simple AST (assumed not to have executed yet) to
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLReadArgumentNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLReadArgumentNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,12 +40,12 @@
  */
 package com.oracle.truffle.sl.nodes.local;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.api.utilities.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.parser.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.api.utilities.BranchProfile;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.parser.SLNodeFactory;
+import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
  * Reads a function argument. Arguments are passed in as an object array.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLReadLocalVariableNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLReadLocalVariableNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,13 @@
  */
 package com.oracle.truffle.sl.nodes.local;
 
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotTypeException;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * Node to read a local variable from a function's {@link VirtualFrame frame}. The Truffle frame API
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLWriteLocalVariableNode.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/local/SLWriteLocalVariableNode.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,11 +40,16 @@
  */
 package com.oracle.truffle.sl.nodes.local;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.dsl.Fallback;
+import com.oracle.truffle.api.dsl.NodeChild;
+import com.oracle.truffle.api.dsl.NodeField;
+import com.oracle.truffle.api.dsl.Specialization;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.FrameSlotKind;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
 
 /**
  * Node to write a local variable to a function's {@link VirtualFrame frame}. The Truffle frame API
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java	Mon Sep 21 11:21:03 2015 +0200
@@ -43,12 +43,13 @@
 
 package com.oracle.truffle.sl.parser;
 
-import java.util.*;
-
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.sl.SLException;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
+import com.oracle.truffle.sl.runtime.SLContext;
+import java.util.ArrayList;
+import java.util.List;
 
 // Checkstyle: stop
 // @formatter:off
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,19 +40,51 @@
  */
 package com.oracle.truffle.sl.parser;
 
-import java.math.*;
-import java.util.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.access.*;
-import com.oracle.truffle.sl.nodes.call.*;
-import com.oracle.truffle.sl.nodes.controlflow.*;
-import com.oracle.truffle.sl.nodes.expression.*;
-import com.oracle.truffle.sl.nodes.local.*;
-import com.oracle.truffle.sl.runtime.*;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.nodes.SLStatementNode;
+import com.oracle.truffle.sl.nodes.access.SLReadPropertyNode;
+import com.oracle.truffle.sl.nodes.access.SLWritePropertyNode;
+import com.oracle.truffle.sl.nodes.call.SLInvokeNode;
+import com.oracle.truffle.sl.nodes.call.SLInvokeNodeGen;
+import com.oracle.truffle.sl.nodes.controlflow.SLBlockNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLBreakNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLContinueNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLFunctionBodyNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLIfNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLReturnNode;
+import com.oracle.truffle.sl.nodes.controlflow.SLWhileNode;
+import com.oracle.truffle.sl.nodes.expression.SLAddNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLBigIntegerLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLDivNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLEqualNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLFunctionLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLLessOrEqualNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLLessThanNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalAndNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalNotNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLLogicalOrNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLLongLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLMulNodeGen;
+import com.oracle.truffle.sl.nodes.expression.SLParenExpressionNode;
+import com.oracle.truffle.sl.nodes.expression.SLStringLiteralNode;
+import com.oracle.truffle.sl.nodes.expression.SLSubNodeGen;
+import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode;
+import com.oracle.truffle.sl.nodes.local.SLReadLocalVariableNode;
+import com.oracle.truffle.sl.nodes.local.SLReadLocalVariableNodeGen;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNode;
+import com.oracle.truffle.sl.nodes.local.SLWriteLocalVariableNodeGen;
+import com.oracle.truffle.sl.runtime.SLContext;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Helper class used by the SL {@link Parser} to create nodes. The code is factored out of the
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Scanner.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Scanner.java	Mon Sep 21 11:21:03 2015 +0200
@@ -43,8 +43,11 @@
 
 package com.oracle.truffle.sl.parser;
 
-import java.io.*;
-import java.util.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.util.HashMap;
+import java.util.Map;
 
 // Checkstyle: stop
 // @formatter:off
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,19 +40,34 @@
  */
 package com.oracle.truffle.sl.runtime;
 
-import java.io.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.dsl.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.object.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.ExecutionContext;
+import com.oracle.truffle.api.dsl.NodeFactory;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.object.DynamicObject;
+import com.oracle.truffle.api.object.Layout;
+import com.oracle.truffle.api.object.Shape;
+import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.sl.SLLanguage;
-import com.oracle.truffle.sl.builtins.*;
-import com.oracle.truffle.sl.nodes.*;
-import com.oracle.truffle.sl.nodes.local.*;
-import com.oracle.truffle.sl.parser.*;
+import com.oracle.truffle.sl.builtins.SLAssertFalseBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLAssertTrueBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLBuiltinNode;
+import com.oracle.truffle.sl.builtins.SLDefineFunctionBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLHelloEqualsWorldBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLNanoTimeBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLNewObjectBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLPrintlnBuiltin;
+import com.oracle.truffle.sl.builtins.SLPrintlnBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLReadlnBuiltin;
+import com.oracle.truffle.sl.builtins.SLReadlnBuiltinFactory;
+import com.oracle.truffle.sl.builtins.SLStackTraceBuiltinFactory;
+import com.oracle.truffle.sl.nodes.SLExpressionNode;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode;
+import com.oracle.truffle.sl.parser.Parser;
+import com.oracle.truffle.sl.parser.SLNodeFactory;
+import java.io.BufferedReader;
+import java.io.PrintWriter;
 import java.math.BigInteger;
 
 /**
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,9 +40,11 @@
  */
 package com.oracle.truffle.sl.runtime;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.interop.*;
-import com.oracle.truffle.api.utilities.*;
+import com.oracle.truffle.api.Assumption;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.interop.ForeignAccess;
+import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.utilities.CyclicAssumption;
 
 /**
  * Represents a SL function. On the Truffle level, a callable element is represented by a
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,7 +40,8 @@
  */
 package com.oracle.truffle.sl.runtime;
 
-import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionRegistry.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionRegistry.java	Mon Sep 21 11:21:03 2015 +0200
@@ -40,10 +40,15 @@
  */
 package com.oracle.truffle.sl.runtime;
 
-import java.util.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.sl.nodes.*;
+import com.oracle.truffle.api.RootCallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.sl.nodes.SLRootNode;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Manages the mapping from function names to {@link SLFunction function objects}.
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLObjectType.java	Mon Sep 21 11:21:03 2015 +0200
@@ -111,7 +111,7 @@
 
     @Override
     public CallTarget accessInvoke(int argumentsLength) {
-        throw new UnsupportedOperationException();
+        return null;
     }
 
     @Override
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/EagerStackTraceDecorator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/EagerStackTraceDecorator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.tck;
 
-import org.junit.runner.notification.*;
+import org.junit.runner.notification.Failure;
 
 class EagerStackTraceDecorator extends TruffleJUnitRunListenerDecorator {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/GCAfterTestDecorator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/GCAfterTestDecorator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.tck;
 
-import org.junit.runner.*;
+import org.junit.runner.Description;
 
 final class GCAfterTestDecorator extends TruffleJUnitRunListenerDecorator {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TimingDecorator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TimingDecorator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,7 +24,7 @@
  */
 package com.oracle.truffle.tck;
 
-import org.junit.runner.*;
+import org.junit.runner.Description;
 
 /**
  * Timing support for JUnit test runs.
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitCore.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitCore.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,19 +24,26 @@
  */
 package com.oracle.truffle.tck;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
 import java.lang.reflect.Modifier;
 import java.nio.charset.Charset;
-import java.nio.file.*;
-import java.util.*;
-
-import junit.runner.*;
-
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.notification.*;
-import org.junit.runners.*;
-import org.junit.runners.model.*;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.List;
+import junit.runner.Version;
+import org.junit.internal.JUnitSystem;
+import org.junit.internal.RealSystem;
+import org.junit.runner.Description;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Request;
+import org.junit.runner.Result;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.Failure;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.RunnerScheduler;
 
 final class TruffleJUnitCore {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitRunListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitRunListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,11 @@
  */
 package com.oracle.truffle.tck;
 
-import java.io.*;
-
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.notification.*;
+import java.io.PrintStream;
+import org.junit.internal.AssumptionViolatedException;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
 
 interface TruffleJUnitRunListener {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitRunListenerDecorator.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleJUnitRunListenerDecorator.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,10 @@
  */
 package com.oracle.truffle.tck;
 
-import java.io.*;
-
-import org.junit.runner.*;
-import org.junit.runner.notification.*;
+import java.io.PrintStream;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
 
 class TruffleJUnitRunListenerDecorator implements TruffleJUnitRunListener {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleTCK.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleTCK.java	Mon Sep 21 11:21:03 2015 +0200
@@ -30,9 +30,12 @@
 import com.oracle.truffle.api.vm.PolyglotEngine;
 import java.io.IOException;
 import java.util.Random;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.fail;
 import org.junit.Test;
 
 /**
@@ -41,7 +44,6 @@
  * include in your test suite.
  */
 public abstract class TruffleTCK {
-    private static final Logger LOG = Logger.getLogger(TruffleTCK.class.getName());
     private static final Random RANDOM = new Random();
     private PolyglotEngine tckVM;
 
@@ -135,18 +137,7 @@
      * @return name of globally exported symbol
      */
     protected String identity() {
-        final long introduced = 1441894042844L;
-        long wait = (System.currentTimeMillis() - introduced) / 3600;
-        if (wait < 100) {
-            wait = 100;
-        }
-        LOG.log(Level.SEVERE, "identity() method not overriden. Waiting for {0} ms", wait);
-        try {
-            Thread.sleep(wait);
-        } catch (InterruptedException ex) {
-            LOG.log(Level.SEVERE, null, ex);
-        }
-        return null;
+        throw new UnsupportedOperationException("identity() method not implemented");
     }
 
     /**
@@ -193,7 +184,7 @@
      * @return name of a function that returns such compound object
      */
     protected String compoundObject() {
-        return null;
+        throw new UnsupportedOperationException("compoundObject() method not implemented");
     }
 
     private PolyglotEngine vm() throws Exception {
@@ -222,7 +213,7 @@
 
     @Test
     public void testFortyTwoWithCompoundObject() throws Exception {
-        CompoundObject obj = findCompoundSymbol("testFortyTwoWithCompoundObject");
+        CompoundObject obj = findCompoundSymbol();
         if (obj == null) {
             return;
         }
@@ -241,7 +232,7 @@
 
     @Test
     public void testNullInCompoundObject() throws Exception {
-        CompoundObject obj = findCompoundSymbol("testNullInCompoundObject");
+        CompoundObject obj = findCompoundSymbol();
         if (obj == null) {
             return;
         }
@@ -320,7 +311,7 @@
         int a = RANDOM.nextInt(100);
         int b = RANDOM.nextInt(100);
 
-        CompoundObject obj = findCompoundSymbol("testPlusWithIntsOnCompoundObject");
+        CompoundObject obj = findCompoundSymbol();
         if (obj == null) {
             return;
         }
@@ -570,24 +561,17 @@
         return s;
     }
 
-    private CompoundObject findCompoundSymbol(String name) throws Exception {
+    private CompoundObject findCompoundSymbol() throws Exception {
         final String compoundObjectName = compoundObject();
-        if (compoundObjectName == null) {
-            final long introduced = 1441616302340L;
-            long wait = (System.currentTimeMillis() - introduced) / 36000;
-            if (wait < 100) {
-                wait = 100;
-            }
-            LOG.log(Level.SEVERE, "compoundObject() method not overriden! Skipping {1} test for now. But sleeping for {0} ms.", new Object[]{wait, name});
-            Thread.sleep(wait);
-            return null;
-        }
         PolyglotEngine.Value s = vm().findGlobalSymbol(compoundObjectName);
         assert s != null : "Symbol " + compoundObjectName + " is not found!";
-        CompoundObject obj = s.invoke(null).as(CompoundObject.class);
+        final PolyglotEngine.Value value = s.invoke(null);
+        CompoundObject obj = value.as(CompoundObject.class);
+        assertNotNull("Compound object for " + value + " found", obj);
         int traverse = RANDOM.nextInt(10);
-        while (traverse-- >= 0) {
+        for (int i = 1; i <= traverse; i++) {
             obj = obj.returnsThis();
+            assertNotNull("Remains non-null even after " + i + " iteration", obj);
         }
         return obj;
     }
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleTextListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleTextListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,13 @@
  */
 package com.oracle.truffle.tck;
 
-import java.io.*;
-
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.notification.*;
+import java.io.PrintStream;
+import org.junit.internal.JUnitSystem;
+import org.junit.internal.TextListener;
+import org.junit.runner.Description;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
+import org.junit.runner.notification.RunListener;
 
 class TruffleTextListener implements TruffleJUnitRunListener {
 
--- a/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleVerboseTextListener.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tck/src/com/oracle/truffle/tck/TruffleVerboseTextListener.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,10 @@
  */
 package com.oracle.truffle.tck;
 
-import java.io.*;
-
-import org.junit.internal.*;
-import org.junit.runner.*;
-import org.junit.runner.notification.*;
+import java.io.PrintStream;
+import org.junit.internal.JUnitSystem;
+import org.junit.runner.Description;
+import org.junit.runner.notification.Failure;
 
 class TruffleVerboseTextListener extends TruffleTextListener {
 
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/REPLMessage.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/REPLMessage.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,9 +24,11 @@
  */
 package com.oracle.truffle.tools.debug.shell;
 
-import java.io.*;
-import java.util.*;
+import java.io.PrintStream;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
 
 /**
  * A message for communication between a Read-Eval-Print-Loop server associated with a language
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/REPLServer.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/REPLServer.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,7 +25,8 @@
 package com.oracle.truffle.tools.debug.shell;
 
 import com.oracle.truffle.api.debug.Breakpoint;
-import java.util.*;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 /**
  * The server side of a simple message-based protocol for a possibly remote language
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLClientContext.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLClientContext.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,9 @@
  */
 package com.oracle.truffle.tools.debug.shell.client;
 
-import java.util.*;
-
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.tools.debug.shell.REPLServer;
+import java.util.List;
 
 /**
  * Client context for interaction with a program halted by the {@link REPLServer}.
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLRemoteCommand.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLRemoteCommand.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,11 @@
  */
 package com.oracle.truffle.tools.debug.shell.client;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
 
 // TODO (mlvdv)  write a real command line parser
 public abstract class REPLRemoteCommand extends REPLCommand {
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLineLocation.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/REPLineLocation.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,10 +24,9 @@
  */
 package com.oracle.truffle.tools.debug.shell.client;
 
-import java.io.*;
-
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import java.io.IOException;
 
 final class REPLineLocation {
 
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/SimpleREPLClient.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/client/SimpleREPLClient.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,13 +24,22 @@
  */
 package com.oracle.truffle.tools.debug.shell.client;
 
-import java.io.*;
-import java.util.*;
-
-import jline.console.*;
-
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.tools.debug.shell.REPLClient;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import com.oracle.truffle.tools.debug.shell.REPLServer;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+import jline.console.ConsoleReader;
 
 /**
  * A very simple line-oriented, language-agnostic debugging client shell: the first step toward a
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/FrameDebugDescription.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/FrameDebugDescription.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,8 +24,9 @@
  */
 package com.oracle.truffle.tools.debug.shell.server;
 
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.nodes.Node;
 
 public final class FrameDebugDescription {
     private final int index;
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Mon Sep 21 11:21:03 2015 +0200
@@ -25,14 +25,22 @@
 package com.oracle.truffle.tools.debug.shell.server;
 
 import com.oracle.truffle.api.debug.Breakpoint;
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameDescriptor;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.instrument.ASTPrinter;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.QuitException;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.Visualizer;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Server-side REPL implementation of an {@linkplain REPLMessage "op"}.
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLServerContext.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLServerContext.java	Mon Sep 21 11:21:03 2015 +0200
@@ -27,13 +27,14 @@
 import com.oracle.truffle.api.debug.Breakpoint;
 import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.debug.SuspendedEvent;
-import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.instrument.Visualizer;
 import com.oracle.truffle.api.instrument.impl.DefaultVisualizer;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.vm.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.api.vm.PolyglotEngine.Language;
-import com.oracle.truffle.tools.debug.shell.*;
+import com.oracle.truffle.tools.debug.shell.REPLMessage;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,14 +24,17 @@
  */
 package com.oracle.truffle.tools.test;
 
-import static com.oracle.truffle.tools.test.TestNodes.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.tools.*;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.tools.CoverageTracker;
+import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 public class CoverageTrackerTest {
 
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/LineToProbesMapTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/LineToProbesMapTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,15 +24,17 @@
  */
 package com.oracle.truffle.tools.test;
 
-import static com.oracle.truffle.tools.test.TestNodes.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
-import com.oracle.truffle.tools.*;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.tools.LineToProbesMap;
+import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode;
+import static com.oracle.truffle.tools.test.TestNodes.expr13Line1;
+import static com.oracle.truffle.tools.test.TestNodes.expr13Line2;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import org.junit.Test;
 
 public class LineToProbesMapTest {
 
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/NodeExecCounterTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/NodeExecCounterTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,18 +24,21 @@
  */
 package com.oracle.truffle.tools.test;
 
-import static com.oracle.truffle.tools.test.TestNodes.*;
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.tools.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.tools.NodeExecCounter;
 import com.oracle.truffle.tools.NodeExecCounter.NodeExecutionCount;
 import com.oracle.truffle.tools.test.TestNodes.TestAddNode;
 import com.oracle.truffle.tools.test.TestNodes.TestValueNode;
+import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestCallTarget;
+import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import org.junit.Test;
 
 public class NodeExecCounterTest {
 
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/TestNodes.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/TestNodes.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,12 +24,21 @@
  */
 package com.oracle.truffle.tools.test;
 
-import com.oracle.truffle.api.*;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.Truffle;
+import com.oracle.truffle.api.TruffleLanguage;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.KillException;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeNode;
 import com.oracle.truffle.api.instrument.ProbeNode.WrapperNode;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.nodes.NodeCost;
+import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
 
 /**
  * Nodes and an {@linkplain CallTarget executable ASTs} for testing.
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/TruffleToolTest.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/TruffleToolTest.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,11 +24,10 @@
  */
 package com.oracle.truffle.tools.test;
 
-import static org.junit.Assert.*;
-
-import org.junit.*;
-
-import com.oracle.truffle.api.instrument.*;
+import com.oracle.truffle.api.instrument.InstrumentationTool;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
 
 /**
  * Test the basic life cycle properties shared by all instances of {@link InstrumentationTool}.
--- a/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/CoverageTracker.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/CoverageTracker.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,14 +24,27 @@
  */
 package com.oracle.truffle.tools;
 
-import java.io.*;
-import java.util.*;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.InstrumentationTool;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeListener;
+import com.oracle.truffle.api.instrument.SimpleInstrumentListener;
+import com.oracle.truffle.api.instrument.StandardSyntaxTag;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultSimpleInstrumentListener;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
-import com.oracle.truffle.api.source.*;
+import java.util.TreeSet;
 
 /**
  * An {@link InstrumentationTool} that counts interpreter <em>execution calls</em> to AST nodes that
--- a/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/LineToProbesMap.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/LineToProbesMap.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,12 +24,19 @@
  */
 package com.oracle.truffle.tools;
 
-import java.io.*;
-import java.util.*;
-
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.source.*;
+import com.oracle.truffle.api.instrument.InstrumentationTool;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.source.LineLocation;
+import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * An {@link InstrumentationTool} that builds a map of every {@link Probe} attached to some AST,
--- a/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/NodeExecCounter.java	Mon Sep 21 10:55:36 2015 +0200
+++ b/truffle/com.oracle.truffle.tools/src/com/oracle/truffle/tools/NodeExecCounter.java	Mon Sep 21 11:21:03 2015 +0200
@@ -24,16 +24,31 @@
  */
 package com.oracle.truffle.tools;
 
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.atomic.*;
-
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.frame.*;
-import com.oracle.truffle.api.instrument.*;
-import com.oracle.truffle.api.instrument.impl.*;
-import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.frame.VirtualFrame;
+import com.oracle.truffle.api.instrument.ASTProber;
+import com.oracle.truffle.api.instrument.Instrument;
+import com.oracle.truffle.api.instrument.InstrumentationTool;
+import com.oracle.truffle.api.instrument.Probe;
+import com.oracle.truffle.api.instrument.ProbeException;
+import com.oracle.truffle.api.instrument.ProbeFailure;
+import com.oracle.truffle.api.instrument.ProbeListener;
+import com.oracle.truffle.api.instrument.StandardInstrumentListener;
+import com.oracle.truffle.api.instrument.SyntaxTag;
+import com.oracle.truffle.api.instrument.impl.DefaultProbeListener;
+import com.oracle.truffle.api.instrument.impl.DefaultStandardInstrumentListener;
+import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.Node.Child;
+import com.oracle.truffle.api.nodes.NodeVisitor;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * An {@link InstrumentationTool} that counts interpreter <em>execution calls</em> to AST nodes,