Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: initial jsii-srcmak work for golang #342

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ async function main() {
.option('java-package', { desc: 'the java package (namespace) to use for all generated types', type: 'string' })
.option('csharp-outdir', { desc: 'C# output directory (requires --csharp-namespace)', type: 'string' })
.option('csharp-namespace', { desc: 'the C# namespace to use for all generated types', type: 'string' })
.option('golang-outdir', { desc: 'golang output directory (requires --golang-module)', type: 'string' })
.option('golang-module', { desc: 'the golang module to use for all generated types', type: 'string' })
.showHelpOnFail(true)
.help();

Expand All @@ -33,6 +35,7 @@ async function main() {
...parsePythonOptions(),
...parseJavaOptions(),
...parseCSharpOptions(),
...parseGoLangOptions(),
});

function parseJsiiOptions() {
Expand Down Expand Up @@ -87,6 +90,21 @@ async function main() {
};
}

function parseGoLangOptions() {
const outdir = argv['golang-outdir'];
const module = argv['golang-module'];
if (!outdir && !module) { return undefined; }
if (!outdir) { throw new Error('--golang-outdir is required'); }
if (!module) { throw new Error('--golang-module is required'); }
return {
// moduleKey: module,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is where you could explicitly set moduleKey for golang but then it breaks other languages

Copy link
Contributor

@ansgarm ansgarm May 14, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @campionfellin, could you elaborate on how it breaks the other languages? I tried it locally and it seemed to still work. I'd think it shouldn't matter to JSII whether there's a random hash or some actual name if the result does not contain that hash/name anyway? Did I miss something?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't quite remember here... I think it had something to do with moduleKey needing to be a random hash for some languages, but needed to be named for go. Perhaps I just couldn't figure it out at the time, but now it sounds like it's working for you!

golang: {
outdir: outdir,
moduleName: module,
},
};
}

