From 583c356d5b5d01516ba07e79ae54c7fd3769ebfb Mon Sep 17 00:00:00 2001 From: Michael Thvedt Date: Wed, 12 Aug 2015 18:09:52 +0000 Subject: Open-source full support for J2ObjC in Bazel, including dead code removal, and add an example. -- MOS_MIGRATED_REVID=100493818 --- examples/j2objc/BUILD | 51 ++++++++++++++++++ examples/j2objc/J2ObjcExample/AppDelegate.h | 21 ++++++++ examples/j2objc/J2ObjcExample/AppDelegate.m | 35 +++++++++++++ .../j2objc/J2ObjcExample/GreeterViewController.h | 21 ++++++++ .../j2objc/J2ObjcExample/GreeterViewController.m | 45 ++++++++++++++++ .../j2objc/J2ObjcExample/J2ObjcExample-Info.plist | 60 ++++++++++++++++++++++ examples/j2objc/J2ObjcExample/main.m | 22 ++++++++ examples/j2objc/README.md | 17 ++++++ .../java/com/example/myproject/SimpleGreeter.java | 51 ++++++++++++++++++ .../java/com/example/myproject/package-info.java | 21 ++++++++ 10 files changed, 344 insertions(+) create mode 100644 examples/j2objc/BUILD create mode 100644 examples/j2objc/J2ObjcExample/AppDelegate.h create mode 100644 examples/j2objc/J2ObjcExample/AppDelegate.m create mode 100644 examples/j2objc/J2ObjcExample/GreeterViewController.h create mode 100644 examples/j2objc/J2ObjcExample/GreeterViewController.m create mode 100644 examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist create mode 100644 examples/j2objc/J2ObjcExample/main.m create mode 100644 examples/j2objc/README.md create mode 100644 examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java create mode 100644 examples/j2objc/src/main/java/com/example/myproject/package-info.java (limited to 'examples') 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 + +@interface AppDelegate : UIResponder + +@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 + +@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 @@ + + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + J2ObjcExample + CFBundleExecutable + J2ObjcExample + CFBundleIdentifier + Google.J2ObjcExample + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + J2ObjcExample + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + 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 + +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 +. + +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; -- cgit v1.2.3