aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorGravatar Michael Thvedt <mthvedt@google.com>2015-08-12 18:09:52 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-08-13 14:01:23 +0000
commit583c356d5b5d01516ba07e79ae54c7fd3769ebfb (patch)
tree60ea3cc17262431d4b8e6070f32662fb307ca05b /examples
parent828a4bee6007849c51c56ff0f17040f036ddae38 (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/BUILD51
-rw-r--r--examples/j2objc/J2ObjcExample/AppDelegate.h21
-rw-r--r--examples/j2objc/J2ObjcExample/AppDelegate.m35
-rw-r--r--examples/j2objc/J2ObjcExample/GreeterViewController.h21
-rw-r--r--examples/j2objc/J2ObjcExample/GreeterViewController.m45
-rw-r--r--examples/j2objc/J2ObjcExample/J2ObjcExample-Info.plist60
-rw-r--r--examples/j2objc/J2ObjcExample/main.m22
-rw-r--r--examples/j2objc/README.md17
-rw-r--r--examples/j2objc/src/main/java/com/example/myproject/SimpleGreeter.java51
-rw-r--r--examples/j2objc/src/main/java/com/example/myproject/package-info.java21
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;