1# How to submit a bug report
2
3If you received an error message, please include it and any exceptions.
4
5We commonly need to know what platform you are on:
6 * JDK/JRE version (i.e., ```java -version```)
7 * Operating system (i.e., ```uname -a```)
8
9# How to contribute
10
11We definitely welcome patches and contributions to Conscrypt! Here are some
12guideline and information about how to do so.
13
14## Before getting started
15
16In order to protect both you and ourselves, you will need to sign the
17[Contributor License Agreement](https://cla.developers.google.com/clas).
18
19We follow the [Clang Format](http://clang.llvm.org/docs/ClangFormat.html).
20There is support in most IDEs.
21
22| IDE | Clang Format Plugin |
23| --- | ------------------- |
24| Eclipse | [CppStyle](https://marketplace.eclipse.org/content/cppstyle) |
25| IntelliJ | [ClangFormatIJ](https://plugins.jetbrains.com/plugin/8396) |
26
27If planning on making a large change, feel free to [create an issue on
28GitHub](https://github.com/conscrypt/issues/new) or send an
29email to [conscrypt@googlegroups.com](https://groups.google.com/forum/#!forum/conscrypt) to discuss
30beforehand.
31
32## Proposing changes
33
34Make sure that `./gradlew check` (`gradlew check` on Windows) completes
35successfully without any new warnings (see [Building](BUILDING.md)). Then create a Pull Request
36with your changes. When the changes are accepted, they will be merged or cherry-picked by
37a Conscrypt developer.
38
39## Source Overview
40
41The high-level modules are __Common__, __Android__, __OpenJDK__, and __Platform__.
42
43### Common
44
45This contains the bulk of the code for both Java and C. This isn't an actual module and builds no
46artifacts. Rather, the other modules just point to this directory as source.
47
48### Android
49
50This module provides the `Platform` class for Android and also adds compatibility classes for
51supporting various versions of Android. This generates an `aar` library artifact.
52
53### OpenJDK
54
55These modules provide the `Platform` class for non-Android (OpenJDK-based) systems. It also provides
56a native library loader supports bundling the shared library with the JAR.
57
58### Platform
59This module contains code that is bundled with the Android operating system. The inclusion in the
60build is only to ensure that changes to other modules do not accidentally break the Android build.
61