diff options
author | Michael Thvedt <mthvedt@google.com> | 2015-08-12 18:09:52 +0000 |
---|---|---|
committer | Florian Weikert <fwe@google.com> | 2015-08-13 14:01:23 +0000 |
commit | 583c356d5b5d01516ba07e79ae54c7fd3769ebfb (patch) | |
tree | 60ea3cc17262431d4b8e6070f32662fb307ca05b /examples | |
parent | 828a4bee6007849c51c56ff0f17040f036ddae38 (diff) |
Open-source full support for J2ObjC in Bazel, including dead code removal, and add an example.
--
MOS_MIGRATED_REVID=100493818
Diffstat (limited to 'examples')
-rw-r--r-- | examples/j2objc/BUILD | 51 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/AppDelegate.h | 21 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/AppDelegate.m | 35 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/GreeterViewController.h | 21 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/GreeterViewController.m | 45 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist | 60 | ||||
-rw-r--r-- | examples/j2objc/J2ObjcExample/main.m | 22 | ||||
-rw-r--r-- | examples/j2objc/README.md | 17 | ||||
-rw-r--r-- | examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java | 51 | ||||
-rw-r--r-- | examples/j2objc/src/main/java/com/example/myproject/package-info.java | 21 |
10 files changed, 344 insertions, 0 deletions
diff --git a/examples/j2objc/BUILD b/examples/j2objc/BUILD new file mode 100644 index 0000000000..1507be426c --- /dev/null +++ b/examples/j2objc/BUILD @@ -0,0 +1,51 @@ +# Copyright 2015 Google Inc. All rights reserved. +# +# 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. + +java_library( + name = "J2ObjcExample-Java", + srcs = glob(["src/main/java/**/*.java"]), + deps = [ + "//third_party/java/j2objc:annotations", + ], +) + +j2objc_library( + name = "J2ObjcExample-J2Objc", + entry_classes = ["com.example.myproject.SimpleGreeter"], + deps = [":J2ObjcExample-Java"], +) + +objc_binary( + name = "J2ObjcExample", + srcs = glob([ + "J2ObjcExample/*.m", + ]), + hdrs = glob([ + "J2ObjcExample/*.h", + ]), + infoplist = "J2ObjcExample/J2ObjcExample-Info.plist", + deps = [ + ":J2ObjcExample-J2Objc", + ], +) + +filegroup( + name = "srcs", + srcs = glob([ + "J2ObjcExample/*", + "src/**", + "BUILD", + ]), + visibility = ["//examples:__pkg__"], +) diff --git a/examples/j2objc/J2ObjcExample/AppDelegate.h b/examples/j2objc/J2ObjcExample/AppDelegate.h new file mode 100644 index 0000000000..4132daaf55 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/AppDelegate.h @@ -0,0 +1,21 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +#import <UIKit/UIKit.h> + +@interface AppDelegate : UIResponder <UIApplicationDelegate> + +@property(strong, nonatomic) UIWindow *window; + +@end diff --git a/examples/j2objc/J2ObjcExample/AppDelegate.m b/examples/j2objc/J2ObjcExample/AppDelegate.m new file mode 100644 index 0000000000..8339e62ab0 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/AppDelegate.m @@ -0,0 +1,35 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +#import "AppDelegate.h" + +#import "GreeterViewController.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + + UIViewController *viewController = [[GreeterViewController alloc] init]; + + self.window.rootViewController = viewController; + + [self.window makeKeyAndVisible]; + + return YES; +} + +@end diff --git a/examples/j2objc/J2ObjcExample/GreeterViewController.h b/examples/j2objc/J2ObjcExample/GreeterViewController.h new file mode 100644 index 0000000000..bf5f9971a2 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/GreeterViewController.h @@ -0,0 +1,21 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +#import <UIKit/UIKit.h> + +@interface GreeterViewController : UIViewController + +- (void)greet; + +@end
\ No newline at end of file diff --git a/examples/j2objc/J2ObjcExample/GreeterViewController.m b/examples/j2objc/J2ObjcExample/GreeterViewController.m new file mode 100644 index 0000000000..51838658b3 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/GreeterViewController.m @@ -0,0 +1,45 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +#import "GreeterViewController.h" + +#import "examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.h" + +@interface GreeterViewController () + +@property(strong, nonatomic) MyProjectSimpleGreeter *myGreeter; + +@property(weak, nonatomic) UILabel *greeterLabel; + +@end + +@implementation GreeterViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 40)]; + [self.view addSubview:label]; + _greeterLabel = label; + + _myGreeter = [[MyProjectSimpleGreeter alloc] initWithId:@"world"]; + [self greet]; +} + +- (void)greet { + self.greeterLabel.textColor = [UIColor whiteColor]; + self.greeterLabel.text = [_myGreeter hello]; +} + +@end diff --git a/examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist b/examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist new file mode 100644 index 0000000000..8b695fabd5 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2015 Google Inc. All rights reserved. + + 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. +--> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>en</string> + <key>CFBundleDisplayName</key> + <string>J2ObjcExample</string> + <key>CFBundleExecutable</key> + <string>J2ObjcExample</string> + <key>CFBundleIdentifier</key> + <string>Google.J2ObjcExample</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>J2ObjcExample</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UIRequiredDeviceCapabilities</key> + <array> + <string>armv7</string> + </array> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> +</dict> +</plist> diff --git a/examples/j2objc/J2ObjcExample/main.m b/examples/j2objc/J2ObjcExample/main.m new file mode 100644 index 0000000000..d70550a730 --- /dev/null +++ b/examples/j2objc/J2ObjcExample/main.m @@ -0,0 +1,22 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +#import <UIKit/UIKit.h> + +int main(int argc, char * argv[]) { + @autoreleasepool { + NSString *delegateClassName = @"AppDelegate"; + return UIApplicationMain(argc, argv, nil, delegateClassName); + } +} diff --git a/examples/j2objc/README.md b/examples/j2objc/README.md new file mode 100644 index 0000000000..f30a52348a --- /dev/null +++ b/examples/j2objc/README.md @@ -0,0 +1,17 @@ +J2ObjC Examples +====== + +J2ObjC is an open-source tool that can transpile Java code to Objective-C code, +which can then be used by dependent Objective-C code. The J2ObjC repository can be found at +<https://github.com/google/j2objc>. + +The example in this directory shows a simple use of J2Objc with a Java library and an iOS app. +Because it builds an iOS application it can only be run on Mac OSX. +Here, a java_library is transpiled to Objective-C via j2objc_library. +We can then have an objc_library call upon this library. + +Build the top-level application with +`bazel build examples/j2objc:J2ObjcExample`, which when finished emits the +path to a generated .ipa which you can then install to your test device. The +same build will also emits the path to an Xcode project directory which you can +open to continue working with the application in Xcode.
\ No newline at end of file diff --git a/examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java b/examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java new file mode 100644 index 0000000000..22fa46403c --- /dev/null +++ b/examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java @@ -0,0 +1,51 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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 com.example.myproject; + +import com.google.j2objc.annotations.ObjectiveCName; + +/** + * A simple Java class that uses a few features of J2ObjC. + */ +public class SimpleGreeter { + private final Object obj; + + public SimpleGreeter(Object obj) { + this.obj = obj; + } + + /** + * A simple method that says Hello to the object you pass in. + */ + public String hello() { + return "Hello, " + obj + "!"; + } + + /** + * A method renamed with ObjectiveCName. + */ + @ObjectiveCName("greetings") + public String hello2() { + return "Greetings, " + obj + "!"; + } + + /** + * Returns a String description of this SimpleGreeter. Note that this method is renamed + * by the J2ObjC transpilation. + */ + public String toString() { + return "This is a SimpleGreeter for " + obj; + } +} diff --git a/examples/j2objc/src/main/java/com/example/myproject/package-info.java b/examples/j2objc/src/main/java/com/example/myproject/package-info.java new file mode 100644 index 0000000000..6bacf4949b --- /dev/null +++ b/examples/j2objc/src/main/java/com/example/myproject/package-info.java @@ -0,0 +1,21 @@ +// Copyright 2015 Google Inc. All rights reserved. +// +// 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. + +/** + * Demonstrates renaming packages in J2ObjC. + */ +@ObjectiveCName("MyProject") +package com.example.myproject; + +import com.google.j2objc.annotations.ObjectiveCName; |