vm/src/test/java/org/apidesign/vm4brwsr/Classes.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 02 Dec 2012 14:01:17 +0100
branchreflection
changeset 237 84ffc347412d
parent 235 bf0a77f029c4
child 261 5d1e20215d12
permissions -rw-r--r--
Annotations with string attributes
jaroslav@222
     1
/**
jaroslav@222
     2
 * Back 2 Browser Bytecode Translator
jaroslav@222
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@222
     4
 *
jaroslav@222
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@222
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@222
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@222
     8
 *
jaroslav@222
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@222
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@222
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@222
    12
 * GNU General Public License for more details.
jaroslav@222
    13
 *
jaroslav@222
    14
 * You should have received a copy of the GNU General Public License
jaroslav@222
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@222
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@222
    17
 */
jaroslav@222
    18
package org.apidesign.vm4brwsr;
jaroslav@222
    19
jaroslav@222
    20
import java.io.IOException;
jaroslav@237
    21
import java.lang.annotation.Annotation;
jaroslav@222
    22
import java.net.MalformedURLException;
jaroslav@222
    23
jaroslav@222
    24
/**
jaroslav@222
    25
 *
jaroslav@222
    26
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@222
    27
 */
jaroslav@235
    28
@ClassesMarker(number = 10)
jaroslav@237
    29
@ClassesNamer(name = "my text")
jaroslav@222
    30
public class Classes {
jaroslav@222
    31
    public static boolean equalsClassesOfExceptions() {
jaroslav@222
    32
        return MalformedURLException.class.getSuperclass() == IOException.class;
jaroslav@222
    33
    }
jaroslav@222
    34
    public static boolean differenceInClasses() {
jaroslav@222
    35
        Class<?> c1 = MalformedURLException.class;
jaroslav@222
    36
        Class<?> c2 = IOException.class;
jaroslav@222
    37
        return c1 != c2;
jaroslav@222
    38
    }
jaroslav@222
    39
    
jaroslav@225
    40
    public static String classForInstance() {
jaroslav@225
    41
        return new IOException().getClass().getName().toString();
jaroslav@225
    42
    }
jaroslav@225
    43
    
jaroslav@222
    44
    public static String name() {
jaroslav@223
    45
        return IOException.class.getName().toString();
jaroslav@222
    46
    }
jaroslav@222
    47
    public static String simpleName() {
jaroslav@222
    48
        return IOException.class.getSimpleName();
jaroslav@222
    49
    }
jaroslav@222
    50
    public static String canonicalName() {
jaroslav@222
    51
        return IOException.class.getCanonicalName();
jaroslav@222
    52
    }
jaroslav@231
    53
    public static boolean newInstance() throws Exception {
jaroslav@231
    54
        IOException ioe = IOException.class.newInstance();
jaroslav@231
    55
        if (ioe instanceof IOException) {
jaroslav@231
    56
            return ioe.getClass() == IOException.class;
jaroslav@231
    57
        }
jaroslav@231
    58
        throw new IllegalStateException("Not a subtype: " + ioe);
jaroslav@222
    59
    }
jaroslav@235
    60
    public static int getMarker() {
jaroslav@235
    61
        if (!Classes.class.isAnnotationPresent(ClassesMarker.class)) {
jaroslav@235
    62
            return -2;
jaroslav@235
    63
        }
jaroslav@235
    64
        ClassesMarker cm = Classes.class.getAnnotation(ClassesMarker.class);
jaroslav@235
    65
        return cm == null ? -1 : cm.number();
jaroslav@235
    66
    }
jaroslav@237
    67
    public static String getNamer(boolean direct) {
jaroslav@237
    68
        if (direct) {
jaroslav@237
    69
            ClassesNamer cm = Classes.class.getAnnotation(ClassesNamer.class);
jaroslav@237
    70
            return cm == null ? null : cm.name();
jaroslav@237
    71
        }
jaroslav@237
    72
        for (Annotation a : Classes.class.getAnnotations()) {
jaroslav@237
    73
            if (a instanceof ClassesNamer) {
jaroslav@237
    74
                return ((ClassesNamer)a).name();
jaroslav@237
    75
            }
jaroslav@237
    76
        }
jaroslav@237
    77
        return null;
jaroslav@237
    78
    }
jaroslav@222
    79
}