EA-40568 (skip incorrect parameter names)

This commit is contained in:
Roman Shevchenko
2012-11-02 21:50:43 +01:00
parent cf1c706f5d
commit a24681a5cc
7 changed files with 53 additions and 20 deletions
@@ -52,6 +52,6 @@ public class ClassFileStubBuilder implements BinaryFileStubBuilder {
@Override
public int getStubVersion() {
return JavaFileElementType.STUB_VERSION + 4;
return JavaFileElementType.STUB_VERSION + 5;
}
}
@@ -15,8 +15,6 @@
*/
package com.intellij.psi.impl.compiled;
import com.intellij.lexer.JavaLexer;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.psi.tree.IElementType;
@@ -53,9 +51,7 @@ class ClsIdentifierImpl extends ClsElementImpl implements PsiIdentifier, PsiJava
}
private boolean isCorrectName(String name) {
return name != null &&
StringUtil.isJavaIdentifier(name) &&
!JavaLexer.isKeyword(name, ((PsiJavaFile)getContainingFile()).getLanguageLevel());
return name != null && ClsParsingUtil.isJavaIdentifier(name, ((PsiJavaFile)getContainingFile()).getLanguageLevel());
}
@Override
@@ -18,7 +18,9 @@ package com.intellij.psi.impl.compiled;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.java.parser.JavaParser;
import com.intellij.lang.java.parser.JavaParserUtil;
import com.intellij.lexer.JavaLexer;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiJavaParserFacadeImpl;
@@ -160,4 +162,8 @@ public class ClsParsingUtil {
LOG.error("Unable to compute expression value: " + expr);
return null;
}
public static boolean isJavaIdentifier(@NotNull String identifier, @NotNull LanguageLevel level) {
return StringUtil.isJavaIdentifier(identifier) && !JavaLexer.isKeyword(identifier, level);
}
}
@@ -426,13 +426,8 @@ public class StubBuildingVisitor<T> extends ClassVisitor {
String[] thrownTypes = buildThrowsList(exceptions, throwables, parsedViaGenericSignature);
new PsiClassReferenceListStubImpl(JavaStubElementTypes.THROWS_LIST, stub, thrownTypes, PsiReferenceList.Role.THROWS_LIST);
final boolean isEnumConstructor = isConstructor && myResult.isEnum();
int localVarIgnoreCount = (access & Opcodes.ACC_STATIC) != 0 ? 0 : 1;
if (isEnumConstructor) {
localVarIgnoreCount += 2;
}
final int paramIgnoreCount = isEnumConstructor? 2 : isNonStaticInnerClassConstructor ? 1 : 0;
final int localVarIgnoreCount = (access & Opcodes.ACC_STATIC) != 0 ? 0 : isConstructor && myResult.isEnum() ? 3 : 1;
final int paramIgnoreCount = isConstructor && myResult.isEnum() ? 2 : isNonStaticInnerClassConstructor ? 1 : 0;
return new AnnotationParamCollectingVisitor(stub, modList, localVarIgnoreCount, paramIgnoreCount, paramCount, paramStubs);
}
@@ -610,10 +605,10 @@ public class StubBuildingVisitor<T> extends ClassVisitor {
private AnnotationParamCollectingVisitor(final PsiMethodStub owner,
final PsiModifierListStub modList,
int ignoreCount,
int paramIgnoreCount,
int paramCount,
PsiParameterStubImpl[] paramStubs) {
final int ignoreCount,
final int paramIgnoreCount,
final int paramCount,
final PsiParameterStubImpl[] paramStubs) {
super(Opcodes.ASM4);
myOwner = owner;
myModList = modList;
@@ -649,10 +644,14 @@ public class StubBuildingVisitor<T> extends ClassVisitor {
// long and double variables increase the index by 2, not by 1
int paramIndex = (index - myIgnoreCount == myUsedParamSize) ? myUsedParamCount : index - myIgnoreCount;
if (paramIndex >= myParamCount) return;
PsiParameterStubImpl parameterStub = myParamStubs[paramIndex];
if (parameterStub != null) {
parameterStub.setName(name);
if (ClsParsingUtil.isJavaIdentifier(name, LanguageLevel.HIGHEST)) {
PsiParameterStubImpl parameterStub = myParamStubs[paramIndex];
if (parameterStub != null) {
parameterStub.setName(name);
}
}
myUsedParamCount = paramIndex+1;
if ("D".equals(desc) || "J".equals(desc)) {
myUsedParamSize += 2;
@@ -0,0 +1,31 @@
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package com.google.android.maps;
public class OverlayItem {
protected final com.google.android.maps.GeoPoint mPoint;
protected final java.lang.String mTitle;
protected final java.lang.String mSnippet;
protected android.graphics.drawable.Drawable mMarker;
public static final int ITEM_STATE_FOCUSED_MASK = 4;
public static final int ITEM_STATE_SELECTED_MASK = 2;
public static final int ITEM_STATE_PRESSED_MASK = 1;
public OverlayItem(com.google.android.maps.GeoPoint geoPoint, java.lang.String s, java.lang.String s1) { /* compiled code */ }
public void setMarker(android.graphics.drawable.Drawable drawable) { /* compiled code */ }
public android.graphics.drawable.Drawable getMarker(int i) { /* compiled code */ }
public static void setState(android.graphics.drawable.Drawable drawable, int i) { /* compiled code */ }
public java.lang.String getTitle() { /* compiled code */ }
public java.lang.String getSnippet() { /* compiled code */ }
public com.google.android.maps.GeoPoint getPoint() { /* compiled code */ }
public java.lang.String routableAddress() { /* compiled code */ }
}
@@ -37,6 +37,7 @@ public class ClsMirrorBuildingTest extends LightIdeaTestCase {
public void testExtMethods() { doTest(); }
public void testMethodReceiver() { doTest(); }
public void testPackageInfo() { doTest("package-info"); }
public void testEA40568() { doTest(); }
private void doTest() {
doTest(getTestName(false));