Skip to content

Commit

Permalink
Throw ReflectionStrippedError when getDeclaredField is called on a cl…
Browse files Browse the repository at this point in the history
…ass without metadata.

	Change on 2016/04/22 by ashersb <ashersb@google.com>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=120565898
  • Loading branch information
ashersb authored and Keith Stanger committed Apr 28, 2016
1 parent 4473c32 commit 5e6c328
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
6 changes: 2 additions & 4 deletions jre_emul/Classes/IOSClass.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#import "NSNumber+JavaNumber.h"
#import "NSObject+JavaObject.h"
#import "NSString+JavaString.h"
#import "com/google/j2objc/ReflectionStrippedError.h"
#import "java/lang/AssertionError.h"
#import "java/lang/ClassCastException.h"
#import "java/lang/ClassLoader.h"
Expand Down Expand Up @@ -939,10 +940,7 @@ Ivar FindIvar(IOSClass *cls, NSString *name) {
withMetadata:fieldMeta];
}
} else {
Ivar ivar = FindIvar(iosClass, name);
if (ivar) {
return [JavaLangReflectField fieldWithIvar:ivar withClass:iosClass withMetadata:nil];
}
@throw create_ComGoogleJ2objcReflectionStrippedError_init();
}
}
return nil;
Expand Down
37 changes: 37 additions & 0 deletions jre_emul/Classes/com/google/j2objc/ReflectionStrippedError.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.google.j2objc;

/**
* Thrown when a reflection API is used but reflection was disabled during translation.
*/
public class ReflectionStrippedError extends Error {

private static final String EXCEPTION_MESSAGE =
"Reflection is unavailable. Fix this by avoiding reflection or building without"
+ " --strip-reflection.";

private static final long serialVersionUID = 1896945698960498962L;

/**
* Create a new ReflectionStrippedError.
*/
public ReflectionStrippedError() {
super(EXCEPTION_MESSAGE);
}
}
1 change: 1 addition & 0 deletions jre_emul/java_sources.mk
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ JAVA_PUBLIC_SOURCES_CORE = \
sun/misc/Unsafe.java

JAVA_PRIVATE_SOURCES_CORE = \
com/google/j2objc/ReflectionStrippedError.java \
com/google/j2objc/LibraryNotLinkedError.java \
com/google/j2objc/util/ScopedLocalRef.java \
dalvik/system/BlockGuard.java \
Expand Down

0 comments on commit 5e6c328

Please sign in to comment.