diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java index bb30a0d52867..7c40209ff9cd 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/SignatureParsing.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,11 +21,9 @@ package com.intellij.psi.impl.compiled; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.CommonClassNames; -import com.intellij.psi.PsiReferenceList; import com.intellij.psi.impl.java.stubs.JavaStubElementTypes; import com.intellij.psi.impl.java.stubs.PsiTypeParameterListStub; import com.intellij.psi.impl.java.stubs.PsiTypeParameterStub; -import com.intellij.psi.impl.java.stubs.impl.PsiClassReferenceListStubImpl; import com.intellij.psi.impl.java.stubs.impl.PsiTypeParameterListStubImpl; import com.intellij.psi.impl.java.stubs.impl.PsiTypeParameterStubImpl; import com.intellij.psi.stubs.StubElement; @@ -37,7 +35,6 @@ import org.jetbrains.annotations.Nullable; import java.text.CharacterIterator; import java.util.ArrayList; -import java.util.Collections; @SuppressWarnings({"HardCodedStringLiteral"}) public class SignatureParsing { @@ -58,14 +55,14 @@ public class SignatureParsing { return list; } - private static PsiTypeParameterStub parseTypeParameter(CharacterIterator singatureIterator, PsiTypeParameterListStub parent) + private static PsiTypeParameterStub parseTypeParameter(CharacterIterator signatureIterator, PsiTypeParameterListStub parent) throws ClsFormatException { - StringBuffer name = new StringBuffer(); - while (singatureIterator.current() != ':' && singatureIterator.current() != CharacterIterator.DONE) { - name.append(singatureIterator.current()); - singatureIterator.next(); + StringBuilder name = new StringBuilder(); + while (signatureIterator.current() != ':' && signatureIterator.current() != CharacterIterator.DONE) { + name.append(signatureIterator.current()); + signatureIterator.next(); } - if (singatureIterator.current() == CharacterIterator.DONE) { + if (signatureIterator.current() == CharacterIterator.DONE) { throw new ClsFormatException(); } @@ -73,23 +70,22 @@ public class SignatureParsing { PsiTypeParameterStub parameterStub = new PsiTypeParameterStubImpl(parent, StringRef.fromString(name.toString())); ArrayList bounds = null; - while (singatureIterator.current() == ':') { - singatureIterator.next(); - String bound = parseToplevelClassRefSignature(singatureIterator); + while (signatureIterator.current() == ':') { + signatureIterator.next(); + String bound = parseTopLevelClassRefSignature(signatureIterator); if (bound != null && !bound.equals(CommonClassNames.JAVA_LANG_OBJECT)) { if (bounds == null) bounds = new ArrayList(); bounds.add(bound); } } - String[] sbounds = ArrayUtil.toStringArray(bounds == null ? Collections.emptyList() : bounds); - new PsiClassReferenceListStubImpl(JavaStubElementTypes.EXTENDS_BOUND_LIST, parameterStub, sbounds, PsiReferenceList.Role.EXTENDS_BOUNDS_LIST); + StubBuildingVisitor.newReferenceList(JavaStubElementTypes.EXTENDS_BOUND_LIST, parameterStub, ArrayUtil.toStringArray(bounds)); return parameterStub; } @Nullable - public static String parseToplevelClassRefSignature(CharacterIterator signature) throws ClsFormatException { + public static String parseTopLevelClassRefSignature(CharacterIterator signature) throws ClsFormatException { if (signature.current() == 'L') { return parseParameterizedClassRefSignature(signature); } @@ -101,7 +97,7 @@ public class SignatureParsing { private static String parseTypeVariableRefSignature(CharacterIterator signature) { signature.next(); - StringBuffer id = new StringBuffer(); + StringBuilder id = new StringBuilder(); while (signature.current() != ';' && signature.current() != '>') { id.append(signature.current()); signature.next(); @@ -247,7 +243,7 @@ public class SignatureParsing { case '.': case '=': signature.next(); - // fall thru + // fall through default: variance = '\0'; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index 27185cb786d5..b9de2ddf6b94 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -153,11 +153,12 @@ public class StubBuildingVisitor extends ClassVisitor { } } - private static void newReferenceList(JavaClassReferenceListElementType type, StubElement parent, String... types) { + public static void newReferenceList(JavaClassReferenceListElementType type, StubElement parent, String... types) { PsiReferenceList.Role role; if (type == JavaStubElementTypes.EXTENDS_LIST) role = PsiReferenceList.Role.EXTENDS_LIST; else if (type == JavaStubElementTypes.IMPLEMENTS_LIST) role = PsiReferenceList.Role.IMPLEMENTS_LIST; else if (type == JavaStubElementTypes.THROWS_LIST) role = PsiReferenceList.Role.THROWS_LIST; + else if (type == JavaStubElementTypes.EXTENDS_BOUND_LIST) role = PsiReferenceList.Role.EXTENDS_BOUNDS_LIST; else throw new IllegalArgumentException("Unknown type: " + type); new PsiClassReferenceListStubImpl(type, parent, types, role); @@ -175,9 +176,9 @@ public class StubBuildingVisitor extends ClassVisitor { @Nullable private static String parseClassSignature(final CharacterIterator signatureIterator, final List convertedInterfaces) throws ClsFormatException { - final String convertedSuper = SignatureParsing.parseToplevelClassRefSignature(signatureIterator); + final String convertedSuper = SignatureParsing.parseTopLevelClassRefSignature(signatureIterator); while (signatureIterator.current() != CharacterIterator.DONE) { - final String ifs = SignatureParsing.parseToplevelClassRefSignature(signatureIterator); + final String ifs = SignatureParsing.parseTopLevelClassRefSignature(signatureIterator); if (ifs == null) throw new ClsFormatException(); convertedInterfaces.add(ifs); diff --git a/platform/util-rt/src/com/intellij/util/ArrayUtilRt.java b/platform/util-rt/src/com/intellij/util/ArrayUtilRt.java index f7d51436b884..b18b62889623 100644 --- a/platform/util-rt/src/com/intellij/util/ArrayUtilRt.java +++ b/platform/util-rt/src/com/intellij/util/ArrayUtilRt.java @@ -17,6 +17,7 @@ package com.intellij.util; import org.jetbrains.annotations.NotNull; import com.intellij.util.containers.ContainerUtilRt; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.Collection; @@ -43,9 +44,9 @@ public class ArrayUtilRt { public static final Runnable[] EMPTY_RUNNABLE_ARRAY = new Runnable[0]; @NotNull - public static String[] toStringArray(@NotNull Collection collection) { - if (collection.isEmpty()) return EMPTY_STRING_ARRAY; - return ContainerUtilRt.toArray(collection, new String[collection.size()]); + public static String[] toStringArray(@Nullable Collection collection) { + return collection == null || collection.isEmpty() + ? EMPTY_STRING_ARRAY : ContainerUtilRt.toArray(collection, new String[collection.size()]); } /** diff --git a/platform/util/src/com/intellij/util/ArrayUtil.java b/platform/util/src/com/intellij/util/ArrayUtil.java index a4a5d3d32e20..93d0772cdd55 100644 --- a/platform/util/src/com/intellij/util/ArrayUtil.java +++ b/platform/util/src/com/intellij/util/ArrayUtil.java @@ -710,7 +710,7 @@ public class ArrayUtil extends ArrayUtilRt { } @NotNull - public static String[] toStringArray(@NotNull Collection collection) { + public static String[] toStringArray(@Nullable Collection collection) { return ArrayUtilRt.toStringArray(collection); }