Correctly use a long for the offsets within a generated pack
[egit/charleso.git] / org.spearce.jgit / src / org / spearce / jgit / util / FS_POSIX_Java6.java
blob3b7bf1c3d6ce623c6258e19545bfca82a9e83dd0
1 /*
2 * Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
3 * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
5 * All rights reserved.
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
9 * conditions are met:
11 * - Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
19 * - Neither the name of the Git Development Community nor the
20 * names of its contributors may be used to endorse or promote
21 * products derived from this software without specific prior
22 * written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
25 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
26 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
29 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
31 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
36 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 package org.spearce.jgit.util;
41 import java.io.File;
42 import java.lang.reflect.InvocationTargetException;
43 import java.lang.reflect.Method;
45 class FS_POSIX_Java6 extends FS {
46 private static final Method canExecute;
48 private static final Method setExecute;
50 static {
51 canExecute = needMethod(File.class, "canExecute");
52 setExecute = needMethod(File.class, "setExecutable", Boolean.TYPE);
55 static boolean detect() {
56 return canExecute != null && setExecute != null;
59 private static Method needMethod(final Class<?> on, final String name,
60 final Class<?>... args) {
61 try {
62 return on.getMethod(name, args);
63 } catch (SecurityException e) {
64 return null;
65 } catch (NoSuchMethodException e) {
66 return null;
70 public boolean supportsExecute() {
71 return true;
74 public boolean canExecute(final File f) {
75 try {
76 final Object r = canExecute.invoke(f, (Object[]) null);
77 return ((Boolean) r).booleanValue();
78 } catch (IllegalArgumentException e) {
79 throw new Error(e);
80 } catch (IllegalAccessException e) {
81 throw new Error(e);
82 } catch (InvocationTargetException e) {
83 throw new Error(e);
87 public boolean setExecute(final File f, final boolean canExec) {
88 try {
89 final Object r;
90 r = setExecute.invoke(f, new Object[] { Boolean.valueOf(canExec) });
91 return ((Boolean) r).booleanValue();
92 } catch (IllegalArgumentException e) {
93 throw new Error(e);
94 } catch (IllegalAccessException e) {
95 throw new Error(e);
96 } catch (InvocationTargetException e) {
97 throw new Error(e);