Java 파일에서 열거형 이름을 얻는 방법은 무엇입니까?

Java 파일에서 열거형 이름을 얻는 방법은 무엇입니까?

Java의 열거형 파일은 구조적으로 지저분해질 수 있습니다. 열거형 이름만 가져오려고 합니다.

...
import com.mckesson.dex.model.activityLog.concreteFactory.ModifiedPropertyYesNoFactory;

public enum OrganizationActivityLogItemType implements IActivityLogItemType<OrganizationActivityLog>, DisplaysAs
{

    @Deprecated GENE_VARIANT_PUBLIC( "Gene Variant/Mutation/Allele", null ),

    VARIANTS_MUTATIONS( "Variants/Mutations/ Alleles/Loci/Probes", ALFactory.PUBLIC_PRIVATE ),
    CATEGORIES( "Categories", null ),
    PUBLIC_VISIBLITY_COVERED_WHEN_MEETS_NECESSITY_CRITERIA( "Covered - When Meets Medical Necessity Criteria",
                                                            ALFactory.PUBLIC_PRIVATE ),
    PUBLIC_VISIBLITY_NOT_COVERED_INVESTIGATIONAL(
        "Not Covered - Investigational",
        ALFactory.PUBLIC_PRIVATE ),
    PUBLIC_VISIBLITY_NOT_COVERED_NOT_MEDICALLY_NECESSARY(
        "Not Covered - Not Medically Necessary",
        ALFactory.PUBLIC_PRIVATE ),
...

가깝지만 더 좋을 수도 있을 것 같아요.

awk '{ print $1 }' My.java | grep -v '^"' | grep -v '^ALFactory' | sed -e 's/(//'

Unix cli 도구를 사용하여 enum 파일에서 enum 이름을 얻는 방법은 무엇입니까?

솔루션은 적어도 OS X로 포팅해야 합니다. 왜냐하면 그것이 제 작업 환경이기 때문입니다. 하지만 저는 Linux에서도 실행하는 것을 선호합니다.

답변1

perl이 작업을 수행하는 스크립트는 다음과 같습니다. 명령줄에서 파이프 명령을 실행하는 것은 불가능하거나 유지 관리가 불가능합니다. 순진한 접근 방식은

perl -npe 's/\b|\s+/\n/g' < My.java | grep '^[A-Z]\+_[A-Z_]\+'

그러나 다음 스크립트가 더 좋습니다.

#!perl -w
my $content = do { local $/; <> };
my @tokens = split /\b|\s+/, $content;
my $n = 0;
my $skip;

foreach (@tokens) {
    $n++; $skip = 0;
    next if /\s+/;
    next if /"/ ... /"/;    # skip strings
    next if /\(/ .. /\)/;   # skip parameters
    next if /@/ .. /^\w+$/; # skip annotations
    $skip ||= 1  if $n == 1 .. /\benum\b/; # skip from beginning to enum
    $skip ||= 1  if /enum/ .. /\{/; # skip to open bracket
    next if $skip;
    last if /\}/;

    print $_, "\n";
}

관련 정보