diff --git a/.idea/libraries/dx_android.xml b/.idea/libraries/dx_android.xml
new file mode 100644
index 00000000000..fc5f4ca13aa
--- /dev/null
+++ b/.idea/libraries/dx_android.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/compiler/tests/compiler-tests.iml b/compiler/tests/compiler-tests.iml
index d3c95e7a65d..c20ff6b17a1 100644
--- a/compiler/tests/compiler-tests.iml
+++ b/compiler/tests/compiler-tests.iml
@@ -14,6 +14,7 @@
+
diff --git a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java
index 2d2fe3b8b9a..a2e49b517e7 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java
@@ -184,6 +184,11 @@ public abstract class CodegenTestCase extends UsefulTestCase {
protected void blackBox() {
GenerationState state = generateClassesInFileGetState();
+
+ if (DxChecker.RUN_DX_CHECKER) {
+ DxChecker.check(state.getFactory());
+ }
+
GeneratedClassLoader loader = createClassLoader(state.getFactory());
String r;
@@ -224,7 +229,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
r = (String) method.invoke(null);
assertEquals("OK", r);
}
- } catch (NoClassDefFoundError e) {
+ } catch (Error e) {
System.out.println(generateToText());
throw e;
} catch (Throwable e) {
@@ -268,6 +273,11 @@ public abstract class CodegenTestCase extends UsefulTestCase {
protected Class generateNamespaceClass() {
ClassFileFactory state = generateClassesInFile();
+
+ if (DxChecker.RUN_DX_CHECKER) {
+ DxChecker.check(state);
+ }
+
return loadRootNamespaceClass(state);
}
@@ -299,6 +309,11 @@ public abstract class CodegenTestCase extends UsefulTestCase {
@NotNull
protected ClassFileFactory generateClassesInFile() {
GenerationState generationState = generateClassesInFileGetState();
+
+ if (DxChecker.RUN_DX_CHECKER) {
+ DxChecker.check(generationState.getFactory());
+ }
+
return generationState.getFactory();
}
diff --git a/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java b/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java
new file mode 100644
index 00000000000..c37ea880abb
--- /dev/null
+++ b/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.jet.codegen;
+
+import com.android.dx.command.dexer.Main;
+import com.android.dx.dex.cf.CfTranslator;
+import junit.framework.Assert;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Natalia.Ukhorskaya
+ */
+
+public class DxChecker {
+
+ public static final boolean RUN_DX_CHECKER = true;
+ private static final Pattern STACK_TRACE_PATTERN = Pattern.compile("[\\s]+at .*");
+
+ private DxChecker() {
+ }
+
+ public static void check(ClassFileFactory factory) {
+ Main.Arguments arguments = new Main.Arguments();
+ String[] array = new String[1];
+ array[0] = "testArgs";
+ arguments.parse(array);
+
+ for (String file : factory.files()) {
+ try {
+ CfTranslator.translate(file, factory.asBytes(file), arguments.cfOptions, arguments.dexOptions);
+ }
+ catch (Throwable e) {
+ Assert.fail(generateExceptionMessage(e));
+ }
+ }
+ }
+
+ private static String generateExceptionMessage(Throwable e) {
+ StringWriter writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+ try {
+ e.printStackTrace(printWriter);
+ String stackTrace = writer.toString();
+ Matcher matcher = STACK_TRACE_PATTERN.matcher(stackTrace);
+ return matcher.replaceAll("");
+ }
+ finally {
+ printWriter.close();
+ }
+ }
+}
diff --git a/update_dependencies.xml b/update_dependencies.xml
index 6f93ceffbb6..a92ac8769f9 100644
--- a/update_dependencies.xml
+++ b/update_dependencies.xml
@@ -59,6 +59,10 @@
+
+
+
+