function parseDepOption() {
if (argv.dep?.length === 0) { return undefined; }
return {
Expand Down
6 changes: 6 additions & 0 deletions src/compile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ export async function compile(workdir: string, options: Options) {
};
}

if (options.golang) {
targets.go = {
moduleName: options.golang.moduleName,
};
}

await fs.writeFile(path.join(workdir, 'package.json'), JSON.stringify(pkg, undefined, 2));

await exec(compilerModule, args, {
Expand Down
22 changes: 22 additions & 0 deletions src/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ export interface Options {
* @default - C# is not generated
*/
csharp?: CSharpOutputOptions;

/**
* Produces Golang code.
*
* @default - go is not generated
*/
golang?: GoLangOutputOptions;
}

export interface JsiiOutputOptions {
Expand Down Expand Up @@ -99,3 +106,18 @@ export interface CSharpOutputOptions {
*/
namespace: string;
}

export interface GoLangOutputOptions {
/**
* Base root directory.
*/
outdir: string;

/**
* The go module name
*
* This must follow standard Go module name conventions.
* For example, it cannot include an underscore ('_') or be camelCased
*/
moduleName: string;
}
7 changes: 7 additions & 0 deletions src/srcmak.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,12 @@ export async function srcmak(srcdir: string, options: Options = { }) {
const target = path.join(options.csharp.outdir, reldir);
await fs.move(source, target, { overwrite: true });
}

if (options.golang) {
const reldir = options.golang.moduleName.replace(/_/g, '');
const source = path.resolve(path.join(workdir, 'dist/go/', reldir));
const target = path.join(options.golang.outdir, reldir);
await fs.move(source, target, { overwrite: true });
}
});
}
4 changes: 4 additions & 0 deletions src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,8 @@ export function validateOptions(options: Options) {
if (options.csharp?.namespace.includes('-')) {
throw new Error(`C# namespace [${options.csharp.namespace}] may not contain "-"`);
}

if (options.golang?.moduleName.includes('_')) {
throw new Error(`Go module name [${options.golang.moduleName}] may not contain "_"`);
}
}
274 changes: 274 additions & 0 deletions test/__snapshots__/cli.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,280 @@ namespace MyPackage
}
`;

exports[`golang output 1`] = `
Object {
"helloworld/go.mod": "module helloworld/helloworld

go 1.15

require (
github.com/aws/jsii-runtime-go v1.17.1
)
",
"helloworld/helloworld.go": "// helloworld
package helloworld

import (
_jsii_ \\"github.com/aws/jsii-runtime-go\\"
_init_ \\"helloworld/helloworld/jsii\\"
\\"reflect\\"
)

// Class interface
type CalculatorIface interface {
Add(ops OperandsIface) float64
Mul(ops OperandsIface) float64
Sub(ops OperandsIface) float64
}

// A sophisticaed multi-language calculator.
// Struct proxy
type Calculator struct {
}

func NewCalculator() CalculatorIface {
_init_.Initialize()
self := Calculator{}
_jsii_.Create(
\\"helloworld.Calculator\\",
[]interface{}{},
[]_jsii_.FQN{},
[]_jsii_.Override{},
&self,
)
return &self
}

func (c *Calculator) Add(ops OperandsIface) float64 {
var returns float64
_jsii_.Invoke(
c,
\\"add\\",
[]interface{}{ops},
true,
&returns,
map[reflect.Type]reflect.Type{},
)
return returns
}

func (c *Calculator) Mul(ops OperandsIface) float64 {
var returns float64
_jsii_.Invoke(
c,
\\"mul\\",
[]interface{}{ops},
true,
&returns,
map[reflect.Type]reflect.Type{},
)
return returns
}

func (c *Calculator) Sub(ops OperandsIface) float64 {
var returns float64
_jsii_.Invoke(
c,
\\"sub\\",
[]interface{}{ops},
true,
&returns,
map[reflect.Type]reflect.Type{},
)
return returns
}

// OperandsIface is the public interface for the custom type Operands
type OperandsIface interface {
GetLhs() float64
GetRhs() float64
}

// Math operands.
// Struct proxy
type Operands struct {
// Left-hand side operand.
Lhs float64 \`json:\\"lhs\\"\`
// Right-hand side operand.
Rhs float64 \`json:\\"rhs\\"\`
}

func (o *Operands) GetLhs() float64 {
var returns float64
_jsii_.Get(
o,
\\"lhs\\",
&returns,
map[reflect.Type]reflect.Type{},
)
return returns
}

func (o *Operands) GetRhs() float64 {
var returns float64
_jsii_.Get(
o,
\\"rhs\\",
&returns,
map[reflect.Type]reflect.Type{},
)
return returns
}


",
"helloworld/jsii/jsii.go": "package jsii

import (
rt \\"github.com/aws/jsii-runtime-go\\"
\\"sync\\"
)

var once sync.Once

// Initialize performs the necessary work for the enclosing
// module to be loaded in the jsii kernel.
func Initialize() {
once.Do(func(){
// Load this library into the kernel
rt.Load(\\"helloworld\\", \\"0.0.0\\", tarball)
})
}
",
"helloworld/jsii/tarball.embedded.go": "package jsii

var tarball = []byte{
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xed, 0x5a, 0xeb, 0x73, 0xe2, 0xb6,
0x16, 0xef, 0x67, 0xfe, 0x0a, 0x8f, 0xfb, 0x65, 0x77, 0x6f, 0x16, 0x6c, 0x9e, 0x4d, 0x32, 0x99,
0x69, 0x9c, 0xf0, 0x30, 0x0b, 0xa4, 0xe4, 0x01, 0x84, 0x4e, 0xa7, 0x23, 0x5b, 0x02, 0x8b, 0xf8,
0x55, 0x4b, 0x4e, 0x30, 0x9d, 0xfc, 0xef, 0x57, 0xb6, 0xb1, 0x31, 0xd8, 0x40, 0x76, 0x37, 0x9b,
0xb4, 0xf7, 0xa2, 0x19, 0x82, 0x65, 0x1d, 0x9d, 0xc7, 0x4f, 0x47, 0xe2, 0x9c, 0xa3, 0xd8, 0x40,
0x7d, 0x00, 0x53, 0x54, 0xc8, 0xcf, 0x08, 0xc6, 0x3f, 0xfd, 0x98, 0x26, 0x08, 0x42, 0xb5, 0x5c,
0xe6, 0xb2, 0xde, 0xb3, 0x56, 0xab, 0xd4, 0x8a, 0xdc, 0x4f, 0xa5, 0x4a, 0x55, 0x10, 0xc5, 0x6a,
0x55, 0x60, 0x74, 0x82, 0x28, 0x14, 0x4b, 0xec, 0x9d, 0xf0, 0x83, 0xf4, 0x59, 0x6b, 0x2e, 0xa1,
0xc0, 0x61, 0xaa, 0x7c, 0x2f, 0x9f, 0xd0, 0x18, 0x2e, 0xfe, 0xfe, 0x97, 0xb4, 0xbf, 0x73, 0x1c,
0xc7, 0x03, 0x97, 0x6a, 0x96, 0xc3, 0x9f, 0x70, 0x7e, 0x8f, 0xf5, 0x4d, 0x60, 0x20, 0xd6, 0xe3,
0xa7, 0xc8, 0x44, 0x0e, 0xa0, 0x08, 0xfe, 0x1a, 0x3f, 0xe5, 0x55, 0xcb, 0xe0, 0x8f, 0x42, 0x32,
0xc7, 0xd2, 0x11, 0x61, 0x74, 0xbf, 0x07, 0xdd, 0x15, 0x9f, 0xa0, 0xfb, 0x07, 0xfb, 0xfb, 0xec,
0x13, 0xf2, 0x10, 0x11, 0xd5, 0xc1, 0x36, 0xc5, 0x96, 0xe9, 0x33, 0xd5, 0x90, 0xae, 0x5b, 0x4f,
0x96, 0xa3, 0xc3, 0x80, 0x0f, 0xaf, 0x59, 0x06, 0xb2, 0x99, 0x0b, 0x06, 0x63, 0x94, 0xda, 0x27,
0x85, 0x42, 0x2c, 0x2d, 0xa4, 0xf0, 0x5d, 0x73, 0x80, 0x1c, 0xb2, 0x64, 0x20, 0xe6, 0xc5, 0x5a,
0x5e, 0xe4, 0x3e, 0x28, 0x2e, 0xd6, 0x21, 0x57, 0x54, 0x80, 0x5a, 0x99, 0xc0, 0x8f, 0x21, 0xa9,
0x8e, 0x55, 0x64, 0x92, 0x80, 0xd7, 0xb9, 0x0d, 0x54, 0x0d, 0x7d, 0x2e, 0xe6, 0x85, 0x70, 0xc8,
0x40, 0x14, 0x40, 0x40, 0xc1, 0xca, 0x4c, 0x9f, 0x6f, 0xdc, 0x63, 0x7d, 0x36, 0xc1, 0x00, 0x0f,
0x89, 0x37, 0xbe, 0x76, 0x80, 0x5c, 0xa2, 0x09, 0x70, 0x75, 0x2a, 0x9b, 0x14, 0x39, 0x13, 0xa0,
0x06, 0x26, 0x53, 0xc7, 0x45, 0x4b, 0xa2, 0xe7, 0x5c, 0xf4, 0x37, 0x34, 0x37, 0x02, 0x6f, 0xd3,
0x4e, 0x07, 0xd9, 0x16, 0xc1, 0xd4, 0x72, 0xbc, 0x95, 0x06, 0xd4, 0xb3, 0x43, 0xa0, 0x31, 0x8d,
0x40, 0x75, 0x1d, 0x3d, 0x13, 0x89, 0x98, 0x3f, 0x61, 0x56, 0x19, 0xbe, 0x15, 0x81, 0xfe, 0x05,
0x21, 0x2f, 0x0a, 0x91, 0x89, 0xcc, 0x93, 0xa7, 0x88, 0x92, 0x15, 0xff, 0xa9, 0x95, 0xb4, 0xcf,
0xb0, 0xa0, 0xab, 0xa3, 0x5e, 0x5a, 0xbf, 0xd0, 0x82, 0xa3, 0x08, 0x95, 0xe4, 0x1c, 0xd3, 0x36,
0x32, 0x89, 0x63, 0x75, 0x7c, 0x13, 0x12, 0x12, 0x57, 0x84, 0xf9, 0x0b, 0xa0, 0xab, 0xae, 0x0e,
0x68, 0xc2, 0xb3, 0x7c, 0x1f, 0x21, 0x04, 0x19, 0x8a, 0xee, 0x65, 0x40, 0x14, 0x8c, 0x43, 0x4b,
0x25, 0xeb, 0x4b, 0x40, 0x5c, 0xc3, 0x00, 0x01, 0x6a, 0xfc, 0x39, 0x47, 0x2c, 0x5b, 0xc3, 0x84,
0x62, 0x15, 0x20, 0xc8, 0x19, 0x6c, 0x59, 0xf0, 0x67, 0x1d, 0x98, 0x53, 0x97, 0x39, 0x10, 0xa7,
0xc6, 0x02, 0xf3, 0x7c, 0xb4, 0x38, 0x31, 0xdf, 0xc9, 0x5f, 0x1b, 0xde, 0x97, 0xd4, 0x2f, 0xa6,
0xc2, 0x26, 0xa6, 0x18, 0xe8, 0x78, 0x81, 0x02, 0xa5, 0x57, 0xd3, 0x1f, 0xb0, 0x09, 0xfd, 0xf9,
0xaa, 0xce, 0x0c, 0x58, 0xd1, 0xeb, 0x96, 0x0a, 0x7c, 0xc7, 0x96, 0xcd, 0x6e, 0x00, 0xee, 0xba,
0xe6, 0x13, 0xac, 0xa3, 0xc8, 0x1d, 0x74, 0xac, 0x14, 0x0c, 0x80, 0xcd, 0x3c, 0x5d, 0x4d, 0x0f,
0x1c, 0xd6, 0xf4, 0x87, 0xc5, 0xe3, 0x94, 0xc2, 0xcc, 0x5f, 0x35, 0x0b, 0x26, 0xf7, 0x17, 0x97,
0xe0, 0x9d, 0x85, 0x54, 0x0a, 0x2d, 0x08, 0x09, 0x47, 0x35, 0xc4, 0xd1, 0x27, 0x8b, 0xb3, 0x6c,
0xe6, 0x48, 0x26, 0x24, 0x31, 0x34, 0x6b, 0xd2, 0xf6, 0x1b, 0xf3, 0x42, 0x83, 0x92, 0x46, 0x15,
0xcb, 0x5b, 0x45, 0x45, 0x4c, 0x00, 0x84, 0x6b, 0x93, 0xd9, 0x1e, 0x74, 0xd8, 0x10, 0xdb, 0x69,
0xeb, 0x86, 0x6f, 0x1a, 0xbf, 0x1d, 0x80, 0x4d, 0x10, 0x32, 0xed, 0x4e, 0x29, 0xb4, 0xa6, 0x94,
0x65, 0x6f, 0x5a, 0xb4, 0xda, 0xaa, 0x19, 0xc2, 0xd2, 0x9e, 0x75, 0xb5, 0x94, 0x99, 0x12, 0x99,
0xdb, 0xd6, 0xfb, 0x63, 0x0d, 0x04, 0x07, 0x51, 0xd7, 0x31, 0x33, 0x16, 0x77, 0x8b, 0x12, 0xbc,
0xed, 0x60, 0x83, 0x39, 0xee, 0x63, 0xa0, 0xbe, 0xe9, 0x1a, 0x0a, 0x72, 0xf8, 0xad, 0xb2, 0x56,
0xcf, 0x09, 0x08, 0xbe, 0xce, 0xb3, 0xba, 0xfe, 0xc6, 0xb3, 0x75, 0x8c, 0xde, 0xd5, 0xbf, 0xca,
0xc2, 0x5e, 0xff, 0x62, 0x27, 0xc4, 0xc1, 0xbf, 0xb8, 0x7f, 0x9d, 0x7f, 0xdd, 0xb8, 0x0a, 0x75,
0x80, 0x4a, 0xdf, 0xd5, 0xbd, 0x4a, 0xc5, 0xbd, 0xee, 0x45, 0x5c, 0xe5, 0xe0, 0x5e, 0xdc, 0xbb,
0xb9, 0x57, 0x6e, 0x43, 0x7a, 0x0c, 0x41, 0xe2, 0xa7, 0x7d, 0x2d, 0xb6, 0xc9, 0x32, 0xf2, 0x6b,
0x62, 0x13, 0x16, 0x3e, 0x2e, 0x6d, 0xf0, 0x03, 0xc0, 0x97, 0xc5, 0x2c, 0x5d, 0x40, 0xb5, 0xb4,
0xfb, 0xee, 0x0a, 0x4c, 0x62, 0xd5, 0x52, 0xd1, 0x07, 0x8e, 0x62, 0xd0, 0xd7, 0x8f, 0x40, 0xca,
0x29, 0xc5, 0xa2, 0x79, 0x69, 0x75, 0x6c, 0xc7, 0xb7, 0x87, 0x62, 0xb4, 0x23, 0x3a, 0x01, 0x0a,
0x09, 0xb6, 0xf0, 0x06, 0x56, 0xd9, 0x78, 0x6d, 0x62, 0xd6, 0x41, 0x13, 0xfa, 0x59, 0x63, 0x42,
0x39, 0x82, 0x21, 0x8a, 0xd0, 0xdb, 0xb1, 0xf7, 0xb1, 0x61, 0xb8, 0x14, 0x28, 0xfa, 0xe6, 0xd2,
0xec, 0x87, 0xe8, 0x85, 0x30, 0x25, 0xa1, 0xfa, 0x65, 0xef, 0xb9, 0xa0, 0x6b, 0xeb, 0x73, 0xb3,
0x3d, 0x7f, 0x9f, 0xdf, 0xef, 0x3f, 0x48, 0xbf, 0x0b, 0xe4, 0x6b, 0x3c, 0xd5, 0xfe, 0xc1, 0x28,
0x8b, 0xa5, 0xbd, 0x30, 0x3b, 0xaf, 0x0d, 0x73, 0x74, 0xa0, 0xe4, 0xa2, 0x5e, 0x98, 0xe3, 0x3c,
0xae, 0x92, 0x4f, 0x96, 0x6b, 0x45, 0xd9, 0xd6, 0x04, 0x9b, 0x53, 0xe4, 0x30, 0xe6, 0x26, 0x0d,
0x2c, 0x7a, 0xe8, 0x0d, 0x54, 0xa3, 0x33, 0xee, 0x77, 0x2b, 0xb3, 0xf6, 0x63, 0x0d, 0xc0, 0xee,
0xf1, 0x75, 0xd5, 0x92, 0x94, 0xf6, 0x2f, 0xd3, 0xc9, 0xf9, 0xfd, 0xb0, 0x73, 0x71, 0x7c, 0x33,
0xd4, 0x11, 0x7e, 0xb8, 0x25, 0xea, 0x19, 0x9f, 0x7b, 0xce, 0xbd, 0x77, 0xe6, 0x1f, 0x36, 0x7b,
0x59, 0xff, 0x89, 0xd7, 0x63, 0x46, 0x5e, 0x5d, 0xc6, 0xee, 0xfa, 0x4f, 0x59, 0xac, 0x54, 0x37,
0xeb, 0x3f, 0x62, 0x49, 0xac, 0x1e, 0xea, 0x3f, 0x6f, 0xd1, 0x78, 0x97, 0x20, 0x8e, 0x1d, 0x22,
0x98, 0x1d, 0x22, 0xa7, 0xb9, 0x2b, 0x65, 0x86, 0x54, 0x9a, 0x87, 0x88, 0xf9, 0x36, 0xfa, 0x2d,
0x3c, 0xe5, 0xbd, 0x0f, 0x68, 0x6e, 0x5b, 0x0e, 0x25, 0x47, 0x1c, 0xff, 0xe7, 0x9f, 0x88, 0x2c,
0x77, 0xf7, 0x11, 0xf7, 0x37, 0xf7, 0x08, 0x74, 0x17, 0x85, 0x47, 0x01, 0xf7, 0xfc, 0xf1, 0x34,
0xb7, 0x24, 0x4c, 0x64, 0xd6, 0xdc, 0x19, 0xf7, 0x68, 0x61, 0xc8, 0x09, 0xa7, 0xb9, 0xc2, 0xa7,
0x4f, 0x39, 0xee, 0x13, 0xf7, 0xe2, 0x14, 0x9e, 0x11, 0x17, 0x72, 0x41, 0xba, 0xcd, 0x25, 0xf8,
0x85, 0x5b, 0x3b, 0xe0, 0xe5, 0x37, 0xc6, 0x2f, 0x33, 0xc9, 0x5d, 0x8e, 0x46, 0x44, 0xbf, 0x06,
0x71, 0x19, 0x1b, 0x26, 0x29, 0x92, 0x42, 0xf0, 0xcd, 0xf2, 0xd0, 0x0f, 0x6c, 0xf4, 0x63, 0xe2,
0xe8, 0x08, 0xa3, 0x18, 0x7f, 0x4e, 0x9e, 0x1d, 0xe7, 0xdc, 0x7f, 0x82, 0x27, 0x76, 0xe2, 0x9c,
0xe6, 0x56, 0x47, 0x45, 0x42, 0x8f, 0x1d, 0x21, 0xeb, 0xd7, 0x2a, 0xc3, 0xa2, 0xca, 0x3d, 0xca,
0x7c, 0xde, 0xa3, 0xcc, 0xae, 0xfc, 0xec, 0x6b, 0xb5, 0x61, 0x2b, 0xb4, 0x47, 0x9b, 0x4f, 0x9b,
0xda, 0x3c, 0x67, 0x7b, 0xc2, 0xaa, 0xc3, 0xbc, 0xa1, 0xf0, 0x33, 0x73, 0x04, 0xd7, 0x51, 0x51,
0x17, 0xd8, 0x36, 0x3b, 0x49, 0xef, 0xae, 0x3b, 0x67, 0x7e, 0x7c, 0x75, 0xc2, 0xba, 0x3a, 0x0e,
0x7f, 0x4a, 0x0a, 0x33, 0x62, 0x99, 0xa7, 0x0a, 0x20, 0xa8, 0x5a, 0x3e, 0x42, 0x5e, 0xbb, 0x38,
0x1e, 0xb5, 0x17, 0x60, 0x78, 0xec, 0xca, 0x33, 0x6b, 0xd1, 0xb9, 0x68, 0x1b, 0x60, 0x38, 0xd7,
0xd9, 0x33, 0x56, 0x86, 0x0d, 0x5b, 0xc1, 0x95, 0xbf, 0x54, 0x4f, 0x26, 0xb2, 0xd9, 0x7b, 0x84,
0xa3, 0xf6, 0x6c, 0x3c, 0x68, 0x3f, 0x2a, 0xa5, 0x3e, 0xbe, 0xc2, 0x32, 0x66, 0xb4, 0x0b, 0xa5,
0x34, 0xf0, 0xee, 0x8b, 0x83, 0x85, 0x3c, 0xb3, 0x15, 0xd9, 0x10, 0x35, 0x30, 0x2c, 0xbb, 0xb0,
0xd5, 0xc5, 0xa3, 0x9b, 0x27, 0xac, 0x18, 0x0d, 0x3a, 0x1e, 0x75, 0xf1, 0x95, 0x4e, 0x21, 0xa3,
0xa5, 0xf7, 0x23, 0xe9, 0x09, 0x0c, 0x2b, 0x26, 0xe3, 0x57, 0x95, 0x67, 0xa4, 0x76, 0xb5, 0x60,
0x1f, 0xa1, 0x21, 0x01, 0xa1, 0x2d, 0x75, 0xea, 0xa2, 0xd4, 0x1f, 0xd6, 0xc9, 0xe0, 0xae, 0x21,
0x0d, 0x6e, 0xa3, 0x31, 0x5d, 0xba, 0x29, 0xf6, 0xc9, 0x35, 0xa3, 0xb9, 0xf6, 0xe6, 0x97, 0xfd,
0xbb, 0xc6, 0x65, 0xa7, 0x0e, 0x7d, 0xba, 0xda, 0x1d, 0x7b, 0x86, 0x75, 0x99, 0xdc, 0xb2, 0xb1,
0x5b, 0x6f, 0xde, 0x62, 0x63, 0xad, 0x4e, 0xbd, 0x27, 0xf5, 0xef, 0xba, 0x11, 0xfd, 0xf2, 0x1d,
0xa3, 0xbf, 0x53, 0x49, 0x9f, 0xbd, 0xeb, 0xaf, 0xd3, 0xd5, 0x6e, 0x18, 0x8f, 0xae, 0x20, 0x87,
0x63, 0x8b, 0x95, 0xcc, 0xdb, 0x3b, 0xe1, 0x7f, 0x48, 0x66, 0x3d, 0x94, 0x79, 0x17, 0xc9, 0xa4,
0x8c, 0x7f, 0xaf, 0xe9, 0xe3, 0x8e, 0xea, 0xed, 0x7a, 0xa7, 0x09, 0x2f, 0xfb, 0x23, 0x78, 0xd1,
0x4f, 0xae, 0xf1, 0xa8, 0x77, 0xa9, 0x14, 0x2b, 0xc2, 0x78, 0x58, 0x11, 0x82, 0x75, 0xc5, 0xe7,
0x53, 0xf9, 0x62, 0xc7, 0xa7, 0x31, 0x77, 0xc7, 0x23, 0xed, 0x49, 0x29, 0xb5, 0x05, 0xb9, 0xa9,
0xbb, 0xb0, 0x39, 0xf0, 0xc6, 0x46, 0x63, 0x36, 0xbe, 0x91, 0x7e, 0x53, 0xd9, 0xf3, 0xfd, 0xb0,
0xf2, 0xa0, 0x7a, 0x52, 0x6d, 0xd4, 0x2c, 0xef, 0xe6, 0x93, 0xf9, 0x91, 0x54, 0x85, 0xc9, 0x57,
0x8d, 0x81, 0x36, 0x6e, 0x1e, 0xbb, 0x4a, 0xeb, 0x61, 0xaa, 0x34, 0xb5, 0xc5, 0x15, 0x96, 0x5c,
0x38, 0x14, 0xf1, 0x78, 0x24, 0x33, 0xbe, 0x95, 0x80, 0xe6, 0x35, 0x78, 0xab, 0x46, 0x8a, 0xf7,
0xf1, 0xb7, 0xf3, 0xdf, 0x85, 0x53, 0x8f, 0xdc, 0x8f, 0x7a, 0x0b, 0xb9, 0xde, 0xd3, 0x94, 0x66,
0x4f, 0x54, 0x9a, 0x0d, 0x41, 0x29, 0xc9, 0x53, 0x24, 0xce, 0xdd, 0xef, 0x96, 0x93, 0xf1, 0x09,
0xb0, 0x6f, 0x49, 0xe2, 0xbd, 0x31, 0xb7, 0xef, 0x3d, 0x89, 0xd9, 0xdb, 0xb7, 0x94, 0x92, 0xe4,
0xdb, 0x9a, 0x58, 0xa3, 0x87, 0x95, 0xfc, 0x56, 0x5b, 0x87, 0xad, 0x81, 0xa7, 0x60, 0xe9, 0x51,
0x6d, 0x75, 0x5d, 0x1f, 0x73, 0xf9, 0x82, 0x4c, 0xfd, 0x39, 0x1d, 0xb3, 0x6d, 0xa9, 0x0b, 0x1a,
0x60, 0x32, 0x19, 0xcc, 0xdd, 0x6f, 0x5b, 0xd7, 0x97, 0x63, 0xc6, 0xd6, 0xe9, 0x09, 0x0e, 0xdb,
0x04, 0x0c, 0xbb, 0x53, 0xb5, 0x34, 0xc0, 0x5f, 0x9a, 0xc7, 0x4f, 0xea, 0xc2, 0x9a, 0xde, 0x96,
0x24, 0x5d, 0x35, 0x1a, 0xee, 0xb8, 0xd5, 0xb5, 0xe5, 0x16, 0x5d, 0xae, 0x91, 0xe4, 0x8d, 0x47,
0xd7, 0xa2, 0x6a, 0x94, 0x43, 0x5d, 0x8d, 0xb9, 0xa5, 0x7a, 0xe7, 0x54, 0xf6, 0xe7, 0x78, 0x15,
0x0f, 0xb4, 0xba, 0xa1, 0x1f, 0xb6, 0xc4, 0x80, 0xfe, 0x87, 0xea, 0x1e, 0xf9, 0x57, 0x6b, 0x80,
0x95, 0xa6, 0x3e, 0x93, 0x9b, 0xa2, 0xa8, 0x5c, 0x68, 0x3e, 0x9e, 0x55, 0xb9, 0x7e, 0xfc, 0xc4,
0xce, 0x5d, 0x4d, 0x31, 0xae, 0x17, 0x5f, 0x6e, 0x56, 0x7b, 0x83, 0xf9, 0xa2, 0xc0, 0xf6, 0xa0,
0xbb, 0xd4, 0x97, 0x30, 0x7d, 0xa7, 0x5f, 0x96, 0x6b, 0xe0, 0xfb, 0x66, 0xac, 0xbb, 0xe9, 0xeb,
0xdf, 0x86, 0x93, 0xfe, 0xd9, 0xd9, 0x7b, 0x47, 0x3b, 0x87, 0xb6, 0xd9, 0xa2, 0xf8, 0x7f, 0xf9,
0x9d, 0xf7, 0x7f, 0x71, 0x5f, 0x5b, 0xc6, 0xee, 0xf8, 0x5f, 0xa8, 0x16, 0xd3, 0xf1, 0x7f, 0xa5,
0x72, 0xb8, 0xff, 0x7d, 0x93, 0x16, 0xdc, 0xff, 0x6e, 0xbb, 0xb2, 0xcc, 0xce, 0x7b, 0xe3, 0xdb,
0xe2, 0x9d, 0xf7, 0xc3, 0xbc, 0x9f, 0x4d, 0xae, 0x65, 0xfa, 0x33, 0xc2, 0xaf, 0xdd, 0x18, 0xae,
0x46, 0x60, 0x54, 0x05, 0xd8, 0x75, 0x7f, 0x9b, 0x75, 0x7f, 0xba, 0xed, 0xb2, 0x74, 0x59, 0xee,
0x4b, 0x5e, 0xaf, 0xc6, 0xc9, 0xfc, 0xda, 0xad, 0x2f, 0x6f, 0xb9, 0x14, 0xe2, 0xc0, 0x18, 0xc8,
0x72, 0x92, 0x78, 0xe2, 0xc6, 0x45, 0xea, 0xe6, 0x55, 0xea, 0xde, 0xcb, 0xd4, 0xf4, 0xb5, 0x30,
0x44, 0x36, 0x32, 0x21, 0x32, 0xd5, 0xb0, 0x6a, 0x16, 0x5e, 0x2d, 0xf2, 0x36, 0x42, 0xce, 0xe5,
0xe6, 0x48, 0xee, 0xf9, 0xed, 0xd6, 0x3f, 0x95, 0xff, 0xfb, 0x6b, 0xf1, 0xca, 0x32, 0x76, 0xef,
0x7f, 0xb1, 0x28, 0xa4, 0xfe, 0xff, 0x43, 0xac, 0x94, 0x6a, 0x87, 0xfd, 0xff, 0x16, 0x6d, 0x99,
0x95, 0xaf, 0x17, 0xa9, 0x83, 0xd4, 0x3b, 0x4c, 0xe1, 0xb8, 0xb8, 0xe4, 0xcc, 0x45, 0x75, 0xe0,
0x74, 0x0e, 0xbe, 0xa5, 0x5c, 0xbb, 0x96, 0x46, 0x3a, 0x08, 0x40, 0xcb, 0xd4, 0x3d, 0x8e, 0x65,
0x8c, 0x27, 0x5c, 0x58, 0x85, 0x3b, 0xdd, 0x64, 0xb4, 0xad, 0x24, 0x99, 0xcd, 0xc9, 0x49, 0x72,
0x7a, 0xfe, 0xb6, 0x02, 0xc3, 0xd2, 0x4a, 0x88, 0x54, 0x1d, 0x38, 0x6c, 0xf8, 0x6d, 0xeb, 0x0d,
0x27, 0x31, 0xa8, 0x1f, 0xb7, 0x62, 0xf2, 0xfa, 0x85, 0x85, 0x97, 0x48, 0xfd, 0x01, 0x15, 0x84,
0x4c, 0xb1, 0xff, 0x94, 0x3a, 0xe8, 0xa1, 0x1d, 0xda, 0xa1, 0x1d, 0xda, 0xff, 0x5b, 0xfb, 0x2f,
0xc5, 0xb2, 0x36, 0x3b, 0x00, 0x2c, 0x00, 0x00,
}

func init() {
if len(tarball) != 1912 {
panic(\\"Tarball data does not have expected length (1912 bytes)\\")
}
}
",
}
`;

exports[`java output 1`] = `
Object {
"src/main/java/mypackage/$Module.java": "package mypackage;
Expand Down
Loading